2009年10月26日 星期一

Word 套表之2

之前有發表第一種Word套表方式其實蠻簡單的,單機也很好用。
但要放到Web Server讓ASP呼叫,那可就一點都不好玩了。
找了一天資料後,決定還是用Word 2007 OPEN XML格式文件來解決我的問題。
至於使用者沒有Office 2007怎麼辦?那就在網頁加個連結,讓User 下載相容套件囉。

首先,先了解一下Word OPEN XML格式,在這版本中,Word其實是由一些XML壓縮起來的檔案,所以.docx檔案可以用壓縮軟體(如7-zip)解壓縮,就可以看到構成word檔的那些XML。

一個基本的.docx包含了4個目錄,而這裡面最重要的,就是word目錄。因為主要文件檔就是word\document.xml。一些簡單的文字取代,我就在範本中先加入特定字串,然後使用XMLDocument尋找這些字串,然後取代。
但Image就不能這樣做了,在word中加入Image,在.docx內的動作其實分為下面幾個步驟:
  1. 複製圖片到 word\media\
  2. [Content_Types].xml 增加ContentType
  3. 在word\_rel\document.xml.rels 增加ImagePart
  4. 在主要的word\document.xml 增加與ImagePart ID對應的XML
前面三個步驟其實很簡單,只要幾行指令:

ImagePart part = m_Document.MainDocumentPart.AddImagePart(ImagePartType.Jpeg);

using (FileStream stream = new FileStream(imageFile, FileMode.Open))
{
part.FeedData(stream);
}
但第四個步驟可就困擾我很久了...
因為我看到的範例,幾乎都是先建立一個XML檔或資源檔,裡面存放Image的XML,要插入這個片段時,再把關鍵字取代(如圖片寬、高,還有最重要的ImagePart ID...)。接著把這個片段插入指定的段落中。難就難在範例都沒寫到怎麼把特定位置的XML Node找出來...最後雖然有解決了,但我還是決定不用這方法了。若有興趣,可參考http://openxmldeveloper.org/forums/post/7189.aspx
因為我的圖片是要放到Word表格某個cell,所以最後我還是決定參考http://msdn.microsoft.com/en-us/library/ee342530.aspxhttp://msdn.microsoft.com/en-us/library/cc850835%28office.14%29.aspx這2篇文章。
使用Open XML Format SDK 2.0 來解決我的問題。 而且,用這種方式要修改Table或段落的格式也方便多了。

沒有留言:

張貼留言