首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 高效寫入 Excel 資料:使用 Range 批次匯入

     編輯:關於C語言

前言

在 C# 中操作 Excel 時,逐儲存格寫入(Cells[i, j] = value)速度極慢,尤其資料量大時明顯拖慢效能。本文介紹利用 Range.Value 屬性搭配二維陣列,一次將大量資料寫入 Excel 的高效技巧。

核心程式碼範例

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(Missing.Value);
Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1];

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

// 2. 批次寫入資料列 (從 A2 開始)
if (listView.Items.Count > 0)
{
    Excel.Range dataStart = ws.get_Range("A2", Missing.Value);
    // 建立二維陣列 [列數, 欄數]
    object[,] dataArray = new object[listView.Items.Count, 8];

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

    // 調整 Range 大小以符合陣列維度
    Excel.Range dataRange = dataStart.get_Resize(listView.Items.Count, 8);
    dataRange.Value = dataArray;

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

app = null; // 釋放 COM 物件參考

關鍵技術解析

1. Range.Value 接受陣列

Range.Value 可直接指派一維陣列(單列/單欄)或二維陣列(多列多欄),Excel 會一次性填入對應區域,避免跨進程呼叫的效能損耗。

2. get_Resize 動態調整範圍

以起始儲存格 A2 為基準,呼叫 get_Resize(列數, 欄數) 取得與資料陣列維度完全一致的 Range,再一次指派 Value。

3. 釋放 COM 物件

操作完成後將 app 設為 null,配合 GC 釋放 Excel 進程,避免殘留 EXCEL.EXE。

效能比較

寫入方式1000 列 x 8 欄 耗時 (約)
逐儲存格30~60 秒
Range + 陣列批次0.5~1 秒

批次寫入效能提升 50~100 倍,極適合報表匯出、大量資料轉存等情境。

注意事項

  • 二維陣列下標為 [列, 欄],且基底為 0。
  • 資料類型建議統一為 object,Excel 會自動轉換。
  • 若資料量極大(超過 65535 列),需考慮分批寫入或使用 Open XML SDK 直接操作 .xlsx 檔案,不啟動 Excel 進程。

結語

善用 Range.Value 搭配陣列,是 C# 操作 Excel 最高效的寫入模式。只需幾行代碼,即可將記憶體中的資料結構瞬間傾印至工作表,大幅縮短匯出等待時間。

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