Excel导入你如何做到这一点?

好吧,我有一个Excel导入书面。 它使用Excel自动化来完成所有logging并完成工作。 如果你必须这样做,你会怎么做?

你会使用SSIS吗? 你会使用Dataconnection? 我真的很困惑,以最好的方式来完成这个正确的。 这样,当一个客户端进行导入时,它不会减慢其他客户端的实际应用程序。 谢谢

我以前使用的方法是使用OleDb读取Excel电子表格数据。 这篇文章有基础:

http://www.davidhayden.com/blog/dave/archive/2006/05/26/2973.aspx

这避免了必须使用自动化,并被certificate是相当有效的。

这取决于很多东西。 我曾经在两个非常大的项目上工作,这两个项目是以两种截然不同的方式从Excel中导入数据的,他们有完全不同的方法来适应它们。

SSIS Excel导入

这个项目涉及每天将数百个文件以非常明确的数据格式sl a a a a st st st st st st st database database database database database database database ET ET ET ET ET Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data )

为什么我们select了SSIS:

  • ETL的其余部分在SSIS中是有意义的,并且通过一致性降低了复杂性
  • 定义用于Excel导入的模式在SSIS中非常容易,而且由于它非常严格(政府监pipe),所以我们不必担心模式发生变化
  • 很好地部署到Integration Services服务器,并可以通过SQL代理作业运行

自定义财务应用程序使用VSTO导入

这个项目采用了现有的电子表格,这个电子表格已经被用来计算一系列的财务指标,包括一个基于各种电子表格定义的假设运行一系列情景组合的macros,并将其全部插入到SQL Server数据库中它进行了类似的DW – > DM – >立方体旅程)。

为什么我们selectVSTO:

  • 我们不得不使用他们的电子表格模型,他们希望能够随意修改这些计算,而不必进行代码更改,也不需要学习如何编程
  • 基本上就是这样

两种方法的效果都一样好,但select它们有各种各样的原因。 最大的一个就是从Excel中提取数据的格式/结构的灵活性。 如果它是非常明确和严格的,SSIS是一个简单和低用户干预的方式来做到这一点。 但是,如果他们需要做出很多改变,那么Office Interop平台(VSTO)可能就是要走的路。

这实际上取决于需求 – 是否将遗留数据导入到新系统中,是否定期使用,数据量是多less,是否存在可用于目标数据库的可重用数据访问和业务逻辑层,是已经在Open XML格式的Excel文件,以便可以使用Open XML SDK,…

但是,对于大范围的情况,我只需使用OLE DB连接从Excel文档读取数据,并使用现有数据访问和业务逻辑层写入目标数据库。

您可以使用ADO.NET直接将Excel读入您的程序。 看看下面的代码 –

string fileName = "c:\myFileName.xls"; string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName); // Create the data adapter pointing to the spreadsheet var oa = new OleDbDataAdapter("SELECT * FROM [myWorkSheetName$]", connectionString); // Create a blank data set var ds = new DataSet(); // Fill the data set using the adapter oa.Fill(ds, "anything"); // Create a data table from the data set DataTable dt = ds.Tables["anything"]; 

然后,您可以根据需要操纵数据表中的数据。

我会阅读Excel电子表格到第三方组件的数据表。 我不会推荐使用OLEDB和Excel提供程序,因为我有很多Unicode使用这些问题。 然后,我将使用System.Data.SqlClient.SqlBulkCopy映射数据并批量/将其插入数据库。

如果您知道导入到的表只能被您的应用程序访问/locking,您可以configurationSqlBulkCopy来执行表锁,这将显着提高性能; 在我的情况下,高达12-15倍!