Запуск макроса из 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.
Код на сервере оформляют либо в виде службы, либо в виде веб-приложения.