我想从Windows服务运行一些excel vba代码。该服务正在使用fileSystemWatcher来监视要添加的xml文件的目录。一旦添加文件,xml文件的内容就被反序列化为对象属性。在这个阶段,我想打开一个excel文件,并将这些值传递给某些单元格,并从该工作簿中运行vba代码。我从Windows窗体应用程序完美地工作,但我无法从我的Windows服务应用程序工作。我将一个调试器附加到应用程序中,试着查看发生了什么,但没有发生错误并且所有步骤都成功完成。我知道Windows服务不支持打开MS Office文件,因为与用户界面和用户权限进行交互时存在问题。但是我正在寻找一种以任何方式获得这个vba代码的服务。我使用Windows 7家庭高级版32位,我有我的客户对我的服务设置为LocalSystem.This是我使用的代码:如何从Windows服务运行excel vba代码
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 [email protected]"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窗体可能?
FWIW,这并不回答被问到的问题。你问“我想从我的Windows服务中运行一个excel宏”,并且提议作为答案,在Windows服务之外运行excel宏。 – 2013-03-25 21:08:42