我有了下面的代码一个简单的Excel文件:SQL作业无法运行C#.NET控制台应用程序
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作业运行这个SQL服务器2008.
我从C#项目(T_OpenExcel - > bin - > Debug - > T_OpenExcel.exe)中抓取了T_OpenExcel.exe文件。我创建了一个SQL Job.Here是我的一些细节:
步骤名称:OpenHelloWorldExcel 类型:操作系统(CmdExec) 运行方式:SQL Server代理服务帐户 命令:C:\用户\ shress2 \文件\ Visual Studio 2010的\项目\ T_OpenExcel \ T_OpenExcel \ BIN \调试\ T_OpenExcel.exe
在运行这个工作,我得到了下面的状态 开始工作 'TestHelloWorld' 状态成功 执行工作 'TestHelloWorld' 状态错误
在查看历史记录时,显示: 消息 以用户身份执行:GSOPS4 \ SYSTEM。未处理的异常:System.Runtime.InteropServices.COMException:Microsoft Excel无法访问文件'E:\ data_extracts \ TestHelloWorld.xlsm'。 有几种可能的原因:
文件名或路径不存在。 该文件正在被另一个程序使用。 您尝试保存的工作簿与当前打开的工作簿具有相同的名称。在Microsoft.Office.Interop.Excel.Workbooks.Open(字符串文件名,对象更新链接,对象ReadOnly,对象格式,对象密码,对象WriteResPassword,对象IgnoreReadOnlyRecommended,对象源,对象分隔符,对象可编辑,对象通知,对象转换器,对象C:\ Users \ shress2 \ documents \ visual studio 2010 \ projects \ T_OpenExcel \ T_OpenExcel \ Program.cs中的T_OpenExcel.Program.Main(String [] args)中的AddToMru,Object Local,Object CorruptLoad):Process 23. Process Exit Code -532462766。该步骤失败。
我检查了E:\ data_extracts \ TestHelloWorld.xlsm目录,发现它工作正常。我确信我的xlsm文件没有被任何人使用。我无法弄清楚它为什么没有运行它。任何帮助是极大的赞赏。谢谢!
感谢您的意见。我会尝试一下我的宏 - 这不需要人为干预。谢谢。 – Nemo
嗨大卫,我修改我的宏以重新命名Sheet1为RenameSheet1为简单起见。当我从IDE运行我的项目时,它提示我Excel SaveAs窗口,需要我的输入。我试图在我的代码xlApp.ActiveWorkbook.SaveCopyAs(@“E:\ data_extracts \ RenameSheets21.xlsm”)中执行SaveAs。在关闭和退出之前。但每次运行该项目时,我都会收到SaveAs提示。我在这里错过了什么吗?谢谢。 – Nemo
我很少和Excel一起工作,但如果我记忆犹新,SaveAs函数有一个重载,它接受一个布尔值来指定它是否应该覆盖文件(如果存在)。当我正在挖掘我的代码以查看是否正确时,您可以尝试一下。 – David