我正在使用Excel作为我的桌面应用程序的报告工具。该应用程序是用C#(VS 2019)编写的。
我的代码的要旨是从工作表中获取一个范围对象,填充一个可为空的整数数组,并将其写回到同一工作表中。
到目前为止,我已经获得了一系列单元格,其中startRow是以黄色突出显示的第一行:
Range startRow = (Range) input.Range["E" + row.ToString(), "K" + row.ToString()];
将本地数组初始化为:
double?[,] startArray = new double?[1, 7];
设置相关值:
startArray[1,2] = 9.75;
最后,将数据写回:
startRow.Value2 = startArray;
当我将数组写回时,出现错误
The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))
在这种情况下,我认为这是因为我在数组中有一些可为空的值,好像我没有使用可为空的数组,因此默认情况下其值为零,这可以正常工作,但是在电子表格中写零。
我曾尝试使用:
string[,] startArray = new string[1, 7];
确实有效,但是任何确实具有值的字段都不会被视为数字,并且会导致Excel公式无效。
所以,我的问题是,我能否让数组以空值写回Excel,还是必须恢复使用单元格对象而仅更新包含值的单元格?
碰巧,写这篇文章的事实使我得以解决。
简单的答案是仅将包含值的值直接写入范围。
所以像这样:
for (int i = 0; i < 7; i++)
{
if (startArray[0, i] != null) startRow[1, i + 1] = startArray[0, i];
}
就EPPlus而言,它看起来是一个很棒的产品,但是由于我已经为Excel许可证付费,因此发现这有点多余,因为EPPlus也需要付费许可证。