Microsoft.Office.Interop.Excelはcoreに対応していないようなので、有名なEPPlusをNuGetでゲット。一個前のエントリにあるソースコードを流用して、MySqlのデータをExcelファイルに書き出す。例外処理してません。
using System;
using System.IO;
using System.Data;
using MySql.Data.MySqlClient;
using OfficeOpenXml;
namespace CliTool {
class Program {
static void Main(string[] args) {
CreateExcel(GetTrySailMember());
/* end */
Console.WriteLine("Press Any key to continue...");
Console.ReadKey(true);
}
private static void CreateExcel(DataTable table) {
using var saveExcel = new ExcelPackage(new FileInfo("trysail.xlsx"));
var sheet = saveExcel.Workbook.Worksheets.Add("trysail");
// header
var row = 1;
var col = 1;
foreach (var column in table.Columns) {
sheet.Cells[row, col].Value = column.ToString();
col++;
}
// data
foreach (var records in table.Select()) {
++row;
for(var i = 0; i < records.ItemArray.Length; i++) {
sheet.Cells[row, (i + 1)].Value = records[i].ToString() ?? string.Empty;
}
}
saveExcel.Save();
}
private static DataTable GetTrySailMember() {
var cString = "Host=localhost;Database=benchmark;CharSet=utf8mb4;User Id=root;Password=";
var query = "select * from member";
var datatable = new DataTable();
using var con = new MySqlConnection(cString);
using var adapter = new MySqlDataAdapter {
SelectCommand = new MySqlCommand(query, con)
};
adapter.Fill(datatable);
return datatable;
}
}
}
DataRowはいつものfor文で回す方法に変更した。
