通常如何将电子表格中的数据导入多个数据库列?

无论出于何种原因,我有很多客户现有的数据存储在电子表格中。 每个电子表格中通常有数百个,甚至数千个项目,并且要求客户端通过网站手动input(或者天堂禁止以这种方式自己导入)是不可能的。 通常,这些数据不会简单地将电子表格列映射到数据库列。 那太简单了。 通常,数据在进入数据库之前需要进行处理(数据需要用逗号分隔),或者需要将数据分散到多个表中。 或两者。

我问这个问题,不是因为我不知道有很多方法可以做,而是因为我没有以一种不觉得需要做更多工作的方式来解决问题。 到目前为止,我采取了以下所有方法(可能更多的是我已经忘记):

  • 使用Excel修改数据,所以导入起来更容易一些
  • 将整个电子表格导入临时表格,然后用SQL导入
  • 编写一个脚本并导入数据(我已经使用VBScript,C#和现在的Ruby)

到目前为止,使用脚本似乎是最灵活的方式,但它仍然感觉有点笨拙。 我必须完成这个任务,甚至可以为此写一点DSL,以加快速度。

但在这之前,我很好奇,还有更好的办法吗?

如果可以的话,你必须设定边界。 您应该尝试提供一个模板供他们使用预期的数据,其中包括文件types(Excel,CSV等),列名,有效值等。您应该允许用于浏览文件并上传在你的网页/表单上。

file upload后,您需要进行validation和导入。 您可以使用ADO.NET,文件stream,DTS / SSIS或Office Automation来执行此操作(如果您使用的是Microsoft堆栈)。 在validation部分,你应该告诉用户到底他们做了什么错误或需要改变。 这可能包括使validation页在数据网格中具有实际的数据,并在确切的行/列上提供带有错误的红色标签。 如果您使用Office自动化,您可以给他们确切的细胞数量,但Office PIA是一个痛苦的脖子。

validation一旦被接受,您可以导入您喜欢的信息。 我更喜欢把它放到临时表中,并使用存储过程来加载,但这只是我。 有些人喜欢使用对象模型,但是如果你有很多的数据,这可能会很慢。

如果您亲自手动加载这些文件并且不得不进入并操作它们,我会build议find它们之间的共同性,并提出一个遵循的标准。 一旦你有了,你可以做到这一点,用户可以自己做,或者你可以做得更快。

是的,这是很多工作,但长期错误的是,当95%的时间有一个程序运行时,每个人都赢了。

如果这将是一个不能自动化的情况,那么你可能只需要有一个香草临时表,并有sql到input。 您将不得不将数据加载到一个临时表中,执行基本操作,然后将其加载到SQL期望的临时表中。

我做了很多导入和ETL工具,真的没有简单的方法来处理它。 唯一的办法是真正想出一个合理的标准,坚持下去,并围绕这个标准进行规划。

是啊,只是糟透了。

我会去剧本。 我假设你有重复的列必须匹配另一个表中的单个行。 我会做合理的匹配,如果你遇到一个脚本无法处理和移动数据的行…然后login,并让别人手动。

当然,这些小细节会让你失望,但总的来说,我已经成功地将数据从Excel导出为CSV格式,然后使用脚本或脚本读取数据,根据需要进行转换,然后插入。 根据我的环境的精彩,可以使用脚本语言的数据库接口完成,直到并包括将SQL INSERT语句写入脚本文件。

Python , Ruby和Perl都有很好的CSV包可用。

DSL是要走的路。

为您的问题创build一个域模型。 您可以讨论单元格,列,行,数据库表,拆分字段,组合字段,从单元格到数据库列的映射,这些都是您需要的概念。 另外,你可能想要范围(单元格)和工作表。

一个简单的视图只能看到电子表格中的值,而不是基础的公式。 将电子表格导出为制表符分隔文本可让您访问该文件。 如果您需要访问公式,则最好使用XML表示,即XML电子表格或Office XML格式。

你可能能够在Excel中想出一个DSL。 这可以让你的更聪明的用户做(映射的一部分)。

    Interesting Posts