Запуск макроса из 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#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.





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