如何在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
相关产品推荐
相关产品推荐

