如何将embedded的图片从Excel中保存/复制到Word

我有什么 :一个Excel文件在一列(实际上它是自由格式化,但alignment在列内)一些元素是embedded的bmp图片,显示公式=EMBED("Paint.Picture","")当你点击在他们。 当您查看Excel工作表时,只显示代表图片的图标,而不显示图片本身

我想要的 :embedded的图片(不是图标)复制到一个新的Word文档。

我到目前为止的守则是

 'Image Objects Dim myObjs As Shapes Dim myObj As Shape Set myObjs = ActiveSheet.Shapes 'Traversing objects Dim row As Integer Dim myRange As Range Dim myRange2 As Range Dim isAddressMatch As Boolean 'Word Document Objects Dim wordApp As New Word.Application Dim myWord As Word.Document 'Prepare word for output Set myWord = wordApp.Documents.Add wordApp.Visible = True 'Initalize traversing objectts Set myRange = Sheets("myWorksheet").Range("Q5") Set myRange2 = Sheets("myWorksheet").Range("E5") row = 0 'Loop through range values in the desired column While (myRange2.Offset(row).Value <> "") 'Loop through all shape objects until address match is found. For Each myObj In myObjs On Error Resume Next isAddressMatch = (myObj.TopLeftCell.Address = myRange.Offset(row).Address) If Err.Number <> 0 Then isAddressMatch = False On Error GoTo 0 End If 'When match is found copy the bmp picture from Excel to Word If (isAddressMatch) Then myObj.Select ''''''''This copies the excel default picture,''''''''''''''' ''''''''not the picture that is embeded.''''''''''''''''''''' myObj.CopyPicture 'What is the correct way to copy myObj myWord.Range.Paste 'Rest of the code not yet implement End If Next row = row + 1 Wend 

当我运行我的代码时会发生什么 :我的代码遍历列的范围内的所有“形状”并复制该对象的图片。 但是,当我将其粘贴到单词中时,它实际上制作了链接图像(图标)的副本,而不是底层的embedded图像。

我到目前为止发现的 : 这个代码向我展示了如何创build一个embedded对象,而不是如何复制embedded对象。

更新:更简单的解决scheme

正如jspek的注释中所指定的那样,图像实际上可以通过使用OLEObjectCopy方法来复制,例如:

 Dim obj As OLEObject Set obj = ActiveSheet.OLEObjects(myObj.Name) 'Copy the OLE object representing a picture. obj.Copy 'Paste the picture in Word. myWord.Range.Paste 

旧解决scheme

我发现一个不理想的解决scheme,涉及剪贴板和SendKeys – 受此链接的启发。 我深信你可以通过探索提取OLEObject属性的方式来更优雅地做到这一点。 提取这些超出了我在这个时候的专业知识范围:-)

它围绕着OLEObject 。 此代码执行图片的OLE对象的主机应用程序 (在这种情况下是Paint),发送键复制图片,最后将其粘贴到Word中。

 'Get the OLE object matching the shape name. Dim obj As OLEObject Set obj = ActiveSheet.OLEObjects(myObj.Name) 'Activate the OLE host application. obj.Activate 'Send CTRL+A to select the picture in Paint and CTRL+C to copy it. Application.SendKeys "^a" Application.SendKeys "^c" 'Paste the picture in Word. myWord.Range.Paste 

我不是一个编码器,但是我发现如果你为一个单元格范围“定义名字”,你可以用定义的名字做各种各样的事情。 例如:

将Excel工作簿行链接到Word文档1.打开Excel工作簿,转到“公式” – >“定义名称”。2.为要链接的每个单元格或单元格组创build一个“NAME”。 例如,我将Word文档中的问题#超链接到我的Excel文档中,该文档用于将问题导入到我们的学习pipe理系统中。 示例NAME = Question_22并引用单元格范围= WBT16DS058!$ A $ 90(=工作表!单元格范围)3.保存并closuresExcel工作簿。 4.打开Word文档并创build您的文本(问题022),突出显示并插入超链接。 5.浏览并select您的Excel文档,追加地址末尾以包含#NAME。 (即 – R312Test.xlsx#Question_22)。 6.select新的链接,您的Excel文档将打开到单元格区域。

因为您正在为单元格范围定义一个名称,所以即使单元格移动,链接也会保持活动状态。

我想知道如果您使用“定义名称”为您的单元格范围,包括您要embedded的图片,您将有运气。

我很抱歉,如果你已经定义了单元格区域的名称,并试过这个。