SSIS 脚本任务 - 使用只读变量名称保存 Excel 模板的副本
SSIS Script Task - Save A Copy of Excel Template Using ReadOnly variable name
我希望能够使用下面的脚本任务代码将 Excel 工作簿的副本(在某些单元格中添加一些数据之后)保存为 ForEachLoop 容器中变量 ClientName 的名称。
我从 Stack OVerflow 中提取了一些代码,这些代码已经填充了 Excel 工作簿模板中的特定单元格,但我试图在每次迭代时使用 ClientName 变量保存每个工作簿,例如ClientName.xlsx
Public Sub Main()
Dim ClientName As String
Dim ClientAddress As String
Dim CurrentDate As Date
Dim m_XlApp = New Excel.Application
Dim m_xlWrkbs As Excel.Workbooks = CType(m_XlApp.Workbooks, Excel.Workbooks)
Dim m_xlWrkb As Excel.Workbook
m_xlWrkb = m_xlWrkbs.Open("C:\Users\UserAZ\Documents\TemplateStatement.xlsx")
Dim m_XlWrkSheet As Excel.Worksheet = CType(m_xlWrkb.Worksheets(1), Excel.Worksheet)
'ClientName = (Dts.Variables("User::strClientName").Value).ToString()
'MsgBox(ClientName)
'ClientAddress = (Dts.Variables("User::strClientAddress").Value).ToString()
'MsgBox(ClientAddress)
'CurrentDate = Today
'MsgBox(CurrentDate)
m_XlWrkSheet.Range("A1").Value = ClientName
m_XlWrkSheet.Range("A2").Value = ClientAddress
m_XlWrkSheet.Range("B4").Value = CurrentDate
'm_xlWrkb.Save()
m_xlWrkb.SaveCopyAs("C:\Users\UserAZ\Documents\" & ClientName & ".xlsx")
m_xlWrkb.Close(SaveChanges:=True)
Marshal.ReleaseComObject(m_xlWrkb)
Marshal.ReleaseComObject(m_xlWrkbs)
m_XlApp.Quit()
Marshal.ReleaseComObject(m_XlApp)
Dts.TaskResult = ScriptResults.Success
End Sub
我原以为在 For 循环容器中的每次迭代之后,脚本任务将使用变量 ClientName 保存模板的副本,并移动到下一次迭代并重复。
但是,它会弹出一个对话框,询问我是否要保存 TemplateStatement.xlsx 的副本。如果我按不保存,它实际上会移动到下一次迭代。但重点是在没有任何人工干预的情况下 运行。
我不熟悉VB.Net。
首先,尝试使用SaveAs()
而不是SaveCopyAs()
。此外,尝试添加以下行以防止显示任何对话框:
m_XlApp = New Excel.Application
m_XlApp.visible = False
m_XlApp.DisplayAlerts = False
Dim m_xlWrkbs As Excel.Workbooks = CType(m_XlApp.Workbooks, Excel.Workbooks)
Dim m_xlWrkb As Excel.Workbook
m_xlWrkb = m_xlWrkbs.Open("C:\Users\UserAZ\Documents\TemplateStatement.xlsx")
m_xlWrkb.DoNotPromptForConvert = true
'...
m_xlWrkb.SaveAs("C:\Users\UserAZ\Documents\" & ClientName & ".xlsx")
m_xlWrkb.Close(SaveChanges:=True)
有用的链接
我希望能够使用下面的脚本任务代码将 Excel 工作簿的副本(在某些单元格中添加一些数据之后)保存为 ForEachLoop 容器中变量 ClientName 的名称。
我从 Stack OVerflow 中提取了一些代码,这些代码已经填充了 Excel 工作簿模板中的特定单元格,但我试图在每次迭代时使用 ClientName 变量保存每个工作簿,例如ClientName.xlsx
Public Sub Main()
Dim ClientName As String
Dim ClientAddress As String
Dim CurrentDate As Date
Dim m_XlApp = New Excel.Application
Dim m_xlWrkbs As Excel.Workbooks = CType(m_XlApp.Workbooks, Excel.Workbooks)
Dim m_xlWrkb As Excel.Workbook
m_xlWrkb = m_xlWrkbs.Open("C:\Users\UserAZ\Documents\TemplateStatement.xlsx")
Dim m_XlWrkSheet As Excel.Worksheet = CType(m_xlWrkb.Worksheets(1), Excel.Worksheet)
'ClientName = (Dts.Variables("User::strClientName").Value).ToString()
'MsgBox(ClientName)
'ClientAddress = (Dts.Variables("User::strClientAddress").Value).ToString()
'MsgBox(ClientAddress)
'CurrentDate = Today
'MsgBox(CurrentDate)
m_XlWrkSheet.Range("A1").Value = ClientName
m_XlWrkSheet.Range("A2").Value = ClientAddress
m_XlWrkSheet.Range("B4").Value = CurrentDate
'm_xlWrkb.Save()
m_xlWrkb.SaveCopyAs("C:\Users\UserAZ\Documents\" & ClientName & ".xlsx")
m_xlWrkb.Close(SaveChanges:=True)
Marshal.ReleaseComObject(m_xlWrkb)
Marshal.ReleaseComObject(m_xlWrkbs)
m_XlApp.Quit()
Marshal.ReleaseComObject(m_XlApp)
Dts.TaskResult = ScriptResults.Success
End Sub
我原以为在 For 循环容器中的每次迭代之后,脚本任务将使用变量 ClientName 保存模板的副本,并移动到下一次迭代并重复。
但是,它会弹出一个对话框,询问我是否要保存 TemplateStatement.xlsx 的副本。如果我按不保存,它实际上会移动到下一次迭代。但重点是在没有任何人工干预的情况下 运行。
我不熟悉VB.Net。
首先,尝试使用SaveAs()
而不是SaveCopyAs()
。此外,尝试添加以下行以防止显示任何对话框:
m_XlApp = New Excel.Application
m_XlApp.visible = False
m_XlApp.DisplayAlerts = False
Dim m_xlWrkbs As Excel.Workbooks = CType(m_XlApp.Workbooks, Excel.Workbooks)
Dim m_xlWrkb As Excel.Workbook
m_xlWrkb = m_xlWrkbs.Open("C:\Users\UserAZ\Documents\TemplateStatement.xlsx")
m_xlWrkb.DoNotPromptForConvert = true
'...
m_xlWrkb.SaveAs("C:\Users\UserAZ\Documents\" & ClientName & ".xlsx")
m_xlWrkb.Close(SaveChanges:=True)