【发布时间】:2020-04-19 12:21:51
【问题描述】:
问题:
我有一个 SSIS 包,它遍历 100 多个 Excel 文件并读取数据,然后将内容复制到 SQL Server 表中。在这些 Excel 文件中,这一列具有超链接。列文本本身类似于 DSH-LN-4,但在 Excel 中单击它会打开一个包含一些图像的文件夹。如何复制此列中的基础链接而不是单元格中的实际文本?
到目前为止我做了什么:
我还没有真正尝试过任何事情,因为我在 SSIS 中完全没有找到有关如何执行此操作的资源。无法手动向 Excel 文件添加一列,因为有 100 个文件。我发现的唯一资源是在this SO Question,但这并不表示在不手动操作 Excel 文件的情况下执行此操作的过程。
我想要什么:
在我的 ForEach 循环容器中,我有一个数据流任务,它获取 Excel 内容并将其推送到 SQL 表中。包含超链接的列称为PhotoReference(因为这些超链接会打开包含照片的文件夹)。我希望 PhotoReference 列复制单元格的底层超链接并将其添加到 SQL 列中。
例如,我希望 PhotoReference 列包含以下内容:
www.companyname.box.com/asjdfbgkjb134kjbsdafo2bm21n4bk
如果我能做到这一点,我的 Power BI 报告会根据这些基础数据运行,其中可能包含可直接打开图像的可点击文本。
任何帮助将不胜感激。
更新:
我可以尝试两种不同的方法从我的专栏中提取超链接,但每种方法都有自己的问题:
方法 1: 我在 ForEach 容器中添加了一个脚本任务组件,并在循环每个 Excel 文件时,使用 Microsoft.Office.Interop.Excel.Hyperlinks 程序集从我的 Excel 列中获取超链接。但是,我不知道之后该怎么办。我认为唯一要做的就是用我提取的超链接覆盖 Excel 列的内容,但我真的不想以任何方式更改我的 Excel 文件。
方法 2: 我在 Excel 源和 SQL 目标之间的数据流任务中添加了一个脚本组件对象。在这种方法中,我几乎无法走得那么远,因为自动生成的Input0_ProcessInputRow 方法具有Input0Buffer 类型的参数Row。我无法将任何 Microsoft.Office.Interop.Excel 属性应用于我的 Input0Buffer 对象。所以我被卡住了。
【问题讨论】:
-
在 for each 循环容器中,您应该在数据流任务中读取 Excel 之前添加一个脚本任务以将内容提取到另一列。稍后我会尽力提供详细的答案
-
谢谢@Hadi,我希望能更详细地解释如何做到这一点。我正在努力使用
Input0Buffer Row我在脚本组件方法中使用Interop.Excel程序集来提取超链接。
标签: sql-server excel ssis etl excel-interop