2014-02-18 6 views
3

Я использую Excel Data Reader прочитать некоторые данные с Entity Framework DatabaseExcel данных, имена столбцов и выбора листа

Приведенный ниже код работает, но мне нужны некоторые дополнительные уточнения

Прежде всего IsFirstRowAsColumnNames, похоже, не работает должным образом, и я должен использовать .Read вместо этого.

У меня было изначально, чтобы выбрать конкретный лист, был scuppered планы, может ли кто-нибудь помочь с этим excelReader.Name в данный момент бессмысленно, если я не могу специально пропустить или выбрать лист, который я изначально использовал. для достижения этого конфликта.

Также было бы полезно обратиться к фактическим именам заголовков столбцов, чтобы получить данные, а не индексы, такие как 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. Я пытаюсь использовать DataSets, но не знаю, как это можно использовать для моей выгоды. – 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

Ограничения в 255 колонок в этом адаптере oledb – 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]; 
Смежные вопросы