2015-10-16 60 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以獲取更多信息。或者只是使用爲服務器端執行而設計的任何第三方組件。