Nem*_*emo 7 .net c# sql sql-server-2008-r2
这可能是一个非常简单的问题,但我已经尝试过去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
Run Code Online (Sandbox Code Playgroud)
- 创建一个名为ExcelProxy的新代理,并为其分配PowerUser凭据
EXEC msdb.dbo.sp_add_proxy
@proxy_name=N'ExcelProxy',
@credential_name=N'PowerUser1',
@enabled=1
Run Code Online (Sandbox Code Playgroud)
- 授予ExcelExxy访问"CmdExec"子系统的权限
EXEC msdb.dbo.sp_grant_proxy_to_subsystem
@proxy_name=N'ExcelProxy',
@subsystem_name =N'CmdExec'
Run Code Online (Sandbox Code Playgroud)
- 授予登录testUser使用ExcelProxy的权限
EXEC msdb.dbo.sp_grant_login_to_proxy
@login_name = N'shress2',
@proxy_name=N'ExcelProxy'
GO
Run Code Online (Sandbox Code Playgroud)
我仍然得到与用户:CORP\shress2相同的错误.
未处理的异常:System.Runtime.InteropServices.COMException:Microsoft Excel无法访问文件'E:\ data_extracts\RenameSheets.xlsm'.有几个可能的原因:
文件名或路径不存在.
该文件正被另一个程序使用.
您尝试保存的工作簿与当前打开的工作簿具有相同的名称.at 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:第24行中的T_OpenExcel.Program.Main(String [] args)处理退出代码-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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您只需在“新作业步骤”编辑器中选择适当的作业类型即可。您可以使用Powershell或CmdExec。
在命令区域中,单击打开按钮以找到控制台应用程序编译的可执行文件 (exe)。
如果您有任何参数,请在此处添加它们 - 否则配置计划。
您可能必须使用提升的权限。要使用提升的权限,只需导航到SSMS 中的Security->Credentials并右键单击New Credential。接下来,在Sql Server Agent->Proxies下配置代理帐户,然后右键单击新建代理。配置CmdExec代理并使用您之前设置的凭据。在 SQL 代理作业步骤中,您可以选择在运行命令时使用的凭据。
在 SQL 作业步骤命令区域中,您应该输入如下内容:
excel E:\data_extracts\RenameSheets.xlsm
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11185 次 |
| 最近记录: |