|
分類:[C#]
エクセルファイルを作成して表示する方法について
フォームにあるボタンのクリック時イベントでエクセルファイルを作成して、
それを開いて表示したいと思っています。
エクセルファイルの作成はできたのですが、
1.Interop.Excelで作成
2.ClosedXMLで作成
それぞれわからないことがあります。
1.Interop.Excelで作成
インストールされているエクセルのバージョンがExcel2007、2010、2019とばらばらなことと、
プロセスが残りやすいのであまり使用しない方がいいとネット情報にありました。
確かにタスクマネージャーのプロセスに「EXCEL」が残っていたことがありました。
今のコード上で解放の処理はしているのですが、どこか修正すべき点はありまか?
2.ClosedXMLで作成
ClosedXMLでエクセルを作成して保存はできるのですが、今回は保存までは必要なく
エクセルにデータを入力して、エクセルを開いた状態のままにしておきたいです。
ClosedXMLで作成したエクセルを開いたままにする方法はありますか?
using ClosedXML.Excel;
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
private Microsoft.Office.Interop.Excel.Application xls = null; // Excel自体
private Microsoft.Office.Interop.Excel.Workbook book = null; // ブック
private Microsoft.Office.Interop.Excel.Worksheet sheet = null; // シート
public void ExcelVisibleToggle(Microsoft.Office.Interop.Excel.Application xls, bool setting)
{
if (xls.Visible == !setting)
{
xls.Visible = setting;
}
}
// エクセル使用
private void btnExcel_Click(object sender, EventArgs e)
{
this.xls = new Microsoft.Office.Interop.Excel.Application();
// Excelを非表示:レスポンス向上
ExcelVisibleToggle(xls, false);
this.book = xls.Workbooks.Add();
this.sheet = (Microsoft.Office.Interop.Excel.Worksheet)this.book.Sheets["sheet1"];
// エクセルファイルに項目名を表示
Excel.Range w_rgn = this.sheet.Cells;
try
{
w_rgn[1, 1].value = "項目名1";
w_rgn[1, 2].value = "項目名2";
w_rgn[1, 3].value = "項目名3";
w_rgn[1, 4].value = "項目名4";
w_rgn[1, 5].value = "項目名5";
int cell_row = 2;
// DataGridViewのソースリストをループ
foreach (dgvKoumokuLst d in DgvKoumokuLst)
{
w_rgn[cell_row, 1].value = d.koumoku1;
w_rgn[cell_row, 1].EntireColumn.AutoFit();
w_rgn[cell_row, 2].value = d.koumoku2;
w_rgn[cell_row, 2].EntireColumn.AutoFit();
w_rgn[cell_row, 3].value = d.koumoku3;
w_rgn[cell_row, 3].EntireColumn.AutoFit();
w_rgn[cell_row, 4].value = d.koumoku4;
w_rgn[cell_row, 4].EntireColumn.AutoFit();
w_rgn[cell_row, 5].value = d.koumoku5;
w_rgn[cell_row, 5].EntireColumn.AutoFit();
cell_row++;
}
}
finally
{
// Excelのオブジェクト開放する
Marshal.ReleaseComObject(w_rgn);
w_rgn = null;
}
// シートを選択
ExcelVisibleToggle(xls, true); // Excel表示
// Sheet解放
Marshal.ReleaseComObject(sheet);
// Book解放
//xlBook.Close();
Marshal.ReleaseComObject(book);
// Excelアプリケーションを解放
//xlApp.Quit();
Marshal.ReleaseComObject(xls);
}
// ClosedXML使用
private void btnClosedXML_Click(object sender, EventArgs e)
{
// エクセルオープン
var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("CSV一覧");
worksheet.Cell(1,1).Value = "Hello world";
// 項目名を表示
worksheet.Cell(1, 1).Value = "項目1";
worksheet.Cell(1, 2).Value = "項目2";
worksheet.Cell(1, 3).Value = "項目3";
worksheet.Cell(1, 4).Value = "項目4";
worksheet.Cell(1, 5).Value = "項目5";
int cell_row = 2;
// DataGridViewのソースリストをループ
foreach (dgvKoumokuLst d in DgvKoumokuLst)
{
worksheet.Cell(cell_row, 1).Value = d.koumoku1;
worksheet.Column("A").AdjustToContents();
worksheet.Cell(cell_row, 2).Value = d.koumoku2;
worksheet.Column("B").AdjustToContents();
worksheet.Cell(cell_row, 3).Value = d.koumoku3;
worksheet.Column("C").AdjustToContents();
worksheet.Cell(cell_row, 4).Value = d.koumoku4;
worksheet.Column("D").AdjustToContents();
worksheet.Cell(cell_row, 5).Value = d.koumoku5;
worksheet.Column("E").AdjustToContents();
cell_row++;
}
// workbook.SaveAs(@"C:\Temp\test1.xlsx");
// CmnMsgBox.Show("出力完了", 2);
// 作成したエクセルファイルを開いて表示したい
}
|