【发布时间】: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