我有一个简单的excel文件,其中包含以下代码:
Private Sub Workbook_Open()
MsgBox "Hello World!"
End Sub
我试图运行一个sql作业来打开这个excel文件,但它失败了,变得没有响应。在谷歌上搜索,我找到了“为什么”SQL作业无法打开excel文件的原因 Job On Sql Server Agent does not complete, but it does in 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 Server 2008中的SQL作业运行它。
我从我的C#项目中获取了T_OpenExcel.exe文件(T_OpenExcel - > bin - > Debug - > T_OpenExcel.exe)。我创建了一个SQL Job.Here是我的一些细节:
步骤名称:OpenHelloWorldExcel 类型:操作系统(CmdExec) 运行方式:SQL Server代理服务帐户 命令:C:\ Users \ shress2 \ Documents \ visual studio 2010 \ projects \ T_OpenExcel \ T_OpenExcel \ bin \ Debug \ T_OpenExcel.exe
在运行此作业时,我获得以下状态 开始工作'TestHelloWorld'状态成功 执行作业'TestHelloWorld'状态错误
在查看历史记录时,它显示:
信息
以用户身份执行:GSOPS4 \ SYSTEM。未处理的异常:System.Runtime.InteropServices.COMException:Microsoft Excel无法访问文件'E:\ data_extracts \ TestHelloWorld.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:第23行中的T_OpenExcel.Program.Main(String [] args)处理退出代码-532462766。步骤失败了。
我检查了E:\ data_extracts \ TestHelloWorld.xlsm目录并发现它正常工作。我确保我的xlsm文件没有被任何人使用。我无法弄清楚为什么它无法运行它。任何帮助是极大的赞赏。谢谢你!
答案 0 :(得分:1)
问题似乎是您在打开Excel文件时尝试显示消息框,但是您正在自动化它,因此没有人可以单击消息框上的按钮。其余的代码无法执行,因为文件正在那里等待某人点击按钮。
在后续运行中,服务器无法访问它,因为它仍然在那里,对普通用户不可见,等待单击按钮。因此错误。
简短版本:请勿在无人看管的应用上预测用户输入。