首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用SSIS脚本任务删除Excel目标中的第二行?SQL Server 2012

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

Stack Overflow用户
提问于 2018-06-01 02:40:08
回答 3查看 3.7K关注 0票数 2

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

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

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

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

那么如何将这些变量映射到我的C#代码中呢?

EN

回答 3

Stack Overflow用户

发布于 2018-06-01 07:02:55

您可以在脚本任务中使用Microsoft.Office.Interop.Excel.dll库来实现这一点。

您可以使用类似的代码:

注意:我假设文件路径变量名为FilePath__。请记住在脚本任务ReadOnly变量(在脚本编辑器中)中选择FilePath变量。另外,不要忘记将Microsoft.Office.Interop.Excel.dll作为引用添加到脚本任务中

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2018-12-31 17:36:01

我也有同样的问题。

和您一样,我也在Excel模板中创建了可以接受超过255个字符的虚拟行。然而,我在Visual Studio2008上工作,我不能在我的计算机上安装任何东西。

我删除虚拟行的解决方案是在它的第一列中设置值"DummyRow“,然后在Excel模板中创建以下宏:

代码语言:javascript
复制
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

注意,在我的情况下,第一列总是有一个值(没有空字符串)。

希望这对你有所帮助!

诚挚的问候,

票数 1
EN

Stack Overflow用户

发布于 2018-06-01 04:54:34

尝试此操作可增加Excel目标上的列长度。这样,您甚至不需要将虚拟记录添加到excel文件中,然后再将其删除。

  1. 在Excel Destination.
  2. Click上右击“显示高级编辑器”。
  3. 在高级编辑器中,转到“输入和输出属性”选项卡。
  4. 展开Excel目标部分的“外部列”,并调整所需列的长度属性值。如果需要,您还可以更改数据类型。请找到相同的屏幕截图。

试试这个,让我知道它是否有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50630781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档