将可为空的整数写回电子表格

问题描述 投票:0回答:1

我正在使用Excel作为我的桌面应用程序的报告工具。该应用程序是用C#(VS 2019)编写的。

我的代码的要旨是从工作表中获取一个范围对象,填充一个可为空的整数数组,并将其写回到同一工作表中。

Basic worksheet structure

到目前为止,我已经获得了一系列单元格,其中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,还是必须恢复使用单元格对象而仅更新包含值的单元格?

c# excel excel-interop
1个回答
0
投票

碰巧,写这篇文章的事实使我得以解决。

简单的答案是仅将包含值的值直接写入范围。

所以像这样:

for (int i = 0; i < 7; i++)
{
    if (startArray[0, i] != null) startRow[1, i + 1] = startArray[0, i];
}

就EPPlus而言,它看起来是一个很棒的产品,但是由于我已经为Excel许可证付费,因此发现这有点多余,因为EPPlus也需要付费许可证。

© www.soinside.com 2019 - 2024. All rights reserved.