У меня есть следующий код в Excel Add-In в C#:Исключение из HRESULT: 0x800A03EC - Запись массива в диапазоне Excel Add-In
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 десять элементов, каждый из которых имеет 14 подэлементов. Пример:
array2 = { (0, "a0", "b0", "c0"... "n0"), ... {9, "a9", "b9", "c9"... "n9) }
rngValues
выше размера, как {[1..10,1..14]}
Каждый раз, когда я пытаюсь запустить, я получаю следующее сообщение об ошибке:
Exception from HRESULT: 0x800A03EC
Я исключал:
1) Формат файла , сохранение Book1 как .xlsx не помогает
2) Достигая предела столбца или строки, делает то же самое с тысячами элементов или 10 из них
3) [0]
против [1]
- индексированные массивы и/или диапазоны, кажется, не имеет значения/помочь
Я до сих пор возникают проблемы отладки это ... Возможно ли это что-то делать с размерами массив против диапазона? Как бы я определил, так ли это или нет?
UPDATE 1:
Я создал цикл, который заполняет массив с данными:
for (i = 1; i <= lngRows; i++)
{
for (j = 1; j <= lngCols; j++)
{
strTest[i-1, j-1] = "test (" + i.ToString() + "," + j.ToString() + ")";
}
}
... и это работает отлично.
Теперь мне приходит в голову, что элементы элементов в массиве могут содержать значения NULL.
Я думаю, что это может быть проблемой ... Не так ли?
UPDATE 2:
Хорошо, так что теперь я написал небольшую процедуру для преобразования любых NULLs 0 (б/с типом данных является decimal?
(обнуляемым десятичное), и я предполагаю, что мне действительно нужно decimal
вместо:
public decimal replaceNullDec(decimal? decInput)
{
if (decInput != null)
{
decimal rtn = (decimal)decInput;
return rtn;
}
else
{
decimal rtn = 0;
return rtn;
}
}
Итак, теперь я подтвердил, что все нули заменяются, но я все еще получаю ошибку при записи массива в диапазоне ...
UPDATE 3:
Итак, я подумал, что, возможно, это проблема с типом данных, поэтому я переписал код для преобразования всех элементов в массив в строки вместо того, чтобы писать на листе. Теперь я получаю данные, но вместо фактических значений я получаю текст, говорящий мне оригинальный TYPE (который в этом случае является обычным классом под названием Response
).
Интересная вещь, которую я заметил, это то, что я получаю 10 COLUMNS текста и 4 COLUMNS от #N/A
.
Это заставляет меня думать, что, может быть, мне нужно транспонировать массив?
Вождение меня с ума, но все еще пытаясь.
Любая помощь была бы БОЛЬШОЙ!
UPDATE 4:
Хорошо, я верю, что я все ближе. При перекодировании 2-мерного массива в C# я получал некоторые ошибки, которые заставляли меня думать, что на самом деле у меня нет 2d-массива, а вместо этого «массив массивов» (это то, что я думал, что 2-й массив был , честно говоря), и это, вероятно, конверсия моего List
в Array
с использованием метода ToArray()
. Это проблема.
Вот этот код:
object[] array2 = listAllData.ToArray();
Итак, следующий вопрос становится «как преобразовать список в 2d массив?»