2012-06-09 2 views
3

У нас есть макрос, который занимает около 20 минут. У нас есть winform C#, к которому у нашего пользователя есть доступ - он содержит кнопку «Запустить макрос». Мне бы хотелось, чтобы пользователь нажал кнопку, а затем фактически закрыл форму, а затем через 20 минут просмотрел вывод макроса в предопределенной директории.20-минутный макрос Excel для запуска из C# Winform

Это просто случай создания делегата и разрешение делегату запустить макрос или это выше не тривиальный вопрос?

Пара идей, которые могли бы быть жизнеспособными:

  • Просто скрыть форму после того, как пользователь нажимает на кнопку? Недостатком является то, что макрос по-прежнему будет связывать процессор пользователя в экземпляре Excel?
  • Может ли winForm на ПК UserX запускать программу для запуска на нашем сервере «Excel»? Это звучит далеко, но, может быть, кто-то может помочь.
  • Как и вышеприведенный, возможно, на сервере Excel я мог создать небольшое консольное приложение для демон, которое планируется запустить каждые 2 секунды и проверить таблицу на общем db, чтобы увидеть, нужно ли запускать какие-либо макросы. Пользовательский winform может обновить эту контрольную таблицу, а затем демон будет работать.
+1

У Вас есть опыт работы на всех с автоматизацией Excel из .net? Будет ли уже открыта рабочая книга с макросом? Я полагаю, вы могли бы изучить использование 'Application.Run' для достижения этого. –

+0

Нет, вы не можете открыть приложение C#, поскольку оно будет иметь дескриптор процесса Excel. Вы хотите, чтобы я углубился в подробности, просто проверьте последние пару моих вопросов. VSTO, Excel. Дайте мне знать, хотите ли вы, чтобы я исследовал вам ответ? –

+0

+ 1 @whytheq: Хороший вопрос :) –

ответ

3

Да, это просто.

Используйте C# для запуска файла VBS. Код будет что-то вроде

System.Diagnostics.Process.Start(@"cscript //B //Nologo c:\MyScript.vbs"); 

выше кода запуска VBScript, без подсказок и ошибок и не оболочек логотипа.

Следующий шаг - создать файл vbs.

Откройте Блокнот и вставьте этот код и сохранить его в виде файла MyScript.vbs

Dim xlApp, xlBook 

Set xlApp = CreateObject("Excel.Application") 
'~~> Change Path here 
Set xlBook = xlApp.Workbooks.Open("C:\Test.xls", 0, True) 
xlApp.Run "TestMacro" 
xlBook.Close 
xlApp.Quit 

Set xlBook = Nothing 
Set xlApp = Nothing 
+0

+1 приятная работа вокруг !! –

+0

очень знакомый ... Я использовал много файлов vbs для запуска макросов, но должен признать, что я пытаюсь отойти от файлов vbs. Почему бы не открыть Excel и запустить TestMacro из C# exe? – whytheq

+2

@whytheq: Потому что тогда вам придется ждать 20 минут для завершения макроса;) –

Смежные вопросы