7

これは非常に単純な質問かもしれませんが、私は過去4〜5時間、成功せずに努力してきました。:(

Excelファイルを開くだけのC#コンソールアプリケーションがあります。このExcelファイルには、マクロを実行するWorkbook_Open()イベントがあります。私のマクロは、アクティブなワークシートでsheet1の名前をRenameSheet1に変更するだけです。

IDEからC#プロジェクトを実行できました。このプロジェクトをSQLジョブ(SQL Server 2008)から実行したいと思います。どうすればいいのですか?これを機能させるのを手伝ってください。ありがとう。

プロキシアカウントを作成するためのSilverNinnjasの提案に従って:

-ドメインアカウントCORP\PowerUser1とそのパスワードを含む資格情報を作成します

CREATE CREDENTIAL PowerUser1 WITH IDENTITY = N'CORP\shress2', SECRET = N'P@ssw0rd'
GO
USE [msdb]
GO

--ExcelProxyという新しいプロキシを作成し、それにPowerUserクレデンシャルを割り当てます

EXEC msdb.dbo.sp_add_proxy 
@proxy_name=N'ExcelProxy',
@credential_name=N'PowerUser1',
@enabled=1

--ExcelProxyに「CmdExec」サブシステムへのアクセスを許可します

EXEC msdb.dbo.sp_grant_proxy_to_subsystem 
@proxy_name=N'ExcelProxy', 
@subsystem_name =N'CmdExec'

--ログインtestUserにExcelProxyを使用するためのアクセス許可を付与します

EXEC msdb.dbo.sp_grant_login_to_proxy 
@login_name = N'shress2', 
@proxy_name=N'ExcelProxy'
GO

それでも、ユーザーと同じエラーxecutedが発生します:CORP\shress2。

未処理の例外:System.Runtime.InteropServices.COMException:MicrosoftExcelはファイル'E:\ data_extracts\RenameSheets.xlsm'にアクセスできません。考えられる理由はいくつかあり
ます。ファイル名またはパスが存在しない。
このファイルは別のプログラムによって使用されています。
保存しようとしているブックの名前は、現在開いているブックと同じです。Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename、Object UpdateLinks、Object ReadOnly、Object Format、Object Password、Object WriteResPassword、Object IgnoreReadOnlyRecommended、Object Origin、Object Delimiter、Object Editable、Object Notify、Object Converter、Object 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:line24.プロセス終了コード-532462766。ステップは失敗しました。

理由は何ですか?フィードバックをお待ちしております。どうもありがとう。

@ SilverNinja、これが私の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();
        xlApp.Visible = true;
        xlWorkBook = xlApp.Workbooks.Open("\\\\myserver\\data_extracts\\RenameSheets.xlsm", 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

       xlApp.DisplayAlerts = false;
       xlWorkBook.SaveAs("\\\\myserver\\data_extracts\\RenameSheets.xlsm", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);


                  xlWorkBook.Close(true, misValue, misValue);
        xlApp.DisplayAlerts = true;

        xlApp.Quit();
    }

    private static void RunMacro(Excel.Workbook xlWorkBook, object[] p)
    {
        //throw new NotImplementedException();
    }
}
}
4

3 に答える 3

1

新しいジョブ ステップエディタで適切なジョブ タイプを選択するだけです。PowershellまたはCmdExecのいずれかを使用できます。

[コマンド] 領域で、[開く] ボタンをクリックして、コンソール アプリケーションのコンパイル済み実行可能ファイル (exe) を見つけます。

パラメータがある場合は、ここに追加します。それ以外の場合は、スケジュールを構成します。

昇格されたアクセス許可を使用する必要がある場合があります。昇格されたアクセス許可を使用するには、SSMS でSecurity->Credentialsに移動し、 New Credentialを右クリックします。次に、Sql Server Agent -> Proxiesでプロキシ アカウントを構成し、 New Proxyを右クリックします。CmdExecのプロキシを構成し、以前にセットアップした資格情報を使用します。SQL エージェント ジョブ ステップで、コマンドの実行時に使用するこの資格情報を選択できます。

SQL ジョブ ステップ コマンド領域で、次のように入力する必要があります。

excel E:\data_extracts\RenameSheets.xlsm
于 2012-05-21T19:34:47.403 に答える