写一个大的二维数组到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(); }
- 以编程方式检索Excel库的版本
- Excel保存文档时如何在编辑后保留OpenXml单元格属性?
- 在SharePoint Online中的Excel Services
- 使用C#和Excel 2007 interop创build工作簿
- 为什么“mscorlib.dll中发生”System.IO.IOException“types的未处理的exception(由某个.exelocking)”发生?
- 在Excel单元格中显示正确的数字
- 将Dictionary <String,String>复制到Excel的剪贴板
- 在ASP.NET中使用Excel生成PDF文件时出错
- 导出为excel数据时出错:“',hex值0x07,是一个无效的字符,使用c#