来自HRESULT的异常:0x800A03EC - 将数组写入Excel加载项中的范围

时间:2015-10-29 00:12:25

标签: c# arrays excel vsto excel-addins

我在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();

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

1 个答案:

答案 0 :(得分:0)

<强>解答:

问题归结为我没有在范围内编写2D数组,而是构建了一个Response对象数组,并尝试将其写入范围。

有关该解决方案的更多详细信息,请参阅此相关文章: How to Convert 2D List to 2D Array in C#