Установите соединение с существующим приложением Excel и запустите макрос Excel C # - PullRequest
0 голосов
/ 05 февраля 2019

Все,

Извинения, если это очень простой вопрос, который задавался ранее, я пишу преимущественно на VBA / JAVA.Однако проект, над которым я работаю, требует сценария C #.Который выполняет 3 простых шага:

  1. Задайте книгу Excel, которая уже открыта.Путь к файлу:

    \ Csdatg04 \ psproject \ Robot \ Peoplesoft To LV \ Master Files - Не использовать \ транзакции в 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();

    }

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 05 февраля 2019

Вам нужно использовать 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();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...