これは非常に単純な質問かもしれませんが、私は過去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();
}
}
}