问题
如何最好地解析/访问/提取在SQL 2005字段中存储为二进制数据的“ excel文件”数据?
(因此所有数据最终都可以存储在其他表的其他字段中。)
背景
基本上,我们的客户需要他们的用户提供大量的详细数据。 不幸的是,我们的客户不能要求其用户进行任何类型的数据库导出。 因此,我们的客户必须为用户提供某种UI来输入数据。 我们的客户决定的用户界面将是所有用户都可接受的,因为它具有相当强大的用户界面。 因此,考虑到所有这些,我们的客户需要自动解析这些数据并将其存储在他们的数据库中。
我们试图说服我们的客户,用户将只执行一次,然后坚持进行数据库导出! 但是客户不能要求用户导出数据库。
- 我们的客户要求我们解析一个Excel文件
- 客户的用户使用excel作为“最佳”用户界面来输入所有必需的数据
- 向用户提供了必须填写的空白excel模板
- 这些模板具有固定数量的唯一命名的标签
- 这些模板具有许多必须完成的固定区域(单元)
- 这些模板还具有用户可以在其中插入多达数千个格式相同的行的区域
- 完成后,将通过标准html文件上传从用户提交excel文件
- 我们的客户将此文件原始存储到他们的SQL数据库中
给定
- 标准excel(“ .xls”)文件(本机格式,不以逗号或制表符分隔)
- 文件原始存储在
varbinary(max)
SQL 2005字段中 - excel文件数据不一定在行之间是“统一”的-即,我们不能仅假设一列都是相同的数据类型(例如,可能有行标题,列标题,空单元格,不同的“格式”, ...)
要求
- 完全在SQL 2005中编码(存储过程,SSIS?)
- 能够访问任何工作表(选项卡)上的值
- 能够访问任何单元格中的值(无需公式数据或取消引用)
- 单元格值在行之间一定不能“统一”,也就是说,我们不能仅仅假设一列都是相同的数据类型(例如,可能有行标题,列标题,空单元格,公式,不同的“格式”,...)
优先
- 没有文件系统访问权限(不写入临时.xls文件)
- 以定义的格式检索值(例如,实际日期值,而不是像39876这样的原始数字)