12

我有一个小型 .NET 应用程序,我通过任务计划程序在 Windows 2008 Server 下运行。此应用程序需要打开一个 excel 文件,然后将其保存为 csv。当我尝试打开工作簿时任务失败。如果我在没有任务调度程序运行的情况下手动运行它,则该应用程序可以正常工作。

我将其设置为“以最高权限运行”并选中“运行天气用户是否登录”。

我的猜测是,这个过程需要与桌面交互,类似于检查服务上的“与桌面交互”标志。但是我一直无法为计划任务找到类似的东西。

这是失败的代码:(在 workbook.open 调用中失败)

public static void ConvertExcelToCsv(string source, string destination)
{
    if (File.Exists(destination)) File.Delete(destination);

    Application xl = new Application();

    try
    {
        Workbook workbook = xl.Workbooks.Open(source, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        Worksheet ws = (Worksheet)workbook.Sheets[1];
        ws.SaveAs(destination, XlFileFormat.xlCSV, Type.Missing, Type.Missing, false, false, Type.Missing, Type.Missing, Type.Missing,true);

        Marshal.ReleaseComObject(ws);
    }
    finally
    {
        xl.DisplayAlerts = false;
        xl.Quit();

        Marshal.ReleaseComObject(xl);                
    }

}
4

2 回答 2

11

我在 Windows Server 2008 下从 Windows 服务自动化 Office 时遇到了问题,即使在 Windows Server 2003 下工作正常。这个问题也出现在 Open 调用中,所以它可能是同一个问题。

我尝试按照 H Ogawa 在此 MSDN 线程中给出的建议,它似乎有效。这很奇怪,但要感谢小川先生发现它。

“Ogawa Hack”摘要:为系统配置文件创建一个桌面文件夹,作为

C:\Windows\SysWOW64\config\systemprofile\Desktop, 或者

C:\Windows\System32\config\systemprofile\Desktop

...取决于您是否拥有 64 位 Windows。

此外,该文件夹需要任何用户“驾驶”Office 的写入权限。

[编辑:更正的链接 URL]

于 2009-11-05T12:00:21.903 回答
0

这让我很抓狂,我试图启动一个将 DOC 转换为 PDF 的脚本,并且当通过 Windows 10 上的任务计划程序执行时运行完美,但在 Windows Server 2016 上却没有。这成功了!荣誉先生。小川!

于 2021-02-14T18:36:34.363 回答