2011-11-18 48 views
3

我们有将产品信息输入到Excel电子表格的业务用户。我的任务是提出将这些信息输入到我们的SQL Server数据库中的方法。问题在于Excel电子表格不仅仅是一张平坦的表格,它们是分层的。他们是这样的如何将复杂的关系数据从Excel导入到SQL Server中

-[Product 1] [Other fields]... 
    -[Maintenance item 1] [Other fields]... 
     -[Maintenance task 1] [other fields]... 
    -[Maintenance item 2] [Other fields]... 
     -[Maintenance task 2] [other fields]... 
     -[Maintenance task 3] [other fields]... 
-[Product 2] [Product Description] [Other fields]... 
     ETC....... 

因此,可以有一个产品的零多维护项目和一个维护项目的多个维护任务。这就是数据库的结构。我需要提出一个标准的Excel模板,我可以发送给我们的业务用户,以便他们可以输入这些信息,然后弄清楚如何将其导出到SQL Server中。数量会很高,所以我需要使导入有点自动化。我应该怎么做?

+0

显然不是。我从来没有说过。如果是的话,这将不是什么大问题。我解释了你在上下文中引用的引用数据库中表的关系。 –

+1

Spreadsheets,bleh。基于浏览器的在线门户是一种可能的替代方案吗? –

回答

5

欢迎来存储数据,并尝试将其导入到数据库中以最坏的方式。如果可能的话,不要让它们像这样创建垃圾的Excel电子表格。这种方法必然会在数据导入中造成很多错误,如果你必须支持这个混乱,你将永远讨厌你的生活。

我不能相信我甚至暗示这一点,但你可以让他们用一个简单的Access数据库呢?它甚至可以直接链接到SQL服务器数据库并正确存储数据。通过使用Access表单,用户会发现添加和维护信息相对容易,并且与以您所描述的形式导入Excel数据相比,问题要少得多。这对您的问题来说将是一个非常便宜且不易出错的解决方案。

你被困在格式中,我发现做类似这样的事情的最好方法是将它按原样导入暂存表中将ID添加到每个下级行(可能最终会循环执行此操作)并将其然后将信息拖出到关系登台表中,然后导入到生产数据库中。

你可以使用SSIS创建所有这些,但它不会很容易,它不会很快,并且如果用户没有严格遵守它们输入数据的方式,它将非常容易出现错误(并且它们永远不会没有一组表格来填写)。确保完全拒绝Excel电子表格,并将其发回给用户,如果它违反规定的结构。请相信我。

我的估计的接入解决方案约需一个月和Excel解决方案至少需要6个月的开发。真的,这将是多么糟糕。

+0

我为数据导入数据导入,Excel导入总是最糟糕的,最脆弱的,可能会破坏并且最难开发。所以我尽一切可能以另一种格式获取数据。 – HLGEM

1

它可能更有意义,打破它分成几个Excel表格......一个产品,但随后另一个用于维修项目,另一个是维护任务。对于每一个,他们都必须输入某种ID将它们连接在一起(例如:maintenance_task_id = 1链接到maintenance_item_id = 4)。对于商业用户来说,这可能是一个痛苦的记忆,但唯一的选择是为每一行输入大量冗余数据。

接下来,创建规范化的数据库模型(以避免存储冗余数据),并通过写一个应用程序或脚本来分析,通过您的Excel工作表填满它。模糊和高层次,但我就是这么做的。

+0

这是简单的方法,但不幸的是,我无法通过管理来实现这一点。 –

2

我不相信你会找到一个导入工具,将为你做到这一点。相反,你将不得不编写一个脚本来ETL电子表格文件。我在Python中做了很多这样的事情(事实上,我今天在做)。

确保您处理异常每细胞水平,向用户报告到底哪个小区有意想不到的信息。使用手工创建的电子表格可以保证您必须定期处理此问题。也就是说,如果这是以XLSX的形式出现的话,那么开发一个XML转换将其转换为一些更易处理的XML文档是可能的。

1

我同意以前的帖子一般...

我的建议 - 完全避免电子表格。花时间制作一个简单的前端表单 - 最好是基于网页的表单。尽可能干净地捕捉数据(这里的任何内容都会比电子表格清洁度更好 - 包括只有命名的字段)

您将花费较少的时间到最后。

1

我会将VBA代码添加到模板,以便尽可能多地为用户数据输入和验证添加结构和智能。

在这种极端情况下,您可以让用户通过表单输入所有数据,这些数据将所有验证数据放在工作表上,然后在保存或关闭事件中内置一个整体验证例程。
不那么极端的是添加3个命令按钮驱动代码为
- 添加产品
- 增加保养项目
- 在保存加入维护任务
和一些整体的验证码/关闭
这样你添加尽可能多的智慧尽可能为数据录入任务。

使用命名单元格或由VBA代码创建的其他隐藏元数据作为标记,以便您的数据库更新例程可以更好地理解数据。

我做了这样的最后一个包含了数据库更新程序的3-4个万维网,但我认为它可能比您的示例更复杂。
但是,如果您对VBA和Excel对象模型和事件没有经验,那么显然需要更长的时间。

相关问题