我有一个C#控制台应用程序,简单地打开一个Excel文件。这个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
我仍然遇到同样的错误:以用户CORP\shress2身份执行。
未处理的异常:System.Runtime.InteropServices.COMException: Microsoft Excel无法访问文件'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)中。在C:\Users\shress2\documents\visual studio 2010\projects\T_OpenExcel\T_OpenExcel\Program.cs的T_OpenExcel.Program.Main(String[] args)的第24行。 进程退出代码-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();
}
}
}
E:
驱动器是一个映射的网络驱动器。你可能在你的用户下映射了它,但是任务正在CORP\shress2
或其他账户下运行。尝试指定文件的UNC路径-例如"\server\path\to\file"。 - Chris Shain