Excel数据读取器问题,列名称和图纸select

我正在使用Excel数据读取器来读取entity framework数据库中的一些数据

下面的代码正在工作,但我需要一些进一步的改进

首先IsFirstRowAsColumnNames似乎没有按预期工作,我不得不使用.Read来代替。

我最初select一张特定的纸张的软糖已经是一个糟糕的计划,任何人都可以帮助这个excelReader.Name目前是没有意义的,除非我可以专门循环或select一张表,我原来使用.Read实现因此冲突。

引用实际的列标题名称来检索数据而不是索引,如var name = reader [“applicationname”]。SQL客户端中的ToString()

如果我不能达到上述目的,是否有更好的扩展可以用来读取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(); } 

.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]; 
  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];