Я хочу преобразовать объект [,] в double [,] в С#

Я изучаю Excel Read в С#, но я не могу преобразовать объект [,] в double [,]

double[,] array;
    Excel.Application xlApp;
    Excel.Workbook xlWorkBook;
    Excel.Worksheet xlWorkSheet;
    object[,] temp;
    private void button1_Click(object sender, EventArgs e)
    {
        String path = "C:\\Users\\Bob\\Desktop\\abcd.xlsx";
        //Excel.Range range;
       ReadExcelData(path);

        xlApp = new Excel.Application();
        xlWorkBook = xlApp.Workbooks.Open(path, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
        GetTotalValue(xlWorkSheet);


    }

в этом коде GetTotalValue (xlWorksheet) - это getExcelValue

 private object[,] GetTotalValue(Worksheet sheet)

    {


        Range usedRange = sheet.UsedRange;


        Range lastCell = usedRange.SpecialCells(XlCellType.xlCellTypeLastCell);

        MessageBox.Show(lastCell.Cells.Row.ToString());
        MessageBox.Show(lastCell.Cells.Column.ToString());



        Range totalRange = sheet.get_Range(sheet.get_Range("A1"), lastCell);



        return (object[,])totalRange.get_Value();

    }//end

Я пытаюсь использовать Array.Copy, но этот метод копирует только массив [], поэтому я не могу решить эту проблему.


c#
person BaekCheon Kim    schedule 05.02.2018    source источник
comment
Спасибо за ваш вид   -  person BaekCheon Kim    schedule 05.02.2018


Ответы (1)


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

В C# не так много хелперов для многомерных массивов, также LINQ здесь практически не работает. Вам придется преобразовать его самостоятельно:

double[,] array = new double[temp.GetLength(0),temp.GetLength(1)];
for(int x = 0; x < array.GetLength(0); x++)
    for(int y = y; y < array.GetLength(1); y++)
        array[x,y] = (double)temp[x,y];

C# также предоставляет статический метод Array.ConvertAll, но, похоже, в нем отсутствуют перегрузки для многомерных массивов.

РЕДАКТИРОВАТЬ: второй должен быть GetLength(1), а не (0).

person phi1010    schedule 05.02.2018
comment
Вы также должны проверить нижнюю границу - взаимодействие с Excel вернет массивы с отсчетом от 1. - person Wai Ha Lee; 05.02.2018