2011-07-19 130 views
2

我有一個xslx文件,其中包含兩列:ID和創建日期。我不知道文件的長度。我如何讀取文件到矩陣(我也不希望列標題在矩陣中,只有數據)?如何將Excel文件讀入矩陣?

回答

0

在下面的鏈接中的代碼可以幫助你:

How to read an Excel file in c sharp

你可以給路徑到XLSX文件爲宜。 你也可以在代碼行range = xlWorkSheet.UsedRange;之後使用以下行:

string[,] requiredData = new string[range.Rows.Count - 1,range.Columns.Count]; 

創建矩陣。

你也可以將數據寫入到上面創建的矩陣,而不是顯示MessageBox(你可以修改循環如下):

for (rCnt = 2; rCnt <= range.Rows.Count; rCnt++) 
      { 
       for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++) 
       { 
        str = (range.Cells[rCnt, cCnt] as Microsoft.Office.Interop.Excel.Range).Value2.ToString(); 
        requiredData[rCnt - 2][cCnt - 1] = str; 
       } 
      } 

希望這有助於...

+0

我改變了這個soluthion有點與詞典一起工作。 b.t.w在代碼中應該是xlApp = new Excel.Application();而不是「ApplicationClass」。謝謝! – aharon

+0

歡迎... –

0
/// <summary> 
    /// Import Function For Xlsx File 
    /// </summary> 
    /// <param name="s">File Name</param> 
    /// <returns> Datatable </returns> 
    private DataTable Import4Xlsx(string s) 
    { 
     string conn = "Provider=Microsoft.ACE.OLEDB.12.0;" + 
         "Data Source=" + s + ";" + 
         "Extended Properties='Excel 12.0 Xml;Allow Zero DateTime=True;" + 
         "HDR=YES;IMEX=1\"'"; 

     string[] sheetname = GetExcelSheetNames(conn); 
     try 
     { 
      var objConn = new OleDbConnection(conn); 
      objConn.Open(); 
      var ds = new DataSet(); 
      var da = new OleDbDataAdapter("SELECT * FROM [" + sheetname[0] + "]", conn); 
      da.Fill(ds); 
      objConn.Close(); 
      return ds.Tables[0];//resultant data 
     } 
     catch (Exception ex) 
     { 
      Trace.WriteLine(ex.Message + ex.Source); 
      return null; 
     } 
    } 

    /// <summary> 
    /// Get Excel Files Sheet Name 
    /// </summary> 
    /// <param name="con">Connection String</param> 
    private String[] GetExcelSheetNames(string con) 
    { 
     OleDbConnection objConn = null; 
     DataTable dt = null; 
     try 
     { 
      objConn = new OleDbConnection(con); 
      objConn.Open(); 
      dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
      if (dt == null) return null; 
      var excelSheets = new String[dt.Rows.Count]; 
      int i = 0; 
      foreach (DataRow row in dt.Rows) 
      { 
       excelSheets[i] = row["TABLE_NAME"].ToString(); 
       i++; 
      } 
      return excelSheets; 
     } 
     catch (Exception ex) 
     { 
      Trace.WriteLine(ex.Message + ex.Source); 
      return null; 
     } 
     finally 
     { 
      if (objConn != null) 
      { 
       objConn.Close(); 
       objConn.Dispose(); 
      } 
      if (dt != null) 
      { 
       dt.Dispose(); 
      } 
     } 
    } 

嘗試它工作正常

+0

如果是返回矩陣結果是? – aharon

+0

ImportedDataSource作爲結果返回數據表。 –

+0

什麼是「ImportedDataSource」?它在哪裏被刪除?他的類型是什麼?有一種方法可以將其替換爲字典,其中ID是關鍵字,日期是值? – aharon