2011-01-14 58 views
2

我們在Visual Studio 2005中繼承了大量使用C#編寫的.NET 2.0代碼。後端數據庫是MS SQL Server 2000.我們已經遷移了代碼到Visual Studio 2010中.NET 4.0的C#並且可以編譯和構建。問題在於舊代碼使用Microsoft.Interop.Office.Word庫來允許我們使用郵件合併和宏嵌入模板生成服務器端報告。我們現在明白,Visual Studio 2010不支持服務器端VBA或C#MS Word應用程序工作。所以我們下載了Open XML 2.0。這些文件無可厚非。我們在網上發現的無數帖子都是從頭開始創建文檔,很少涉及郵件合併或運行.dotm文件中啓用的宏等,其中大部分都涉及Open XML 1.0。在Open XML 2.0中打開一個microsoft .xml文件並添加可變數據

我可以將.dotx文件轉換爲MS Word中的.xml文件,然後使用C#和Open XML API加載該.xml文件並嵌入從數據庫中提取的變量數據?每次運行報表時,動態地在代碼中構造一個EXISTING .xml文件(即30頁的報表)似乎非常瘋狂。我錯過了什麼嗎?

如果有人已經成功地完成了這個工作,並且使用C#代碼的例子會非常有幫助。 謝謝, Emily

+0

是什麼讓你覺得它不支持MS詞的應用程序工作? – 2011-01-14 20:05:19

回答

2

你可以嘗試一個非常簡單的查找/替換方法。

  1. 創建模板作爲一個.docx文件並保存在服務器
  2. 更改所有郵件合併,方便領域發現和解析不會出現詮釋他的正常文件佔位符和不會對需要XML編碼。例如:{{FirstName}}
  3. 創建一個新的空白.DOCX(ZIP)文件要生成
  4. 從模板中讀取每個文件.docx文件
  5. 當你閱讀源文件,搜索和替換您的令牌,因爲每個文件適當
  6. 將文件發送到客戶端

我還沒有和WordML中工作自己,所以我不知道是否有會阻止從以上工作陷阱,但根據我的Open XML和使用的認識SpreadsheetML,它應該工作。

使用OpenXML比Office Interop更復雜。 Office Interop API非常接近Office UI,因此非常熟悉並且更易於使用。 Open XML API對於核心XML來說是一個非常輕的包裝,並且與直接處理XML幾乎完全相同。沒有完全相同的自動熟悉程度,它會更復雜。

但是,OpenXML是更好的辦公室互操作。 Office interop有永遠不會已安全服務器使用。想想這是擺脫你的老式定時炸彈的好時機。