А, понятно.
Тогда последовательность действий такая:
С помощью .drawing.BitmapTable вставляешь изображение из внешнего файла в документ - при этом изображение нигде не отображается, просто в теле документа в папке \Pictures создается копия картинки с каким-то диковатым именем типа 10000000000000DC000000B508F56592.bmp. Тебе об этом заботиться не надо, офис сам включает все нужные механизмы - графические фильтры, доступ к файлу и его чтение, создание нового имени для внедренного изображения и всё такое... В бэйсике это может выглядеть приблизительно так:
REM Внедрить графическое изображение в тело документа
REM (Загрузить рисунок из файла в текущий документ)
REM Возвращает строку - новый URL изображения
Function LoadGraphicIntoDocument(oDoc As Variant, path As String, fileName As String) As String
Dim oBitmaps As Object
oBitmaps = oDoc.createInstance( "com.sun.star.drawing.BitmapTable" )
If Not oBitmaps.hasByName(fileName) Then oBitmaps.insertByName(fileName, ConvertToURL (path & fileName))
LoadGraphicIntoDocument = oBitmaps.getByName( fileName )
End Function
В результате получим строку - ссылку на внутренний файл. Это будет что-то вроде "vnd.sun.star.GraphicObject:1000000000000064000000648E59A0AB"
А уже потом, когда картинка стала частью документа, создаёшь экземпляр изображения ,text.GraphicObject, в качестве его свойства GraphicURL указываешь внутренний URL картинки, задаешь другие нужные параметры (высота, ширина, привязку и т.п.), находишь в тексте документа подходящее место (например, текст в ячейке таблицы), тычешь в него курсором и выполняешь insertTextContent.
Как-то так:
Sub insPictToB2
Dim oDoc As Variant
Dim oTextTable As Variant
Dim oCellByName As Variant
Dim oText As Variant
Dim oCursor As Variant
Dim oImage As Variant
Dim s As String
oDoc = ThisComponent
s = LoadGraphicIntoDocument(oDoc, "D:\Test\", "temp_picture.bmp")
oImage = oDoc.createInstance("com.sun.star.text.GraphicObject")
With oImage
.GraphicURL = s
.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
.Width = 4000
.Height = 3000
End With
REM И вставляем этот графический объект в ячейку таблицы
oTextTable = oDoc.getTextTables().getByIndex(0)
oCellByName = oTextTable.getCellByName("B2")
oText = oCellByName.getText()
oCursor = oText.createTextCursor()
oCursor.goToEnd(FALSE) ' Перепрыгнуть в конец уже имеющегося в ячейке текста
oText.insertTextContent( oCursor, oImage, False )
End Sub
Имея этот URL можешь отобразить одну и ту же картинку в разных местах документа много раз, с самыми разными размерами, но само изображение будет храниться внутри документа одно.
В варианте "не всасывать" почти всё то же самое, но без предварительного внедрения картинки в документ - просто для GraphicObject укажешь
.GraphicURL = ConvertToURL("Диск:\Путь\Имя.расширение")
и офис создаст связь с файлом на диске (можно посмотреть в Правка-Связи). Хотя внешне картинки ничем отличаться не будут