Не удается неявно преобразовать тип «объект» в «объект [*, *]».Существует явное преобразование (вы пропустили приведение) - PullRequest
0 голосов
/ 24 сентября 2019

Мне нужно передать значение Range в многомерный объект, но возникает ошибка:

Невозможно неявно преобразовать тип object в object[*,*].Существует явное преобразование (вам не хватает приведения?)

Вот код:

Excel.Application oXL = new Excel.Application();
Excel.Workbook oWB = oXL.Workbooks.Open(rtbExcelPath.Text.Trim(), Missing.Value, 
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
Missing.Value, Missing.Value, Missing.Value);

Excel.Worksheet oWS = oWB.Worksheets[1] as Excel.Worksheet;

int countRows = oWS.UsedRange.Rows.Count;
int countColumns = oWS.UsedRange.Columns.Count;

object[,] data = oWS.Range[oWS.Cells[1, 1], oWS.Cells[countRows, 
countColumns]].Cells.Value2;

Пожалуйста, помогите проверить, что не так ...: (*

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Проблема возникает, когда oWS.UsedRange ссылается на одну ячейку.В этом случае возвращаемый объект является единственным значением, а не массивом.Если вам нужен массив, вам нужно протестировать этот случай и явно создать его.

object[,] data;
if (oWS.UsedRange.Cells.CountLarge == 1)
{
    // create a single cell two dimensional array with 1 based 
    // lower bounds to simular to an array returned by Excel
    data = (object[,])Array.CreateInstance(typeof(object), new[]{1, 1}, new[]{1, 1});
    data[1, 1] = oWS.UsedRange.Value2;
}
else
{
    data = oWS.UsedRange.Value2;
}
0 голосов
/ 24 сентября 2019

Я смог решить вашу проблему, используя тип переменной dynamic вместо явного типа object[,].

dynamic data = oWS.Range[oWS.Cells[1, 1], oWS.Cells[countRows, 
countColumns]].Cells.Value2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...