使用Microsoft.Office.Interop.Excel从excel 2010读取数据

我无法读取Excel中的数据。 这是我正在使用的代码:

using Excel = Microsoft.Office.Interop.Excel; Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"Book1.xlsx", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); Excel._Worksheet xlWorksheet = (Excel._Worksheet)xlWorkbook.Sheets[1]; Excel.Range xlRange = xlWorksheet.UsedRange; int rowCount = xlRange.Rows.Count; int colCount = xlRange.Columns.Count; for (int i = 1; i <= rowCount; i++) { for (int j = 1; j <= colCount; j++) { MessageBox.Show(xlWorksheet.Cells[i,j].ToString()); } } 

我得到一个消息框,说一些关于System.__ComObject而不是一个值。
我怎样才能解决这个问题?

我发现上面的解决scheme,这里是代码:

 string temp = (string)(xlRange.Cells[i, j] as Excel.Range).Value2; MessageBox.Show(temp); 

没有testing过,但我认为应该阅读

 MessageBox.Show(xlRange.Cells[i,j].ToString()); 

或者可选地

 MessageBox.Show(xlRange.Cells[i,j].Value.ToString()); 

尝试这个:

 MessageBox.Show(xlRange.Cells[i][j].Value); 

试试这个代码:

 MessageBox.Show(((Excel.Range)xlRange.Cells[i,j]).Value2.ToString()); 

这段代码对我来说是成功的。

使用以下函数将数据作为第N个工作表的DATATABLE对象:

 public DataTable GetWorkSheet(int workSheetID) { string pathOfExcelFile = fileFullName; DataTable dt = new DataTable(); try { excel.Application excelApp = new excel.Application(); excelApp.DisplayAlerts = false; //Don't want Excel to display error messageboxes excel.Workbook workbook = excelApp.Workbooks.Open(pathOfExcelFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); //This opens the file excel.Worksheet sheet = (excel.Worksheet)workbook.Sheets.get_Item(workSheetID); //Get the first sheet in the file int lastRow = sheet.Cells.SpecialCells(excel.XlCellType.xlCellTypeLastCell, Type.Missing).Row; int lastColumn = sheet.Cells.SpecialCells(excel.XlCellType.xlCellTypeLastCell, Type.Missing).Column; excel.Range oRange = sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[lastRow, lastColumn]);//("A1",lastColumnIndex + lastRow.ToString()); oRange.EntireColumn.AutoFit(); for (int i = 0; i < oRange.Columns.Count; i++) { dt.Columns.Add("a" + i.ToString()); } object[,] cellValues = (object[,])oRange.Value2; object[] values = new object[lastColumn]; for (int i = 1; i <= lastRow; i++) { for (int j = 0; j < dt.Columns.Count; j++) { values[j] = cellValues[i, j + 1]; } dt.Rows.Add(values); } workbook.Close(false, Type.Missing, Type.Missing); excelApp.Quit(); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message, "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } return dt; }