我在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的异常:0x800A03EC
我排除了:
1)文件格式,将Book1保存为.xlsx没有帮助
2)达到列或行限制,对数千个元素或其中10个元素执行相同的操作
3)[0]
vs [1]
- 索引数组和/或范围,似乎无关紧要/帮助
我仍然无法调试此问题...这是否可能与阵列的尺寸与范围有关?我如何确定是否是这种情况?
更新1:
我创建了一个用数据填充数组的循环:
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数据类型为decimal?
(可以为十进制),我想我真的需要decimal
代替:
public decimal replaceNullDec(decimal? decInput)
{
if (decInput != null)
{
decimal rtn = (decimal)decInput;
return rtn;
}
else
{
decimal rtn = 0;
return rtn;
}
}
所以,现在我已经确认所有的NULL都被替换了,但是在将数组写入范围时我仍然没有错误......
更新3:
好的,那么我想也许这是一个数据类型问题,所以我重写了代码,在写入工作表之前将数组中的所有元素转换为字符串。我现在获取数据,但不是实际的值,我得到文本告诉我原始的TYPE(在这种情况下是一个名为Response
的自定义类。)
我注意到的有趣的事情是我得到10列文本和4列#N/A
。
这让我觉得我可能需要转置数组吗?
让我发疯,但仍在努力。
任何帮助都会很棒!
更新4:
好的,我相信我越来越近了。在深入探讨如何在C#中转换2d数组时,我遇到了一些错误,让我相信我实际上没有2d数组,而是“数组数组”(我认为这是一个二维数组是,老实说)而且可能是我使用List
方法将Array
转换为ToArray()
,这是一个问题。
这是代码:
object[] array2 = listAllData.ToArray();
那么下一个问题就变成了“如何将列表转换为二维数组?”
答案 0 :(得分:0)
<强>解答:强>
问题归结为我没有在范围内编写2D数组,而是构建了一个Response
对象数组,并尝试将其写入范围。
有关该解决方案的更多详细信息,请参阅此相关文章: How to Convert 2D List to 2D Array in C#