【问题标题】:Exception from HRESULT: 0x800A03EC - Writing array to range in Excel Add-InHRESULT 异常:0x800A03EC - 将数组写入 Excel 加载项中的范围
【发布时间】:2015-10-29 00:12:25
【问题描述】:

我在 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 有 10 个元素,每个元素有 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# 中转置二维数组时,我遇到了一些错误,让我相信我实际上没有二维数组,而是一个“数组数组”(我认为二维数组是,老实说),这可能是我的 List 使用 ToArray() 方法转换为 Array 的问题。

代码如下:

object[] array2 = listAllData.ToArray();

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

【问题讨论】:

    标签: c# arrays excel vsto excel-addins


    【解决方案1】:

    回答:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 2017-07-12
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多