2012-12-12 20 views
0

我正在研究一个SSIS包,该包使用每个循环遍历目录和数据流任务中的excel文件来导入它们。在数据流之前确定Excel电子表格格式任务

我遇到的问题是我正在使用的项目经理并不认为用户会始终遵循结构。所以如果一个文件在文件夹中,并且软件包试图导入它,但是电子表格缺少列或者有额外的列,它会生成错误,当然也会出错。即使我已将任务设置为不会使包失败,包确实失败,然后其他文件不被导入。

所以,我想知道什么是最简单的方式来确定电子表格格式不正确,或停止错误的程序包执行失败?采取上述步骤后,我只需使用文件复制任务将文件移动到“失败”文件夹。然后继续处理电子表格。

回答

2

我有一个类似于你的SSIS包,除了它遍历Microsoft Project文件列表并将记录导入数据库。在Foreach循环容器中,它首先执行检查以查看文件是否存在。我正在向脚本传递FileName的字符串变量和布尔变量bolFileExists。我知道你正在寻求也验证文件的格式正确,我猜你可能能够应用类似于下面的脚本任务代码的东西:

public void Main() 
    { 
     if (File.Exists(Dts.Variables["FileName"].Value.ToString())) 
     { 
      Dts.Variables["bolFileExists"].Value = true; 
     } 
     else 
     { 
      Dts.Variables["bolFileExists"].Value = false; 
     } 
    } 

从这个领导是两个路径。第一个应用表达式“@ bolFileExists == True”,然后执行导入过程。另一个会应用表达式“@ bolFileExists == False”并跳过该文件并允许处理下列文件。在表格驱动的SSIS包中,对于这两个选项,导入状态在列出正在导入的文件的表中定义。我有近40个导入的文件,这允许我运行一个查询来确定是否有任何文件被遗漏,并在该过程完成后发送的自动电子邮件中应用该查询。

至于不正确的格式,我的第一个建议是为用户提供一个模板,以遵循其中一个工作表中的指示。之后,您可以尝试应用临时表或SQL来收集感兴趣的工作表中包含的列表或列数。你采取的方法取决于被拉的信息的复杂性。再次在我的SSIS包中,数据在导入后仍然可以关闭。在这种情况下,我首先将其导入临时登台表格,在该表格中执行检查,然后只有符合感兴趣标准的临时登台表格使用MERGE标准化为最终登录表格。

让我知道如果您有任何问题。希望这有助于解决部分问题。

0

上有SO 35篇文章,其中基础数据库架构中被引用: https://stackoverflow.com/search?q=GetOleDbSchemaTable

尽量充实信贷基金的脚本中,你会用你的XLS文件基础连接为您的OLEDB源的模式检测步骤。一旦你提取了一个字段列表,你可以验证所有必要的字段是否存在正确的顺序。

0

如果您正在讨论验证列等的准确性,您可以有一个脚本任务,它将打开excel文件并查看每列以验证内容是否正确。这可以使用OpenXML或InterOp.Office参考来完成。

如果你在谈论excel版本,你可以有一个脚本任务来查看文件的扩展名(尽管如果他们重命名文件,这真的没有帮助)。