我想从我的 Windows 服务运行一些 excel vba 代码。该服务正在使用 fileSystemWatcher 来监视要添加的 xml 文件的目录。添加文件后,xml 文件的内容将反序列化为对象属性。在这个阶段,我想打开一个 excel 文件并将这些值传递到某些单元格并从该工作簿运行 vba 代码。我可以在 Windows 窗体应用程序中完美运行它,但我无法从我的 Windows 服务应用程序中运行它。我将调试器附加到应用程序以尝试查看发生了什么,但没有抛出任何错误并且所有步骤都成功完成。我知道 Windows 服务不支持打开 MS Office 文件,因为与 UI 交互及其拥有的用户权限存在问题。但我正在寻找一种能够让这个 vba 代码从服务运行的方法。我使用的是 Windows 7 Home Premium 32 位,并且我的服务帐户设置为 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 窗体?