string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=output.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES;'";
using (OleDbConnection conn = new OleDbConnection(connStr)) {
conn.Open();
// 建表
new OleDbCommand("CREATE TABLE [Sheet1] (Col1 TEXT, Col2 INT, Col3 DATE)", conn).ExecuteNonQuery();
// 批量插入
string[] lines = File.ReadAllLines("data.txt");
foreach (var line in lines) {
var parts = line.Split(',');
string sql = $"INSERT INTO [Sheet1] VALUES ('{parts[0]}', {parts[1]}, '{parts[2]}')";
new OleDbCommand(sql, conn).ExecuteNonQuery();
}
}
注意:需安裝 Access Database Engine(32/64 位與程序一致)。
EPPlus (商業友好授權):
using (var package = new ExcelPackage(new FileInfo("output.xlsx"))) {
var ws = package.Workbook.Worksheets.Add("Sheet1");
string[] lines = File.ReadAllLines("data.txt");
for (int i = 0; i < lines.Length; i++) {
var parts = lines[i].Split(',');
for (int j = 0; j < parts.Length; j++)
ws.Cells[i+1, j+1].Value = parts[j];
}
package.Save();
}
NPOI (Apache 2.0,支持 .xls/.xlsx):
IWorkbook wb = new XSSFWorkbook(); // .xlsx 用 XSSF, .xls 用 HSSF
ISheet sheet = wb.CreateSheet("Sheet1");
string[] lines = File.ReadAllLines("data.txt");
for (int i = 0; i < lines.Length; i++) {
IRow row = sheet.CreateRow(i);
var parts = lines[i].Split(',');
for (int j = 0; j < parts.Length; j++)
row.CreateCell(j).SetCellValue(parts[j]);
}
using (var fs = File.Create("output.xlsx")) wb.Write(fs);
| 場景 | 推薦 |
|---|---|
| 簡單導出、無 Office 環境、.NET Core/5+ | EPPlus / NPOI |
| 需兼容老舊 .xls、或系統已裝 Access Engine | OLEDB |
| 超大數據量(百萬行) | NPOI SXSSF (流式寫入) |
避免直接操作 COM 組件(Microsoft.Office.Interop.Excel),服務端部署極其痛苦且不穩定。