2013-07-01 83 views
3

我正在攔截pastetextbox的粘貼事件,以便在粘貼前處理內容。如果它包含表格或圖像等,我需要做一些自定義的東西。如果複製的選擇來自Word 2010並且由混合內容(例如文本和表格/圖像)組成,則Word會以多種格式將剪貼板上的內容放入剪貼板。這些包括HTML和RTF,但我寧願使用WordML。我使用ClipSpy檢查剪貼板上實際放置了哪些格式和數據,「Embed源」格式似乎是包含WordML的格式。我想這可能是開了一個包:從剪貼板獲取Word ML

var stream = Clipboard.GetData("Embed Source") as MemoryStream; 
var package = Package.Open(stream); 

它拋出一個EndOfStreamException,我想它migth被包裹在別的東西。我可以將流寫入磁盤並使用7-zip打開它,並看到內容如預期。 所以基本上有兩個問題: 是「Embed source」正確的DataObject獲取WordML嗎? 如果是這樣,我該如何反序列化它?

回答

1

將流保存到磁盤並與正確的docx進行二進制比較後,我發現它實際上已經包含在複合文檔文件中:http://www.openoffice.org/sc/compdocfileformat.pdf。我用google搜索了前幾個字節

D0 CF 11 E0 A1 B1 1A E1 

這是CDF格式的標識符。

可以使用OpenMCDF從複合文件中提取包。