建立与现有 Excel 应用程序和 运行 一个 Excel 宏 C# 的连接

Establish Connection to existing Excel Application and Run an Excel macro C#

所有,

抱歉,如果这是一个非常基本的问题并且之前有人问过,我主要写在 VBA / JAVA 中。但是,我正在处理的项目需要 C# 脚本。其中执行 3 个简单的步骤:

  1. 定位已打开的 excel 工作簿。文件路径:

    \Csdatg04\psproject\Robot\Peoplesoft 到 LV\Master 文件 - 不要 use\Transactions 进入 LV Template.xlsm

  2. 用先前在自动化中检索到的三个变量填充单元格 A1、A2 和 A3。

  3. 运行 存储在上述文件路径中的宏 宏名称 "ControlMacroACT"

我开发的代码如下,但是在上面确定的每个阶段我都遇到了错误(可能是基本错误)。

错误 1:这行代码是打开一个工作簿我希望它以一个已经激活的工作簿为目标。

错误 2:找不到工作表

public void RunActualsMacro(string Filepath, string Period, String FiscalYear)
    {
        //~~> Define your Excel Objects
        Excel.Application xlApp = new Excel.Application();

        Excel.Workbook xlWorkBook;

        //~~> Start Excel and open the workbook.
        //Error 1
        xlWorkBook = xlApp.Workbooks.Open("\Csdatg04\psproject\Robot\Peoplesoft To LV\Master Files - Do not use\Transactions into LV Template.xlsm");

        // Populat Cells A1,A2,A3 with string variables
        // Error 2 Worksheet not found
        worksheet.Rows.Cells[1, 1] = Filepath;
        worksheet.Rows.Cells[2, 1] = Period;
        worksheet.Rows.Cells[3, 1] = FiscalYear;


        //~~> Run the macro ControlMacroAct
        xlApp.Run("ControlMacroACT");

        //~~> Clean-up: Close the workbook
        xlWorkBook.Close(false);

        //~~> Quit the Excel Application
        xlApp.Quit();

    }

如有任何帮助,我们将不胜感激。

你需要使用Marshal.GetActiveObject,这段代码大致正确,但暂时无法测试。

public void RunActualsMacro(string Filepath, string Period, String FiscalYear)
{
    //~~> Define your Excel Objects
    Excel.Application xlApp = null;

    Excel.Workbook xlWorkBook;

    //~~> Start Excel and open the workbook.
    //handle errors below
    try {
        xlApp = (Excel.Application) System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
    } catch {
        //perhaps exit - or throw??
    }

    xlWorkBook = xlApp.Workbooks["Transactions into LV Template.xlsm"];

    // Populat Cells A1,A2,A3 with string variables
    Excel.Worksheet ws = xlWorkBook.Worksheets["Sheet1"] //what the tab name of sheet
    ws.Cells[1, 1] = Filepath;
    ws.Cells[2, 1] = Period;
    ws.Cells[3, 1] = FiscalYear;


    //~~> Run the macro ControlMacroAct
    xlApp.Run("ControlMacroACT");

    //~~> Clean-up: Close the workbook
    xlWorkBook.Close(false);

    //~~> Quit the Excel Application
    xlApp.Quit();

}