首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> C# 入門

C# 高效匯出資料到 Excel:Range.Value 陣列寫入法

     編輯:C# 入門

痛點:逐儲存格寫入極慢

ws.Cells[i, j] = value 每次跨 COM 邊界,萬筆資料需數分鐘。

解決方案:一次寫入二維陣列


Excel.Application app = new Excel.ApplicationClass();
if (app == null) { MessageBox.Show("Excel 啟動失敗"); return; }
app.Visible = true;

Excel.Workbooks wbs = app.Workbooks;
Excel.Workbook wb = wbs.Add(Type.Missing);
Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1];

// 1. 寫入標題列 (一維陣列)
Excel.Range headerRange = ws.get_Range("A1", "H1");
object[] headers = { "標題1", "標題2", "標題3", "標題4", "標題5", "標題6", "標題7", "標題8" };
headerRange.Value = headers;

// 2. 寫入資料區 (二維陣列)
if (listView.Items.Count > 0)
{
    Excel.Range dataStart = ws.get_Range("A2", Type.Missing);
    object[,] data = new object[listView.Items.Count, 8];

    foreach (ListViewItem lvi in listView.Items)
    {
        data[lvi.Index, 0] = lvi.Text;
        data[lvi.Index, 1] = lvi.SubItems[1].Text;
        data[lvi.Index, 2] = lvi.SubItems[2].Text;
        data[lvi.Index, 3] = lvi.SubItems[3].Text;
        data[lvi.Index, 4] = lvi.SubItems[4].Text;
        data[lvi.Index, 5] = lvi.SubItems[5].Text;
        data[lvi.Index, 6] = lvi.SubItems[6].Text;
        data[lvi.Index, 7] = lvi.SubItems[7].Text;
    }

    // 擴展範圍至資料大小
    Excel.Range dataRange = dataStart.get_Resize(listView.Items.Count, 8);
    dataRange.Value = data; // 一次寫入!

    // 自動調整欄寬
    dataRange.EntireColumn.AutoFit();
}

app = null; // 釋放 COM 參考

關鍵點解析

技巧效果
Range.Value = object[]一維陣列 → 橫向寫入一列
Range.Value = object[,]二維陣列 → 區塊寫入 (Row, Col)
get_Resize(rows, cols)動態調整 Range 大小以符合陣列維度
EntireColumn.AutoFit()一次調整整欄寬度

效能對比 (參考)

  • 逐儲存格:10,000 列 × 8 欄 ≈ **120 秒**
  • 陣列寫入:同量級 ≈ **2 秒**
  • 提升 **60 倍**以上

進階提示

  • 大量資料建議關閉 app.ScreenUpdating = false、app.Calculation = XlCalculation.xlCalculationManual
  • 完成後 app.Quit()、釋放所有 COM 物件 (Marshal.ReleaseComObject)
  • .NET Core / 5+ 推薦用 ClosedXML、EPPlus 純 .NET 套件,無需安裝 Excel

結語

Range.Value = 陣列 是 C# 操作 Excel 最高效的寫入模式。將資料在記憶體組好陣列,一次跨 COM 邊界,效能指數級提升。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved