2015-10-16 55 views
0

我使用互操作创建了一个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

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

由于Office可能不支持Microsoft Office应用程序从任何无人值守的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)推出并不支持Microsoft 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以获取更多信息。或者只是使用为服务器端执行而设计的任何第三方组件。