我在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 [] 所以我无法解决这个问题
答案 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)。