我有一个简单的 excel 文件,其中包含以下代码:
Private Sub Workbook_Open()
MsgBox "Hello World!"
End Sub
我试图运行一个 sql 作业来打开这个 excel 文件,但它失败了,变得没有响应。在谷歌搜索中,我发现“为什么”SQL 作业无法打开 Excel 文件的原因 Sql Server 代理上的作业未完成,但在 BIDS 中可以完成?
所以我想用 C# 创建一个简单的控制台应用程序,它可以简单地打开 excel 文件并运行我的宏。这是我的代码
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();
xlWorkBook = xlApp.Workbooks.Open(@"E:\data_extracts\TestHelloWorld.xlsm", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
RunMacro(xlWorkBook, new Object[] { "TestHello" });
Thread.Sleep(5000);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
}
private static void RunMacro(Excel.Workbook xlWorkBook, object[] p)
{
//throw new NotImplementedException();
}
}
}
我可以在 IDE 中成功运行此代码。现在我想从 SSMS 中的 SQL 作业运行它,sql server 2008。
我从我的 C# 项目中获取了 T_OpenExcel.exe 文件(T_OpenExcel-->bin-->Debug-->T_OpenExcel.exe)。我创建了一个 SQL 作业。以下是我的一些详细信息:
步骤名称:OpenHelloWorldExcel 类型:操作系统(CmdExec) 运行方式:SQL Server 代理服务帐户命令:C:\Users\shress2\Documents\visual studio 2010\projects\T_OpenExcel\T_OpenExcel\bin\Debug\T_OpenExcel.exe
在运行此作业时,我得到以下状态 Start Job 'TestHelloWorld' Status Success Execute job 'TestHelloWorld' Status Error
在查看历史记录中,它显示:消息以用户身份执行:GSOPS4\SYSTEM。未处理的异常:System.Runtime.InteropServices.COMException:Microsoft Excel 无法访问文件“E:\data_extracts\TestHelloWorld.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 23. 进程退出代码-532462766。步骤失败。
我检查了 E:\data_extracts\TestHelloWorld.xlsm 目录,发现它工作正常。我确保我的 xlsm 文件没有被任何人使用。我无法弄清楚为什么它无法运行它。任何帮助是极大的赞赏。谢谢你的建议!