首页 文章

如何将嵌入的图片从Excel保存/复制到Word

提问于
浏览
4

What I have :一个Excel文件,在一个列中(实际上它是自由格式化但在一列中对齐)一些元素嵌入了bmp图片,当你点击它们时显示公式 =EMBED("Paint.Picture","") . 查看Excel工作表时,仅显示代表图片的图标,而不是图片本身 .

What I want :复制到新Word文档的嵌入图片(不是图标) .

The Code I have thus far

'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

What happens when I run my code :我的代码遍历列中边界内的所有"shapes"以及对象图片的副本 . 但是,当我将其粘贴到word中时,它实际上是链接图像(图标)的副本,而不是底层的嵌入图像 .

What I've found thus farThis code向我展示了如何创建嵌入对象,而不是如何复制嵌入对象 .

2 回答

  • 1

    更新:更简单的解决方案

    正如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
    

    旧解决方案

    我找到了一个次优的解决方案,涉及剪贴板和SendKeys - 受this link的启发 . 我相信你可以通过探索提取 OLEObject 属性的方法来更优雅地做到这一点 . 在撰写本文时,提取这些内容超出了我的专业范围:-)

    它围绕着 OLEObject . 此代码执行图片的OLE object's host application(在本例中为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
    
  • 0

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

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

    因为您要为单元格范围定义NAME,所以即使单元格移动,链接也将保持活动状态 .

    我想知道你是否使用“定义名称”作为你的细胞范围,包括你想要嵌入的图片,你会有运气 .

    如果您已经定义了单元格范围的名称并尝试了这个,我很抱歉 .

相关问题