我有一个简单的包,可以从SQL Server中提取数据并将其写入Excel电子表格。
我为什么要这样做:问题是其中一列的值大于255个字符,这会导致错误。我已经尝试了不同的方法来寻找解决方案,但到目前为止还没有成功。
因此,我在我的Excel模板中创建了能够接受超过255个字符的虚拟行。加载数据后,我需要删除该虚拟行。
我对C#了解不多。如何使用SSIS脚本任务C#删除Excel目标中的第二行?我需要创建保存路径、文件夹和文件名的变量吗?
那么如何将这些变量映射到我的C#代码中呢?
发布于 2018-06-01 07:02:55
您可以在脚本任务中使用Microsoft.Office.Interop.Excel.dll
库来实现这一点。
您可以使用类似的代码:
注意:我假设文件路径变量名为FilePath
__。请记住在脚本任务ReadOnly变量(在脚本编辑器中)中选择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
发布于 2018-12-31 17:36:01
我也有同样的问题。
和您一样,我也在Excel模板中创建了可以接受超过255个字符的虚拟行。然而,我在Visual Studio2008上工作,我不能在我的计算机上安装任何东西。
我删除虚拟行的解决方案是在它的第一列中设置值"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
注意,在我的情况下,第一列总是有一个值(没有空字符串)。
希望这对你有所帮助!
诚挚的问候,
发布于 2018-06-01 04:54:34
尝试此操作可增加Excel目标上的列长度。这样,您甚至不需要将虚拟记录添加到excel文件中,然后再将其删除。
试试这个,让我知道它是否有效。
https://stackoverflow.com/questions/50630781
复制相似问题