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

Mat*_*aim 6 database excel scripting utilities

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

我问这个问题,不是因为我不知道有多种方法可以做到这一点,而是因为我还没有找到一种方式,感觉不需要花费更多的工作.到目前为止,我采取了以下所有方法(可能还有更多我忘记的方法):

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

到目前为止,使用脚本一直是最灵活的方式,但它仍然感觉有点笨重.我必须完成这项任务,我甚至考虑为它写一点DSL,只是为了加快速度.

但在我这样做之前,我很好奇,有更好的方法吗?

Cha*_*ham 2

如果可以的话,你必须设定界限。您应该尝试为他们提供一个模板,以便他们使用预期的数据,其中包括文件类型(Excel、csv 等)、列名称、有效值等。您应该允许用户浏览文件并上传它在您的页面/表单上。

\n\n

文件上传后,您需要进行验证和导入。您可以使用 ADO.NET、文件流、DTS/SSIS 或 Office Automation 来执行此操作(如果您使用的是 Microsoft 堆栈)。在验证部分,您应该准确地告诉用户他们做错了什么或需要更改。这可能包括让验证页面在数据网格中包含实际数据,并在确切的行/列上提供带有错误的红色标签。如果您使用 Office Automation,您可以向他们提供准确的手机号码,但 Office PIA 却令人头疼。

\n\n

接受验证后,您可以根据需要导入信息。我更喜欢将其放入临时表中并使用存储过程来加载它,但这只是我的想法。有些人更喜欢使用对象模型,但如果您有大量数据,这可能会非常慢。

\n\n

如果您亲自手动加载这些文件并必须进入并操作它们,我建议您找到它们之间的共性并提出一个可遵循的标准。一旦你有了这个,你就可以让用户可以自己做,或者你自己可以更快地做。

\n\n

是的,这是一项繁重的工作,但从长远来看,当有一个程序在 95% 的情况下都有效时,每个人都会获胜。

\n\n

如果这将是一种只能\xe2\x80\x99 无法自动化的情况,那么您可能只需要有一个普通的临时表并使用 sql 进行导入。您必须将数据加载到一个临时表中,执行基本操作,然后将其加载到 SQL 所需的测试临时表中。

\n\n

我\xe2\x80\x99已经做了这么多导入和ETL工具,确实没有简单的方法来处理它。唯一的方法是真正提出一个合理的标准并坚持它并围绕它进行编程。

\n