【问题标题】:C# COM Interop: Writing to a Cell in an Excel SheetC# COM 互操作:写入 Excel 工作表中的单元格
【发布时间】:2012-06-28 17:45:13
【问题描述】:

我在 Winform 中使用 Microsoft.Office.Interop.Excel,我正在读取一个 excel 文件、处理数据并输出一个新的 excel 文件。但是,我无法写入单元格——特别是添加列标题。代码如下:

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet ws = (Worksheet)wb.Worksheets[1];
for (int i = 0; i < dt.Columns.Count; i++)
{
    for (int j = 0; j < dt.Rows.Count; j++)
    {
        ws.Cells[j + 1, i] = dt.Rows[j][i].ToString();
    }
}
ws.Cells[0, 0] = "Ticket Number";
ws.Cells[0, 1] = "Transit";
ws.Cells[0, 2] = "Outage Start Date";
ws.Cells[0, 3] = "Outage End Date";
ws.Cells[0, 4] = "Business Impact";
wb.Worksheets.Add(ws);

其中“dt”是我的数据表。嵌套的 for 循环不会引发运行时错误,但它后面的代码会引发。错误只是说:COM Exception was unhandled, Exception from HRESULT: 0x800A03EC.

感谢任何建议。

问候。

【问题讨论】:

  • 我刚刚发现,如果我注释掉有问题的行,程序就会运行并输出一个文件。但是,当我尝试打开它时,它会立即关闭,之后我无法删除它,因为 Windows 声称 Excel 正在使用它,即使我在任务管理器中找不到 Excel 应用程序。
  • 当您在任务管理器中说,您已经检查了进程选项卡以及应用程序选项卡?很容易以闲置的备用 excel.exe 进程结束。您正在关闭 Excel 应用程序对象中的工作簿,或者至少也关闭了 Excel 应用程序对象?
  • 我只是在“应用”标签中查看。
  • Cells[] 从 1 开始,而不是从 0 开始...
  • 那是 ERROR_INVALID_FLAGS。 IIRC,您实际上想设置单元格的 .Value2 属性-尽管在我删除的答案下方的讨论中,您注意到这无济于事。不过,我建议您使用 NPOIEPPlus 来读写 Excel 电子表格 - 它们比使用 Excel 自动化更容易且通常更快。

标签: c# winforms excel com-interop winforms-interop


【解决方案1】:

Cells[] 从 1 开始,而不是从零开始。

【讨论】:

  • 救了我。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 2012-02-27
相关资源
最近更新 更多