最近想从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的调用:

 
  
  1. foreach (Word.InlineShape myinlineshape in oWordDoc.InlineShapes) 
  2.     if (myinlineshape.Type == Word.WdInlineShapeType.wdInlineShapeLinkedPicture || myinlineshape.Type == Word.WdInlineShapeType.wdInlineShapePicture) 
  3.     { 
  4.         myinlineshape.Select(); 
  5.         oWordApp.Selection.CopyAsPicture(); 
  6.         dal.PastePicture(myinlineshape); 
  7.     } 

Excel:

 
  
  1. public void PastePicture(Microsoft.Office.Interop.Word.InlineShape inlineShape) 
  2.     Range range = (mySheet.Cells[1, 1] as Range); 
  3.     range.Select(); 
  4.     mySheet.PasteSpecial(inlineShape.Type, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 

 

执行后,若出现图片大小不匹配问题,可以尝试调整PasteSpecial最后一个参数为true尝试。参数类型:

 
  
  1. public virtual void PasteSpecial ( 
  2.     [OptionalAttribute] Object Format, 
  3.     [OptionalAttribute] Object Link, 
  4.     [OptionalAttribute] Object DisplayAsIcon, 
  5.     [OptionalAttribute] Object IconFileName, 
  6.     [OptionalAttribute] Object IconIndex, 
  7.     [OptionalAttribute] Object IconLabel, 
  8.     [OptionalAttribute] Object NoHTMLFormatting 

注意:

当前只试了wdInlineShapeLinkedPicture和wdInlineShapePicture两个类型,碰到其他类型或非InlineShape时候,若使用Paste不会出错,还是Paste会比较合适。