Office Interop通过任务计划程序运行。

10 浏览
0 Comments

Office Interop通过任务计划程序运行。

尝试设置一个C#控制台程序,使用Word作为中间件将PDF转换为HTML。当登陆后从命令行运行时可以正常工作,但是从计划任务中运行时无法工作。\n我知道微软官方并不支持这样的操作- https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office ,但我仍然希望尝试这种方法。\n我已经看到了一些关于解决方法的帖子,但是无法使其工作。\n简而言之,程序在打开文档的时候停止响应。\n请问有人能指导如何绕过这个由微软实施的限制吗?\n

namespace InterOpTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application();
            String sFolder = "C:\\temp";
            String sInputFile =sFolder+"\\input.pdf";
            String sOutputFile = sFolder+"\\test\\output.html";
            String sLogFile = sFolder + "\\Interoptest.log";
            System.IO.DirectoryInfo d = new DirectoryInfo(sFolder);
           // StreamWriter sw= new StreamWriter(sLogFile);
            StreamWriter sw = File.AppendText(sLogFile);
            try
            {
               sw.WriteLine("");
               sw.WriteLine(DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss") + ",删除任何现有版本的 " + sOutputFile);
               File.Delete(sOutputFile);
               sw.WriteLine(DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss")  + ",打开 "+sInputFile);
               oWord.Documents.Open(sInputFile);
               sw.WriteLine(DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss") + ",保存为 " + sOutputFile);
               oWord.ActiveDocument.SaveAs2(sOutputFile, FileFormat: 10);
               oWord.Quit();
               oWord = null;
               sw.WriteLine(DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss") + ",完成");
            }
            catch (Exception e) {
                sw.WriteLine(DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss")  + ",错误:"+ e.Message);
            }
            finally
            {
                sw.Close();
                Console.WriteLine("完成");
            }
        }
    }
}

0
0 Comments

根据以上内容,我们可以整理出以下文章:

Office Interop run via Task Scheduler问题的原因及解决方法

根据我的理解,目前没有任何解决方法可供选择。

Office Interop(以及其他依赖GUI的库)只能在交互式桌面会话中正常工作。

正如以下两个链接所述:

1. https://serverfault.com/questions/458848/can-i-schedule-a-windows-task-to-run-in-an-interactive-desktop-session

2. https://stackoverflow.com/questions/6939548

这两个链接都指出,没有任何间接的选项可以实现这一点。

因此,您只能选择以下两个方法之一:

1. 以当前登录的用户身份运行/安排应用程序。

2. 或者采用OpenXML/其他替代方法,如Christopher的答案所提议的。

以上就是关于Office Interop run via Task Scheduler问题的原因及解决方法的总结。

0
0 Comments

问题的原因:使用Office Interop通过任务计划程序运行时,可能会遇到缺乏交互会话的问题。

解决方法:建议始终使用OpenXML SDK来处理现代格式的文档,如docx。对于旧格式的文档,主要的方法是使用Office COM Interop。但是,这种方法存在COM interop的一般限制,并且需要交互式会话和已安装的Office软件才能正常工作。另外,还可以尝试使用其他第三方库或类来处理特定格式、特定操作和特定界面的文档,但是这些方法可能不太可靠。

对于转换pdf到word的需求,OpenXML SDK可能无法实现,这可能是Office/Interop的特有功能。可以尝试寻找其他解决方案或确保任务计划程序具有交互式会话。

总之,建议放弃对旧格式文档的支持,并将其转换为新格式文档。旧格式的文档已经过时,而OpenXML SDK可以轻松处理现代格式的文档。

0