2014-02-18 55 views
3

我使用Excel Data Reader在一些數據讀取到實體框架數據庫Excel數據讀取器的問題,列名和

下面的代碼工作表選擇,但我需要一些進一步的改進

首先, IsFirstRowAsColumnNames似乎沒有按預期工作,我不得不使用.Read來代替。

我最初選擇特定工作表時所使用的模式已經是一個糟糕的計劃,任何人都可以幫助使用此excelReader.Name目前是毫無意義的,除非我可以專門循環或選擇一張工作表,我最初使用.Read從而實現衝突。

也可以參考實際的列標題名來檢索數據而不是索引,如var name = reader [「applicationname」] .ToString()在SQL客戶端中;

如果我無法實現上述目標,是否有更好的擴展可以用來讀取excel數據?

public static void DataLoadAliases(WsiContext context) 
    { 
     const string filePath = @"Alias Master.xlsx"; 

     var stream = File.Open(filePath, FileMode.Open, FileAccess.Read); 

     var excelReader = filePath.Contains(".xlsx") 
         ? ExcelReaderFactory.CreateOpenXmlReader(stream) 
         : ExcelReaderFactory.CreateBinaryReader(stream); 

     excelReader.IsFirstRowAsColumnNames = true; 


     excelReader.Read(); //skip first row 

     while (excelReader.Read()) 
     { 

      if (excelReader.Name == "Alias Master") 
      { 
       var aliasId = excelReader.GetInt16(0); 
       var aliasName = excelReader.GetString(1); 

       //Prevent blank lines coming in from excel; 
       if (String.IsNullOrEmpty(aliasName)) continue; 

       context.Aliases.Add(new ApplicationAlias 
       { 
        AliasId = aliasId, 
        Name = aliasName, 
       }); 
      } 
      else 
      { 
       excelReader.NextResult(); 
      } 
     } 

     excelReader.Close(); 
     context.SaveChanges(); 
    } 
+0

PS。我一直在嘗試使用DataSet,但不確定如何使用這些對我有益的數據。 – Frazer

回答

1

爲.xlsx文件我使用的OpenXML SDK: http://www.microsoft.com/en-us/download/details.aspx?id=30425

爲XLS文件我使用的OleDbConnection如見下文:

OleDbConnection oledbConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath+ ";Extended Properties='Excel 12.0;HDR=NO;IMEX=1;';"); 
      oledbConn.Open(); 
      OleDbCommand cmd = new OleDbCommand(); 
      OleDbDataAdapter oleda = new OleDbDataAdapter(); 
      DataSet ds = new DataSet(); 

      DataTable dt = oledbConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null); 
      string workSheetName = (string)dt.Rows[0]["TABLE_NAME"]; 

      cmd.Connection = oledbConn; 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = "SELECT * FROM [" + workSheetName + "]"; 

      oleda = new OleDbDataAdapter(cmd); 

      oleda.Fill(ds, "Donnees"); 

      oledbConn.Close(); 
      return ds.Tables[0]; 
+0

此oledb適配器中的255列限制 – LuckyS

0
 DataTable DT = new DataTable(); 
     FileStream stream = File.Open(Filepath, FileMode.Open, FileAccess.Read); 
     IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 
     DataSet result = excelReader.AsDataSet(); 
     excelReader.Close(); 
     DT = result.Tables[0];