立即下载新创建的word文件,而不是保存到磁盘

时间:2015-10-16 13:34:29

标签: c# ms-office office-interop

我正在使用互操作创建一个word文件,它工作正常。目前,我在传递文件路径后通过查找并替换内部的任何变量来创建新文件。 理想情况下,我喜欢它一旦创建文件自动通过浏览器提供/下载文件,而不是在服务器硬盘上留下任何东西。这可能吗?这是我用来创建文件的代码;

  public static void CreateWordDoc(List<objReplace> lstReplace, String TemplateFile, String OutputPath)
    {
        var app = new Microsoft.Office.Interop.Word.Application();
        var doc = app.Documents.Open(TemplateFile);

        var range = doc.Range();
        foreach (var ro in lstReplace)
        {
            range.Find.Execute(FindText: ro.Find, Replace: Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll, ReplaceWith: ro.Replace);

            var shapes = doc.Shapes;

            foreach (Microsoft.Office.Interop.Word.Shape shape in shapes)
            {
                var initialText = shape.TextFrame.TextRange.Text;
                var resultingText = initialText.Replace(ro.Find, ro.Replace);
                shape.TextFrame.TextRange.Text = resultingText;
            }
        }
        doc.SaveAs2(OutputPath);

        doc.Close();

        System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
    }

1 个答案:

答案 0 :(得分:1)

看起来你在服务器上自动化Word(ASP.NET?)。

Microsoft目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office在此环境中运行Office时,可能会出现不稳定的行为和/或死锁。

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。请在Considerations for server-side Automation of Office文章中详细了解相关内容。

您可以考虑使用Open XML SDK处理Open XML文档,有关详细信息,请参阅Welcome to the Open XML SDK 2.5 for Office。或者只使用为服务器端执行而设计的任何第三方组件。