运行ssis包中的xlsm宏

问题描述 投票:0回答:1

如何使用宏将数据从sharepoint导出到xlsm,并且当sharepoint有新数据时数据应该自动处理?

我已经在 xlsm 文件中实现了宏,对于自动过程,我已经使用脚本任务来运行宏代码来实现逻辑 使用ssis。脚本没有给出任何错误,但数据没有刷新。它在 xlsm 文件中显示旧数据。

我已经创建了 xlsm 文件并打开 xlsm 文件,转到那里的查询选项。

我已经给出了如下的 SharePoint 路径详细信息:=SharePoint.Tables("https://share.companyname.com/sites/rdh90e3kh53/rue/customersupport",[Implementation='"2.0",Viewmode="ALL"])

Sub Refresh_Customerconn()
    ActiveWorkbook.RefreshALL
End Sub

当我手动执行时,它工作正常,从 SharePoint 获取最新数据并加载到 xlsm 文件中。但是当我在 ssis 中使用脚本任务调用宏时没有获取最新数据。

主要是我想自动处理刷新xlsm文件中的数据。即我已经在 ssis 包中实现了逻辑,并且我将在该包中实现逻辑 使用 sql server 代理作业安排它。但宏在 ssis 脚本任务中不刷新。

string filename = "C:\\Users\\Ravo\\Desktop\\CustomerReport.xlsm";
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 
Microsoft.Office.Interop.Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filename); 
xlApp.Visible = false; 
xlApp.Run("Customerformat"); 
xlWorkBook.Close(true); 
xlApp.Quit();
Dts.TaskResult = (int)ScriptResults.Success;
excel vba ssis-2012
1个回答
0
投票

确保您的宏完美运行

Sub Refresh_Customerconn()
    ThisWorkbook.RefreshAll
End Sub

确保加载 Excel、运行宏和关闭工作簿是按顺序进行的

using System;
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

public void Main()
{
    string filename = @"C:\Users\Ravo\Desktop\CustomerReport.xlsm";
    Application xlApp = new Application();
    Workbook xlWorkBook = null;

    try
    {
        xlWorkBook = xlApp.Workbooks.Open(filename);
        xlApp.Visible = false;

        // Run the macro to refresh data
        xlApp.Run("Refresh_Customerconn");

       //Save the workbook if you want to keep the updated data
        xlWorkBook.Save();
    }
    catch (Exception ex)
    {
        // Handle exceptions
        Dts.Events.FireError(0, "Excel Script Task", ex.Message, "", 0);
        Dts.TaskResult = (int)ScriptResults.Failure;
        return;
    }
    finally
    {
        // Clean up
        if (xlWorkBook != null)
        {
            xlWorkBook.Close(true); // Save changes
            Marshal.ReleaseComObject(xlWorkBook);
        }

        xlApp.Quit();
        Marshal.ReleaseComObject(xlApp);
    }

    Dts.TaskResult = (int)ScriptResults.Success;
}
© www.soinside.com 2019 - 2024. All rights reserved.