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

标签 c# sql-server ssis etl script-task

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

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

因此,我在 Excel 模板中创建了虚拟行,该行能够接受超过 255 个字符。加载数据后,我需要删除该虚拟行。

我对C#了解不多。如何使用 SSIS 脚本任务 C# 删除 Excel 目标中的第二行?我是否需要创建保存路径文件夹和文件名的变量?

然后如何将这些变量映射到我的 C# 代码?

enter image description here

enter image description here

最佳答案

您可以在脚本任务中使用 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

关于c# - 如何使用SSIS脚本任务删除Excel目标中的第二行? SQL Server 2012,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50630781/

相关文章:

c# - 如何在 JetBrains Rider 中添加 C# 解决方案文件?

c# - 字符的正则表达式

javascript - Selenium click 不适用于 angularjs ng-click 事件

c# - 更改命名空间后 Windows Phone 应用程序未启动

sql - 在 SQL Server 的表中存储带有操作数的运算符

mysql - 在 Access 数据库(mdb 文件)中使用 Jet 表时,触发器的替代方案是什么?

sql-server - T-SQL 合并返回多个结果

visual-studio-2015 - SSIS 序列容器

sql-server - 如何从 SSISDB 下载 SSIS 包

sql-server - SSIS存储过程使用临时表2008和2014