Записать обнуляемые целочисленные значения обратно в электронную таблицу - PullRequest
0 голосов
/ 04 февраля 2020

Я использую 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];

, который работает, но любые поля который имеет значение, не рассматривается как цифра c и приводит к тому, что формулы Excel не работают.

Так что к моему вопросу Могу ли я получить массив для обратной записи в Excel с нулевыми значениями или мне нужно вернуться к использованию объекта ячейки и обновить только те ячейки, которые содержат значение?

1 Ответ

0 голосов
/ 04 февраля 2020

Так получилось, что сам факт написания этого поста позволил мне исправить это.

Простой ответ - записать непосредственно в диапазон только те значения, которые содержат значение.

Так что-то вроде этого:

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

Что касается EPPlus, то он выглядит фантастически c продуктом, но, поскольку я уже плачу за лицензию Excel, это будет несколько перебором, так как платная лицензия также понадобиться для EPPlus.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...