[英]editing word document in c# asp.net
我正在編輯一個單詞模板,然后將其保存在Web服務器上。 為此,我正在使用Interop.Word
(我知道這很糟糕,但仍然...)
我已經在服務器上安裝了MS Word
這是我的代碼:
object fileName;
object saveAs;
fileName = Server.MapPath("~\\tempOutputs\\Template - Filled with Registration Data.docx");
try
{
object missing = System.Reflection.Missing.Value;
Word.Application wordApp = new Word.Application();
Word.Document aDoc = null;
if (File.Exists((string)fileName))
{
object readOnly = false;
object isVisible = false;
wordApp.Visible = false;
aDoc = wordApp.Documents.Open(ref fileName, ref missing,
ref readOnly, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref isVisible, ref missing, ref missing,
ref missing, ref missing);
aDoc.Activate(); //Error Line
我在aDoc.Activate()
語句上遇到錯誤,因為object reference not set to an instance
但在我的系統上有效
有什么建議么 ?
編輯
我已經使用上面的代碼編寫了一個控制台應用程序,並在完美運行的服務器上運行它,為什么不以Web應用程序的形式在IIS上運行呢?
我很早以前就使用了VSTO,可能是7或8年前,但是沒有在服務器端使用過。這讓我很痛苦,因為進程卡住,內存泄漏和奇怪的問題使我的代碼無法正常工作(例如您的代碼)。 解決方案是OS語言和安裝的Office語言不匹配。 因此,您應該檢查並檢查您的代碼區域性信息:
Thread.CurrentThread.CurrentUICulture;
Thread.CurrentThread.CurrentCulture;
如果您真的需要VSTO(我看不到為什么?)檢查語言,請安裝Office Language Pack,依此類推...但是我也建議您使用其他工具。
整個方法是錯誤的。僅應使用開放式xml或從根本上設計用於多線程方案的類似框架來在服務器端處理word文檔。
盡管您不應該這樣做的原因是眾多的(有關信息,請參見http://support.microsoft.com/kb/257757 ),但是您的代碼運行者可能會遇到問題。
您的網絡服務器以什么身份運行? 當以交互方式運行(即使用Visual Studio等進行調試)時,您將以當前登錄的用戶身份運行,而在您的服務器上將以運行Web服務器的應用程序池(例如ApplicationPoolIdentity)的身份運行
在服務器端運行Word Interop主要是正確設置應用程序池使用的用戶帳戶(例如,webuser)的權限的問題。
那應該按設置進行。 話雖這么說,服務器端單詞互操作在后面仍然很痛苦。 現在,它已經可以在生產服務器上運行2年了,但是並不是沒有問題。 即使我在測試服務器上運行的所有負載測試,我仍然都不相信它確實沒有內存泄漏。 我們僅使用它,因為我們需要docx到pdf轉換,並且我們測試的所有庫都無法正常運行,性能不佳或也使用word interop。 它作為離散的Windows服務運行,需要花費大量時間進行崩潰恢復等。我從不使用它來編輯文檔。 這就是OpenXML SDK的目的。
順便說一句:如果您的代碼最終沒有被finally塊弄得一團糟,那肯定是在內存泄漏中建立。 另外,您需要在使用的文檔,應用程序的Documents屬性和應用程序本身上調用Marshal.FinalReleaseComObject
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.