2

我已经查看了可能有我回答的问题,不幸的是它们似乎并不适用。这是我的情况。我必须从我的客户那里导入工作表。在 A、C、D 和 AA 列中,客户拥有我需要的信息。列的余额对我来说是毫无价值的信息。列标题在我需要的四列中是一致的,但在无关紧要的列中却非常不一致。例如,单元格 A1 包含除法。在所有电子表格中都是如此。单元格 B1 可以包含从袖长到整体长度的任何内容。我需要做的是只导入我需要的列并将它们映射到 SQL 2008 R2 表。我已经在当前调用 SSIS 函数的存储过程中定义了该表。

问题是,当我尝试导入具有不同列名的电子表格时,SSIS 失败,我必须手动返回运行它以正确设置字段。

我无法想象我正在尝试做的事情以前没有做过。只是为了不丢失数量级,我有 170 个用户,他们拥有超过 120 个不同的电子表格模板。

我迫切需要一个可行的解决方案。在将文件放入我的 SQL 表中后,我可以做任何事情。我什至编写了将文件移回 FTP 服务器的代码。

4

1 回答 1

3

我整理了一篇文章,描述了我如何使用Script 任务来解析 Excel。它允许我将明确的非表格数据导入数据流。

核心概念是您将使用 JET 或 ACE 提供程序并简单地从 Excel 工作表/命名范围中查询数据。一旦你有了它,你就有了一个数据集,你可以逐行遍历并执行你需要的任何逻辑。在您的情况下,您可以跳过第 1 行作为标题,然后只导入 A、C、D 和 AA 列。

该逻辑将进入 ExcelParser 类。所以,第 71 行的 Foreach 循环可能会被提炼成类似(代码近似)

// This gets the value of column A
current = dr[0].ToString();
// this assigns the value of current into our output row at column 0
newRow[0] = current;

// This gets the value of column C
current = dr[2].ToString();
// this assigns the value of current into our output row at column 1
newRow[1] = current;

// This gets the value of column D
current = dr[3].ToString();
// this assigns the value of current into our output row at column 2
newRow[2] = current;

// This gets the value of column AA
current = dr[26].ToString();
// this assigns the value of current into our output row at column 3
newRow[3] = current;

您显然可能需要在这里进行类型转换等,但这是解析逻辑的核心。

于 2013-04-13T16:38:34.190 回答