我正在拦截richtextbox的paste事件,以便在粘贴之前处理内容。如果它包含表格或图像等,我需要做一些自定义的事情。如果复制的选择来自Word 2010,并且包含混合内容(例如,文本和表格/图像),则Word将内容以多种格式放置在剪贴板上。这些包括HTML和RTF,但我宁愿使用WordML。我已经使用ClipSpy来检查剪贴板上实际放置了哪些格式和数据,并且“嵌入源”格式似乎是包含WordML的格式。我认为这可以作为一个包打开:
var stream = Clipboard.GetData("Embed Source") as MemoryStream;
var package = Package.Open(stream);
它抛出一个EndOfStreamException,我认为它会被包裹在其他东西中。我可以将流写入磁盘并使用7-zip打开它,然后看内容是否如预期。
所以基本上有两个问题:
“嵌入源”是获取WordML的正确DataObject吗?
如果是,我如何反序列化?
最佳答案
将流保存到磁盘并与适当的docx进行二进制比较后,我发现它实际上包装在复合文档文件:http://www.openoffice.org/sc/compdocfileformat.pdf中。我用谷歌搜索了前几个字节
D0 CF 11 E0 A1 B1 1A E1
这是CDF格式的标识符。
可以使用OpenMCDF从化合物文件中提取软件包。
关于c# - 从剪贴板获取Word ML,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17406873/