这可能是一个非常简单的问题,但我一直在尝试过去 4-5 小时,但没有成功。:(
我有一个 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(字符串文件名、对象 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 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();
}
}
}