写一个大的二维数组到Excel

我正在寻找使用C#编写一个大的二维数组到Excel工作表。 如果数组是500 x 500,我将用它来编写代码如下:

var startCell = Worksheet.Cells[1, 1]; var endCell = Worksheet.Cells[500, 500]; var writeRange = (Excel.Range)Worksheet.Cells[startCell, endCell; writeRange.Value = myArray; 

我在这一行得到一个exception:

 var endCell = Worksheet.Cells[500, 500]; 

因为任何通过COM使用C#和Excel的人都可以certificate,收到的错误消息几乎是没有用的。 我认为,问题是用于工作表的底层数据结构不足以在首次创build工作表时索引单元格500,500。

有谁知道如何达到预期的效果? 我希望有一个简单的方法来在创buildRange之前重新调整底层数据结构的大小。

谢谢。

编辑:错误信息是:

 {"Exception from HRESULT: 0x800A03EC"} 

用和excel错误代码-2146827284。

更新:下面的注释中提供的链接暗示以兼容模式打开Excel工作表的问题。 这似乎是问题。 如果我在运行我的代码之前以.xlsx或.xlsm格式保存文档,这似乎工作。 我的问题是,我不能指望我的用户每次都这样做。 有没有实现这一目标的scheme? 是否只是打开文件,检查扩展名,然后保存在新的格式,如果需要的情况下?

find了解决办法。

而不是使用Worksheet.Cells [x,x],而是使用Worksheet.get_range(x,x)。

我只是写了一个小例子,为我工作。 最初发现在这个答案 。 我不得不适应这个答案,因为在我的互操作程序集( Excel 14对象库 )中没有更多的方法 Worksheet.get_Range(.., ..)

 var startCell = ws.Cells[1, 1]; int row = 500, col = 500; var endCell = ws.Cells[row, col]; try { // access range by Property and cells indicating start and end var writeRange = ws.Range[startCell, endCell]; writeRange.Value = myArray; } catch (COMException ex) { Debug.WriteLine(ex.Message); Debugger.Break(); }