最近想从Word文件提取多个图片,并粘帖到Excel时,总是无法粘帖成功,实际出现“Microsoft Office Excel cannot paste the data.”的提示。
c#和VB.net现象不尽相同,c#第一次就无法拷贝,但不关闭程序,重新执行命令,可以拷贝部分图片。但多次执行拷贝两者都会可能在半路出错,或者拷贝相同内容,甚是费解。
最初用的是 sheet.Paste(Missing.Value);
出错停止时,对实际Excel进行Ctrl+V即会出现 "Microsoft Office Excel cannot paste the data."。
此时,鼠标右键点击PasteSpecial,选择Word类型Picture,再粘帖是正常的。
因此,采用sheet.PasteSpecial方法即可达到目的。
Word的调用:
- foreach (Word.InlineShape myinlineshape in oWordDoc.InlineShapes)
- {
- if (myinlineshape.Type == Word.WdInlineShapeType.wdInlineShapeLinkedPicture || myinlineshape.Type == Word.WdInlineShapeType.wdInlineShapePicture)
- {
- myinlineshape.Select();
- oWordApp.Selection.CopyAsPicture();
- dal.PastePicture(myinlineshape);
- }
- }
Excel:
- public void PastePicture(Microsoft.Office.Interop.Word.InlineShape inlineShape)
- {
- Range range = (mySheet.Cells[1, 1] as Range);
- range.Select();
- mySheet.PasteSpecial(inlineShape.Type, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
- }
执行后,若出现图片大小不匹配问题,可以尝试调整PasteSpecial最后一个参数为true尝试。参数类型:
- public virtual void PasteSpecial (
- [OptionalAttribute] Object Format,
- [OptionalAttribute] Object Link,
- [OptionalAttribute] Object DisplayAsIcon,
- [OptionalAttribute] Object IconFileName,
- [OptionalAttribute] Object IconIndex,
- [OptionalAttribute] Object IconLabel,
- [OptionalAttribute] Object NoHTMLFormatting
- )
注意:
当前只试了wdInlineShapeLinkedPicture和wdInlineShapePicture两个类型,碰到其他类型或非InlineShape时候,若使用Paste不会出错,还是Paste会比较合适。
转载于:https://blog.51cto.com/116833/749686