2013-04-08 16 views
11

Excelでデータを読み取ることができません。ここで私が使用していたコードは次のとおりです。Microsoft.Office.Interop.Excelを使用してExcel 2010からデータを読み取る

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値の代わりに何かを言うメッセージボックスを取得します。
どうすればこの問題を解決できますか?

答えて

14

を読むべきだと思う、私は上記のソリューションは、ここにコードがあるが見つかりました:

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

Haven'tはそれをテストしたが、私はそれが

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

または代わり

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

エラー「『オブジェクト』の下に投げること」の定義が含まれていません。値 'と拡張メソッドなし'オブジェクト 'の型の最初の引数を受け入れる'値 'が見つかりました(usingディレクティブまたはアセンブリ参照がありませんか?) " – Coolenough

0

このコードを試す:

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

このコードは私にとってはうまく機能します。

2

これを試してみてください:

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

thanks mate。できます。 –

0

は、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; 

    } 
関連する問題