来自HRESULT的exception:0x800A03EC – 在Excel加载项中将数组写入范围

我在C#中的Excel加载项中有以下代码:

long lngArrayLength = 14; long lngArrayLength2 = array2.Length; Excel.Range rngValues1 = (Excel.Range)wsNew.Cells[2, 1]; Excel.Range rngValues2 = (Excel.Range)wsNew.Cells[lngArrayLength2 + 1, lngArrayLength]; Excel.Range rngValues = wsNew.get_Range(rngValues1, rngValues2); rngValues.Value = array2; 

作为参考,array2有十个元素,每个元素有14个子元素。 例:

 array2 = { (0, "a0", "b0", "c0"... "n0"), ... {9, "a9", "b9", "c9"... "n9) } 

上面的rngValues大小为{[1..10,1..14]}

每次尝试运行时,都会出现以下错误:

来自HRESULT的exception:0x800A03EC

我已经排除了:
1)文件格式,将Book1保存为.xlsx不起作用
2)达到列或行限制,与数千个元素或10个元素做同样的事情
3) [0] vs [1] – 索引数组和/或范围,似乎没有问题/帮助

我仍然有麻烦debugging这个…是否有可能这与数组的维度有关范围? 我将如何确定是否是这种情况?

更新1:

我创build了一个用数据填充数组的循环:

 for (i = 1; i <= lngRows; i++) { for (j = 1; j <= lngCols; j++) { strTest[i-1, j-1] = "test (" + i.ToString() + "," + j.ToString() + ")"; } } 

…这工作正常。

现在,我发现数组中的元素可能包含NULL值。

我想这可能是问题…是吗?

更新2:

好吧,现在我写了一个小例程来将任何NULL转换为0(b / c数据types是decimal? (可空的十进制),我想我真的需要decimal代替:

 public decimal replaceNullDec(decimal? decInput) { if (decInput != null) { decimal rtn = (decimal)decInput; return rtn; } else { decimal rtn = 0; return rtn; } } 

所以,现在我已经确认所有的NULL都被replace了,但是当把数组写入一个范围时,我仍然得到错误…

更新3:

好吧,那么我认为这可能是一个数据types问题,所以我重写了代码,以便在写入表单之前将数组中的所有元素转换为string。 我现在得到的数据,而不是实际的值,我得到的文本告诉我原来的types(在这种情况下,这是一个名为Response的自定义类)。

我注意到有趣的是,我得到了10列的文字和4列#N #N/A

这让我想,也许我需要转置数组?

让我疯狂,但还在努力。

任何帮助将是伟大的!

更新4:

好的,我相信我越来越近了。 在挖掘如何转置C#中的二维数组,我得到了一些错误,导致我相信我实际上没有一个二维数组,而是一个“数组数组”(这是我认为一个二维数组是,诚实),这可能是我的List转换为Array使用ToArray()方法这是一个问题。

这是代码:

 object[] array2 = listAllData.ToArray(); 

所以下一个问题就变成了“如何将列表转换为二维数组?”

回答:

这个问题归结为,我不是写一个二维数组到范围,而是我build立了一个Response对象数组,并试图将它写入一个范围。

如何在C#中将2D列表转换为二维数组