来自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列表转换为二维数组