2014-09-11 26 views
2

我正在使用從Excel文件讀取數據。我能夠連接到Excel並從中讀取數據。如何將對象[,]轉換爲C#中的數據表

我getitng返回類型爲對象[,]。我不確定它具體說明了什麼。我知道object []是對象數組。

不確定object[,]。我嘗試了谷歌搜索,但沒有找到任何有用的解釋。

此外,我想將其轉換爲數據表,並將其綁定到winforms中的數據網格視圖。

我們是否需要在綁定之前將上面的數組轉換爲數據表或者是否有其他方式將其綁定到網格?

請給我一些想法來擡頭。

請在以下代碼:

void ReadSheetData(string strFilePath) 
     { 

      Workbook workBook = _excelApp.Workbooks.Open(strFilePath, 
      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); 

      int numSheets = workBook.Sheets.Count; 

      for (int sheetNum = 1; sheetNum < numSheets + 1; sheetNum++) 
      { 

       Worksheet sheet = (Worksheet)workBook.Sheets[sheetNum]; 
       Range excelRange = sheet.UsedRange; 
       object[,] valueArray = (object[,])excelRange.get_Value(XlRangeValueDataType.xlRangeValueDefault); 
       PrepareData(valueArray); 
      } 
     } 

System.Data.DataTable PrepareData(object[,] valueArray) 
    { 
     System.Data.DataTable dtTemp = new System.Data.DataTable(); 
     dtTemp=????? // How to convert object[,] to datatable 
     return dtTemp; 
    } 
+0

使用EPPLUS庫是免費的,可以讀/寫xlsx文件,比Interop快得多,比較穩定並且轉換爲數據表是簡單的命令ToDataTable()。 – 2014-09-11 07:53:51

+0

是的..你是正確的..我們想沒有外部的依賴..這就是不使用oledb連接的原因 – 2014-09-11 07:55:25

+0

對於我個人的經驗,經常使用閱讀EXCLE和導入數據。 你想要做什麼是明智的,通過創建一種代表你的Excel記錄的類,加載你的數據數組來解決它。 當你有一組數據時,你可以做你想做的事。如果你願意,我會像你一樣 – daniele3004 2014-09-11 08:05:15

回答

1

可以列舉的行和利用第一索引和第二索引陣列長度的列。

var rowCount = valueArray.GetLength(0); 
var columnCount = valueArray.GetLength(1); 

var dtTemp = new DataTable(); 
foreach(var c in Enumerable.Range(1, columnCount)) 
    dtTemp.Columns.Add(); 
foreach (var r in Enumerable.Range(1, rowCount)) 
    dtTemp.Rows.Add(Enumerable.Range(1, columnCount) 
     .Select(c => valueArray[r - 1, c - 1]).ToArray()); 
+0

@ Chandra ..它顯示在每個錯誤() – 2014-09-11 09:42:04

+0

錯誤'System.Collections.Generic.IEnumerable '不包含(不可信的網絡共享文件上創建安全對話框? 'Select'和最佳擴展方法重載定義'System.Linq.Enumerable.Select (System.Collections.Generic.IEnumerable ,System.Func )'有一些無效參數 – 2014-09-11 09:59:14

+0

@SaiAvinash,我剛剛意識到我使用了擴展方法'Each',我只是將其更改爲使用foreach,現在應該可以工作 – 2014-09-11 10:00:20

相關問題