| 分類:[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);
// 作成したエクセルファイルを開いて表示したい
} |