Как запустить код Excel VBA из службы Windows
Я хочу запустить код Excel VBA из моей службы Windows. Служба использует fileSystemWatcher для мониторинга каталога для добавления XML-файла. После добавления файла его содержимое десериализуется в свойствах объекта. На этом этапе я хочу открыть файл Excel и передать эти значения в определенные ячейки и запустить код VBA из этой рабочей книги. У меня это отлично работает из приложения Windows Forms, но я не могу заставить его работать из моего приложения службы Windows. Я приложил к приложению отладчик, чтобы попытаться увидеть, что происходит, но ошибок не было, и все шаги были успешно выполнены. Я знаю, что служба Windows не поддерживает открытие файлов MS Office, поскольку существуют проблемы с взаимодействием с пользовательским интерфейсом и имеющимися у него разрешениями пользователя. Но я ищу способ обойти любой способ запустить этот код VBA из службы. Я использую Windows 7 Home Premium 32 bit, и моя учетная запись для моей службы установлена на LocalSystem. Это код, который я использую:
private void FSWatcherTest_Created(object sender, System.IO.FileSystemEventArgs e)
{
Trade t;
XmlSerializer serializer;
XmlReader reader;
XmlWriter writer;
string filePath = @"C:\Inbox\TradeInfo.xml";
serializer = new XmlSerializer(typeof(Trade));
reader = XmlReader.Create(filePath);
t = (Trade)serializer.Deserialize(reader);
reader.Close();
string path=@"C:\Windows\System32\config\systemprofile\Desktop\TwsDde.xls";
oXL = new Microsoft.Office.Interop.Excel.Application();
oXL.Visible = true;
oXL.DisplayAlerts = false;
mWorkBook = oXL.Workbooks.Open(path,2, false, 5, "", "", true,Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true,false, false);
//Get all the sheets in the workbook
mWorkSheets = mWorkBook.Worksheets;
//Get the allready exists sheet
mWSheet1=(Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("Basic Orders");
// Microsoft.Office.Interop.Excel.Range range= mWSheet1.UsedRange;
mWSheet1.Cells[12, 1] = "GE";
mWSheet1.Cells[12, 2] = "STK";
mWSheet1.Cells[12, 7] = "SMART";
mWSheet1.Cells[12, 9] = "USD";
mWSheet1.Cells[12, 12] = "Buy";
mWSheet1.Cells[12, 13] = "100";
mWSheet1.Cells[12, 14] = "MKT";
Excel.Range range;
Excel.Range row;
range = mWSheet1.get_Range("A12", "O12");
range.EntireRow.Select();
oXL.Run("TwsDde.xls!Sheet2.placeOrder");
}
Любая помощь будет принята с благодарностью. Или альтернативные способы сделать то же самое, то есть запустить форму Windows, которая может содержать этот код?