Запуск макроса из C#

Запуск макроса из C#

Всем доброго времени суток. На связи Алексей Гулынин. В данной статье я бы хотел рассказать о том, как запустить макрос Excel в C#. Это может пригодиться при создании своего сервера отчетов, либо просто при генерации какого-либо файла Excel из приложения.

Макрос будет делать следующее: выводить таблицу умножения. Код макроса:

Sub PrintMultTable()
Dim ws As Worksheet
Set ws = Application.ThisWorkbook.Worksheets(1)
' Выводим таблицу умножения
For i = 1 To 10
    ws.Cells(1, i + 1).Value = i
    ws.Cells(i + 1, 1).Value = i
    For j = 1 To 10
        ws.Cells(i + 1, j + 1).Value = i * j
    Next j
Next i
End Sub

Код на C# будет запускать макрос. Не забываем добавить ссылку в проект на Microsoft Excel Object Library.

Основной код:

using System;
using Excel = Microsoft.Office.Interop.Excel;
using System.Diagnostics;
using System.Threading;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      // Создаём экземпляр Excel
      Excel.Application app = new Excel.Application();
      app.Visible = true;
      Excel.Workbooks books = app.Workbooks;
      Excel._Workbook book = null;
      // Открываем книгу
      book = books.Open(@"D:\test.xlsm");
      // Свойство ScreenUpdating отвечает за отрисовку на листе всего того,
      // что делает макрос. false - не показывать, true - показать.
      app.ScreenUpdating = false;
      // Засыпаем на 2 секунды, чтобы видеть, что макрос отрабатывает после
      // открытия файла Excel
      Thread.Sleep(2000);
      // Запускаем макрос
      app.Run((object)"PrintMultTable");
      app.ScreenUpdating = true;
      // Засыпаем на 10 секунд
      Thread.Sleep(10000);
      // После этого завершаем все процессы Excel
      EndProcessExcel();
      Console.WriteLine("Нажмите клавишу для продолжения");
      Console.ReadLine();
    }

    static void EndProcessExcel()
    {
      // Получаем все процессы
      Process[] procList = Process.GetProcesses();
      foreach (Process p in procList)
      {
        if (p.ProcessName.ToString().Trim().ToUpper() == "EXCEL")
        {
          // Завершаем процесс
          p.Kill();
        }
      }
    }
  }

Как мы видим из кода — всё достаточно просто. Завершение процессов Excel я добавил для примера.

В данной статье вы научились запускать макрос в Excel, используя язык C#.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

3 комментарии

  • круто спасибо ак мы видим из кода — всё достаточно просто.

  • Здравствуйте Алексей Гулынин.
    Этот код работает только на локальной машине, он не будет работать на сервере.
    Вы знаете решение чтобы запустить ексел на сервере ?

  • Алексей Гулынин

    Доброго времени суток.
    Да, данный код будет работать только на локальной машине, на которой установлен Excel.
    Обычно Excel на сервер не ставят.
    Для того, чтобы можно было работать с Excel (скажем получать какие-то отчеты с сервера) обычно используют OpenXML. Также можете попробовать использовать библиотеку GemBox.
    Код на сервере оформляют либо в виде службы, либо в виде веб-приложения.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *