当 C# 可执行文件是 运行 形式的任务计划程序时,无法创建和保存 excel 文件
Not able to create and save excel file when C# executable is run form Task Scheduler
使用下面的代码,创建了 C# 控制台应用程序,它将在文件文件夹中创建 Test.xlsx。
public class Program
{
public string dailyUpdateFile;
Microsoft.Office.Interop.Excel.Application excel;
Microsoft.Office.Interop.Excel.Workbook worKbooK;
Microsoft.Office.Interop.Excel.Worksheet worKsheeT;
static void Main(string[] args)
{
System.Diagnostics.Debugger.Launch();
Program obj = new Program();
obj.excel = new Microsoft.Office.Interop.Excel.Application();
obj.excel.DisplayAlerts = false;
DirectoryInfo dInfo = Directory.GetParent(Environment.CurrentDirectory);
dInfo = Directory.GetParent(dInfo.FullName);
obj.dailyUpdateFile = dInfo + "\Files\Test.xlsx";
if (!File.Exists(obj.dailyUpdateFile))
{
obj.worKbooK = obj.excel.Workbooks.Add(Type.Missing);
obj.worKsheeT = (Microsoft.Office.Interop.Excel.Worksheet)obj.worKbooK.ActiveSheet;
obj.worKsheeT.Name = "TestFile";
obj.worKsheeT.Cells[1, 1] = "Date";
obj.worKsheeT.Cells[1, 2] = "Day";
}
obj.worKbooK.SaveAs(obj.dailyUpdateFile);
obj.excel.Quit();
}
}
现在,当应用程序可执行文件来自任务计划程序 运行 时,出现以下异常:
异常信息:System.Runtime.InteropServices.COMException
在 Microsoft.Office.Interop.Excel._Workbook.SaveAs(System.Object, System.Object, System.Object, System.Object, System.Object, System.Object, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode, System.Object、System.Object、System.Object、System.Object、System.Object)
在 Test.Program.Main(System.String[])
以上异常可以从事件查看器中捕获。
以为我很难找到解决方案,但一天之内无法解决。
有人想指出 - 当应用程序来自任务计划程序 运行 时,它指向 "C:\Files " 但没关系,它应该在该文件夹下创建 Test.xlsx。
调试时出现以下异常
.
求助。
我宁愿将文件保存在具有唯一文件名的共享路径中,例如带有日期时间的随机文件名。我在这里看到的唯一问题是任务是 运行.
的用户的访问问题
从配置中获取路径并将文件保存到具有完整读写权限的共享路径。
不建议在应用服务器中保存文件
谢谢
基兰
有没有可能是权限问题?请尝试在安全设置中给用户授予一定的权限,或者换一个足够权限的用户。
不推荐使用 COM 在没有人工交互的情况下与 Office 进行互操作。请查看此 page 了解详细信息。我建议改用NPOI,这种操作会更高效可靠。
使用下面的代码,创建了 C# 控制台应用程序,它将在文件文件夹中创建 Test.xlsx。
public class Program
{
public string dailyUpdateFile;
Microsoft.Office.Interop.Excel.Application excel;
Microsoft.Office.Interop.Excel.Workbook worKbooK;
Microsoft.Office.Interop.Excel.Worksheet worKsheeT;
static void Main(string[] args)
{
System.Diagnostics.Debugger.Launch();
Program obj = new Program();
obj.excel = new Microsoft.Office.Interop.Excel.Application();
obj.excel.DisplayAlerts = false;
DirectoryInfo dInfo = Directory.GetParent(Environment.CurrentDirectory);
dInfo = Directory.GetParent(dInfo.FullName);
obj.dailyUpdateFile = dInfo + "\Files\Test.xlsx";
if (!File.Exists(obj.dailyUpdateFile))
{
obj.worKbooK = obj.excel.Workbooks.Add(Type.Missing);
obj.worKsheeT = (Microsoft.Office.Interop.Excel.Worksheet)obj.worKbooK.ActiveSheet;
obj.worKsheeT.Name = "TestFile";
obj.worKsheeT.Cells[1, 1] = "Date";
obj.worKsheeT.Cells[1, 2] = "Day";
}
obj.worKbooK.SaveAs(obj.dailyUpdateFile);
obj.excel.Quit();
}
}
现在,当应用程序可执行文件来自任务计划程序 运行 时,出现以下异常:
异常信息:System.Runtime.InteropServices.COMException 在 Microsoft.Office.Interop.Excel._Workbook.SaveAs(System.Object, System.Object, System.Object, System.Object, System.Object, System.Object, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode, System.Object、System.Object、System.Object、System.Object、System.Object) 在 Test.Program.Main(System.String[])
以上异常可以从事件查看器中捕获。
以为我很难找到解决方案,但一天之内无法解决。
有人想指出 - 当应用程序来自任务计划程序 运行 时,它指向 "C:\Files " 但没关系,它应该在该文件夹下创建 Test.xlsx。
调试时出现以下异常
求助。
我宁愿将文件保存在具有唯一文件名的共享路径中,例如带有日期时间的随机文件名。我在这里看到的唯一问题是任务是 运行.
的用户的访问问题从配置中获取路径并将文件保存到具有完整读写权限的共享路径。
不建议在应用服务器中保存文件
谢谢 基兰
有没有可能是权限问题?请尝试在安全设置中给用户授予一定的权限,或者换一个足够权限的用户。
不推荐使用 COM 在没有人工交互的情况下与 Office 进行互操作。请查看此 page 了解详细信息。我建议改用NPOI,这种操作会更高效可靠。