2012-06-28 50 views
4

我在一个winform我在哪里读取一个excel文件,处理所述数据使用的Microsoft.Office.Interop.Excel一个小区,并且输出新的Excel文件。但是,我无法写入单元格 - 专门添加列标题。代码如下:C#COM互操作:写入在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”是我的DataTable。嵌套的for循环不会抛出运行时错误,但它后面的代码会执行。错误只是说:COM异常未处理,异常来自HRESULT:0x800A03EC。

任何建议表示赞赏。

问候。

+0

我刚刚发现,如果我注释掉这些行的程序运行和输出文件。但是,当我尝试打开它时,它立即关闭,之后我无法删除它,因为Windows声称Excel正在使用它,即使我在任务管理器中找不到Excel应用程序。 – Kevin

+0

当你在任务管理器中说,你已经检查过程选项卡以及应用程序选项卡?很容易导致备用excel.exe进程挂起。您正在关闭excel应用程序对象中的工作簿,或者至少关闭Excel应用程序对象? – Rup

+0

我只在App选项卡中查找。 – Kevin

回答

8

Cells[]是基于1的,而不是基于零的。

+0

+ 1 Nice Catch! –

+0

救了我。谢谢。 – ZygoteInit