首页 > 解决方案 > SSIS 脚本任务 - 使用只读变量名称保存 Excel 模板的副本

问题描述

我希望能够使用下面的脚本任务代码将 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。

标签: excelvb.netssisetlscript-task

解决方案


首先,尝试使用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)

有用的网址


推荐阅读