从Excel文件中提取数据并存储在SQL Server数据库中

我正在寻找parsingMicrosoft Excel文件并将数据更新/存储到给定的SQL Server数据库的最佳方法的build议。 我使用的ASP.NET MVC,所以我打算有一个页面/视图采取在Excel电子表格,并使用该用户给定的文件,我将需要使用C#来parsing列中的数据,并根据与电子表格列匹配更新数据库包含数据库表的关键列。 电子表格将始终处于相同的格式,所以我只需要处理格式。 看起来这可能是一个很常见的事情,我只是在开始之前寻找最好的方法来解决这个问题。 我在当前的应用程序中使用entity framework,但我不必使用它。

我发现这个解决scheme似乎可能是一个不错的select:

public IEnumerable<MyEntity> ReadEntitiesFromFile( IExcelDataReader reader, string filePath ) { var myEntities = new List<MyEntity>(); var stream = File.Open( filePath, FileMode.Open, FileAccess.Read ); using ( var reader = ExcelReaderFactory.CreateOpenXmlReader( stream ) ) { while ( reader.Read() ) { var myEntity = new MyEntity(): myEntity.MyProperty1 = reader.GetString(1); myEntity.MyProperty2 = reader.GetInt32(2); myEntites.Add(myEntity); } } return myEntities; } 

下面是一个文件的例子(Clock#是关键字)

在这里输入图像说明

所以给定一个这种格式的文件,我想用时钟#来匹配用户到数据表logging,并用每个单元信息更新logging。 电子表格中的每个列在数据表中都有一个可关联的列。 所有的帮助,非常感谢。

您可以使用Microsoft.Office.Interop.Excel命名空间中的类,该类抽象了您find的所有解决scheme。 而不是我重写它,你可以看看这篇文章: http : //www.codeproject.com/Tips/696864/Working-with-Excel-Using-Csharp 。

更好的是,为什么不绕过中间人? 您可以使用现有的ETL工具(如Pentaho或Talend)或其他软件直接从Excel导入数据库。 这些types的工具通常提供很多定制,并且相当简单易用。 我用了Pentaho很多,从字面上来看你正在描述的东西,它为我省去了编写代码的头疼。 除非你想/需要自己写,否则我认为后者是最好的方法。

试试这个公共stringGetDataTableOfExcel(string file_path){

  using (OleDbConnection conn = new OleDbConnection()) { DataTable dt = new DataTable(); string Import_FileName = Server.MapPath(file_path); //Import_FileName = System.IO.Path.GetDirectoryName(file_path); string fileExtension = Path.GetExtension(Import_FileName); if (fileExtension == ".xlsx") conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;'"; using (OleDbCommand comm = new OleDbCommand()) { comm.CommandText = "Select * from [Sheet1$]"; comm.Connection = conn; using (OleDbDataAdapter da = new OleDbDataAdapter()) { da.SelectCommand = comm; da.Fill(dt); } } } } 

现在你的数据在DataTable中。 您可以从数据表的数据创build插入查询。

file_path是excel文件的完整path和目录名称。