我想在C#中将对象[,]转换为double [,]

时间:2018-02-05 08:04:53

标签: c#

我在C#中学习Excel Read 但是我不能将对象[,]加工为[,]

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,但此方法是Copy Only Array [] 所以我无法解决这个问题

1 个答案:

答案 0 :(得分: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)。