次のコードを含む単純な Excel ファイルがあります。
Private Sub Workbook_Open()
MsgBox "Hello World!"
End Sub
この Excel ファイルを開くために SQL ジョブを実行しようとしましたが、失敗し、応答しなくなりました。グーグルで、「なぜ」SQLジョブがExcelファイルを開かない理由を見つけました SQL Serverエージェントのジョブは完了しませんが、BIDSで完了しますか?
そこで、単純に Excel ファイルを開いてマクロを実行する単純なコンソール アプリケーションを C# で作成することを考えました。これが私のコードです
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;
using System.Threading;
namespace T_OpenExcel
{
class Program
{
static void Main(string[] args)
{
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
//Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Open(@"E:\data_extracts\TestHelloWorld.xlsm", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
RunMacro(xlWorkBook, new Object[] { "TestHello" });
Thread.Sleep(5000);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
}
private static void RunMacro(Excel.Workbook xlWorkBook, object[] p)
{
//throw new NotImplementedException();
}
}
}
このコードを IDE で正常に実行できました。今、SSMS、SQL Server 2008 の SQL ジョブからこれを実行したいと思います。
C# プロジェクト (T_OpenExcel-->bin-->Debug-->T_OpenExcel.exe) から T_OpenExcel.exe ファイルを取得しました。SQL ジョブを作成しました。詳細の一部を以下に示します。
ステップ名: OpenHelloWorldExcel タイプ: オペレーティング システム(CmdExec) 実行先: SQL Server エージェント サービス アカウント コマンド: C:\Users\shress2\Documents\visual studio 2010\projects\T_OpenExcel\T_OpenExcel\bin\Debug\T_OpenExcel.exe
このジョブを実行すると、次のステータスが表示されます Start Job 'TestHelloWorld' Status Success Execute job 'TestHelloWorld' Status Error
履歴を表示すると、次のように表示されます。 メッセージ Executed as user: GSOPS4\SYSTEM. 未処理の例外: System.Runtime.InteropServices.COMException: Microsoft Excel はファイル 'E:\data_extracts\TestHelloWorld.xlsm' にアクセスできません。いくつかの理由が考えられます。
ファイル名またはパスが存在しません。ファイルは別のプログラムによって使用されています。保存しようとしているブックは、現在開いているブックと同じ名前です。Microsoft.Office.Interop.Excel.Workbooks.Open (文字列のファイル名、オブジェクトの UpdateLinks、オブジェクトの読み取り専用、オブジェクトの形式、オブジェクトのパスワード、オブジェクトの WriteResPassword、オブジェクト IgnoreReadOnlyRecommended、オブジェクトの起源、オブジェクトの区切り記号、編集可能なオブジェクト、オブジェクトの通知、オブジェクト コンバーター、オブジェクトでAddToMru, Object Local, Object CorruptLoad) at T_OpenExcel.Program.Main(String[] args) in C:\Users\shress2\documents\visual studio 2010\projects\T_OpenExcel\T_OpenExcel\Program.cs:line 23. プロセス終了コード-532462766. ステップは失敗しました。
E:\data_extracts\TestHelloWorld.xlsm ディレクトリを確認したところ、動作していることがわかりました。xlsm ファイルが誰にも使用されていないことを確認しました。実行に失敗した理由がわかりませんでした。どんな助けでも大歓迎です。よろしくお願いします!