You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中通过Microsoft.Office.Interop.Excel设置默认列名?

为Excel导出添加默认列名(C# Interop实现)

要实现给导出的Excel设置默认列名,只需在写入ListView数据之前,先给第一行的单元格赋值列名,同时把数据的起始行从第2行开始即可,修改后的代码如下:

private void btnExport_Click(object sender, EventArgs e)
{
    Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application();
    xla.Visible = true;

    Microsoft.Office.Interop.Excel.Workbook wb = xla.Workbooks.Add(Microsoft.Office.Interop.Excel.XlSheetType.xlWorksheet);
    Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)xla.ActiveSheet;

    // 先设置第一行的默认列名
    ws.Cells[1, 1] = "A";
    ws.Cells[1, 2] = "B";
    ws.Cells[1, 3] = "C";

    // 数据从第2行开始写入,避免覆盖列名
    int i = 2;
    int j = 1;

    foreach(ListViewItem comp in listView1.Items)
    {
        j = 1; // 每一行开始时重置列索引
        foreach(ListViewItem.ListViewSubItem drv in comp.SubItems)
        {
            ws.Cells[i, j] = drv.Text.ToString();
            j++;
        }
        i++;
    }
}

关键修改点说明:

  • 新增列名赋值代码:直接给第一行(行索引1)的对应列单元格设置文本;
  • 调整数据起始行:将i的初始值从1改为2,确保列名不会被数据覆盖;
  • 修正原代码小问题:移除了外层循环中多余的ws.Cells[i, j] = comp.Text.ToString();,因为内层循环遍历SubItems已经包含了主项文本,重复赋值会导致第一个子项被覆盖。

如果你的列名数量较多,可以用数组批量设置,比如:

string[] columnNames = { "A", "B", "C", "D" };
for (int col = 0; col < columnNames.Length; col++)
{
    ws.Cells[1, col + 1] = columnNames[col];
}

内容的提问来源于stack exchange,提问作者ttd_13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:40:23