2013-04-12 58 views
2

我已经回顾了可能有我的答案的问题,不幸的是他们似乎不适用。这是我的情况。我必须从我的客户导入工作表。在A,C,D和AA列中,客户拥有我需要的信息。列的平衡有什么我是毫无价值的信息。列标题在我需要的四列中保持一致,但在列无关紧要时非常不一致。例如单元格A1包含分区。所有电子表格都是如此。细胞B1可以包含任何从套管长度到全长的任何物体。我需要做的是仅导入我需要的列并将它们映射到SQL 2008 R2表。我已经在当前正在调用SSIS函数的存储过程中定义表。SSIS中的脚本任务导入excel电子表格

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

我无法想象我正在尝试做什么以前没有做过。就这样,规模不会丢失,我有170个用户拥有超过120个不同的电子表格模板。

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

+0

我真的不明白你的问题究竟是什么。如果你总是加载列A,C,D和AA,那么列“名称”(我猜你的意思是第一行中的数据?)应该不重要,因为你可以通过位置(数字)来引用它们,而不是名称。如果这没有帮助,请澄清你的意思是“列名”。 – Pondlife

+0

这正是我所要求的。我如何引用列号而不是第一行。我从来没有这样做过。在所有其他使用这种功能的情况下,我导入了所有内容,然后在SQL中选择了相关信息。是否有教程介绍如何将Excel电子表格中的特定列导入到SQL中。 –

回答

3

我整理了一篇文章,描述我如何使用Script task to parse 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; 

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

+0

我想离线了解发生了什么。我非常努力地正确地获取这些信息。有没有办法做到这一点? –