2011-07-19 97 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