将大型2d数组写入Excel

时间:2012-08-29 08:42:30

标签: c# excel

我正在寻找使用C#将大型2d数组写入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;

我在这一行得到例外:

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

任何通过COM使用C#和Excel的人都可以证明,收到的错误信息几乎没用。我认为问题在于,当我第一次创建工作表时,用于工作表的基础数据结构的大小不足以索引单元格500,500。

有人知道如何达到预期效果吗?我希望在创建Range之前有一种简单的方法可以重新调整基础数据结构的大小。

感谢。

编辑:错误讯息是:

{"Exception from HRESULT: 0x800A03EC"}

with和excel错误代码-2146827284。

更新:以下评论中提供的链接提到了在兼容模式下打开Excel工作表的问题。这确实是问题所在。如果我在运行代码之前以.xlsx或.xlsm格式保存文档,这似乎有效。我的问题是我不能指望我的用户每次都这样做。是否有一种程序化方式来实现这一目标?它只是打开文件,检查扩展名然后在需要时以新格式保存它的情况吗?

2 个答案:

答案 0 :(得分:4)

找到解决方案。

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

答案 1 :(得分:1)

我刚刚写了一个适合我的小例子。最初发现于SO this answer。我必须在我的Interop程序集( 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();
}