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)

有用的链接