Windows サービスからいくつかの Excel VBA コードを実行したいと考えています。サービスは、fileSystemWatcher を使用して、追加される xml ファイルのディレクトリを監視しています。ファイルが追加されると、xml ファイルの内容がオブジェクト プロパティに逆シリアル化されます。この段階で、Excel ファイルを開き、これらの値を特定のセルに渡し、そのブックから vba コードを実行したいと考えています。これは Windows フォーム アプリケーションからは完全に機能していますが、Windows サービス アプリケーションからは機能しません。アプリケーションにデバッガーを接続して何が起こっているのかを確認しましたが、エラーはスローされず、すべての手順が正常に完了しました。UI との対話とそれが持つユーザー権限に問題があるため、Windows サービスが MS Office ファイルを開くことをサポートしていないことは知っています。しかし、この 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 フォームを実行する方法はありますか?