如何使用SSIS脚本任务删除Excel目标中的第二行?SQL Server 2012

tcbh2hod  于 2022-11-21  发布在  SQL Server
关注(0)|答案(4)|浏览(233)

我 有 一 个 简单 的 包 , 它 从 SQL Server 中 提取 数据 并 将 其 写入 Excel 电子 表格 。

    • 为什么 这样 做 : * * 问题 是 其中 一 列 的 值 大于 255 个 字符 , 这 会 导致 错误 。 我 已经 尝试 了 不同 的 方法 来 找到 解决 方案 , 但 到 目前 为止 还 没有 成功 。

因此 , 我 在 Excel 模板 中 创建 了 一 个 可以 接受 超过 255 个 字符 的 虚拟 行 。 加载 数据 后 , 我 需要 删除 该 虚拟 行 。
我 对 C # 了解 不 多 。 如何 使用 SSIS 脚本 任务 C # 删除 Excel 目标 中 的 第 二 行 ? 是否 需要 创建 保存 路径 文件 夹 和 文件 名 的 变量 ?
然后 , 如何 将 这些 变量 Map 到 C # 代码 ?

hgc7kmma

hgc7kmma1#

您可以使用指令码工作内的Microsoft.Office.Interop.Excel.dll程式库来达成此目的。
您可以使用类似的代码:

  • 注意:我假设档案路径变数名称为FilePath。请记得在指令码工作只读变数(在指令码编辑器中)中选取FilePath变数。也不要忘记将Microsoft.Office.Interop.Excel.dll新增为指令码工作内的指涉 *
Imports Microsoft.Office.Interop

Public Sub Main()

    Dim strFile as String = Dts.Variables("FilePath").Value 
    Dim m_XlApp = New Excel.Application
    m_XlApp.visible = False
    m_XlApp.DisplayAlerts = False
    Dim m_xlWrkbs As Excel.Workbooks = m_XlApp.Workbooks
    Dim m_xlWrkb As Excel.Workbook

    m_xlWrkb = m_xlWrkbs.Open(strFile)
    m_xlWrkb.DoNotPromptForConvert = true 

    Dim m_XlWrkSheet As Excel.Worksheet = m_xlWrkb.Worksheets(1)

    m_XlWrkSheet.Cells(2, 1).EntireRow.Delete(Excel.XlDeleteShiftDirection.xlShiftUp)

    m_xlWrkb.Save()
    m_xlWrkb.Close(SaveChanges:=True)

    Marshal.ReleaseComObject(m_xlWrkb)
    Marshal.ReleaseComObject(m_xlWrkbs)
    m_XlApp.Quit()
    Marshal.ReleaseComObject(m_XlApp)

End Sub
q9yhzks0

q9yhzks02#

我也有同样的问题。
像你一样,我在我的Excel模板中创建了一个可以接受超过255个字符的虚拟行。但是,我在Visual Studio 2008上工作,无法在我的计算机上安装任何东西。
删除虚拟行的解决方案是在其第一列中设置值“DummyRow”,并在Excel模板中创建以下宏:

Private Sub Workbook_Open()
    Call SupprDummyRow
End Sub

Sub SupprDummyRow()

    x = Range("A2").Value 'First row after the titles, first column 
    y = Range("A3").Value 'Second row after the titles, first column

    If (x = "DummyRow" And y <> "") Then 'The Dummy Row is present AND the next row have value (we are in the export file)
            Range("A2").EntireRow.Delete 'Delete the lign
    End If
End Sub

请注意,在我的情况下,第一列总是有一个值(没有空字符串)。
希望这个能帮上忙!
顺祝商祺!

tjvv9vkg

tjvv9vkg3#

尝试增加Excel目标上的列长度。这样,您甚至不需要将虚拟记录添加到Excel文件中,然后再将其删除。
1.右键单击Excel目标。
1.单击“显示高级编辑器”。
1.在[进阶编辑器]中,移至[输入和输出属性]索引标签。
1.展开Excel目标节的“外部列”,并调整所需列的长度属性值。如果需要,您还可以更改数据类型。请查找相同内容的屏幕截图。

试试这个,如果管用就告诉我。

6rqinv9w

6rqinv9w4#

我在我的Excel模板中创建了虚拟行,它可以接受超过255个字符。将数据导出到Excel文件后,使用SSIS脚本任务从Excel中删除虚拟行。
将exel文件作为变量传递,如下所示:immage

下面写代码删除2号行.worksheet.行[2].Delete();

相关问题