как вставить изображение в документ Word из базы данных Access с помощью vba

avatar
yaser teymurzade
8 апреля 2018 в 05:27
972
0
0

Я пытаюсь прочитать изображение из поля вложения доступа, а затем вставить его в документ Word. Как показано в приведенном ниже коде, я мог бы прочитать вложение в файл, а затем вставить его в документ Word, но это неэффективно, и мне нужен способ сделать это напрямую. есть идеи?

Option Compare Database

Sub picloader()

    Dim appword As Word.Application
    Dim doc As Word.Document

    On Error Resume Next
    Err.Clear

    Set appword = GetObject(, "Word.Application")
    If Err.Number <> 0 Then
        Set appword = New Word.Application

    End If

    appword.Visible = True
    appword.Activate

    'word doc to save picture
    Set doc1 = appword.Documents.Open("D:\file1.docx")


    Dim db As Database
    Set db = CurrentDb

    Dim picpath As String
    Dim people As String
    Dim rspictures As Variant

    'Dim tmp As Variant

    picpath = "D:\file1.jpg"

    Dim rs As DAO.Recordset

    people = "select * from persons"
    Set rs = CurrentDb.OpenRecordset(people)

    If Not (rs.EOF And rs.BOF) Then
        rs.MoveFirst

        Set rspictures = rs.Fields("Picture").Value

           While Not rspictures.EOF
                rspictures.Fields("FileData").SaveToFile (picpath)

                rspictures.MoveNext
           Wend
    End If

    Dim wrdPic As Word.InlineShape

    Set wrdPic = doc1.Bookmarks("picture").Range.InlineShapes.AddPicture(picpath, LinkToFile:=False, SaveWithDocument:=True)

             wrdPic.ScaleHeight = 10
             wrdPic.ScaleWidth = 10


    Exit Sub
    errHandler:
    MsgBox Err.Number & ": " & Err.Description

    End Sub
Источник
Cindy Meister
8 апреля 2018 в 05:43
0

Единственный способ поместить изображение прямо в Word — это скопировать/вставить. Или вам нужно преобразовать изображение в памяти в Base 64, затем обернуть его в допустимый Word Open XML в формате плоского файла OPC и вставить его с помощью метода Range.InsertXML.

ashleedawg
8 апреля 2018 в 06:04
1

@yaser Вы говорите, что ваш код работает, но неэффективен? Что в нем неэффективного? В каком масштабе вы делаете это, что эффективность является проблемой?

Erik A
8 апреля 2018 в 07:13
1

На мой взгляд, этот вопрос слишком широк. Если вы используете вложения Access, это будет медленным. Access сжимает изображения и не предлагает встроенных функций для удаления этого сжатия без экспорта. Хотя идея Синди хороша, для ее реализации потребуется слишком много кода для ответа здесь.

Ответы (0)