You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用VB.Net向Libre Office Writer表格单元格插入JPG图片?

VB.Net 向 LibreOffice Writer 表格单元格插入JPG的实现代码

以下是基于LibreOffice SDK(NuGet安装)、适配Visual Studio 2022和LibreOffice 7.4的VB.Net代码,可实现将JPG插入指定表格单元格,支持调整大小、居中显示并嵌入文档(避免外部图片依赖):

Imports unoidl.com.sun.star.beans
Imports unoidl.com.sun.star.container
Imports unoidl.com.sun.star.drawing
Imports unoidl.com.sun.star.frame
Imports unoidl.com.sun.star.lang
Imports unoidl.com.sun.star.text
Imports unoidl.com.sun.star.uno
Imports unoidl.com.sun.star.util

Module LibreOfficeWriterImageInsert
    Sub InsertImageIntoTableCell()
        ' 初始化LibreOffice服务管理器
        Dim oSMF As XMultiServiceFactory = DirectCast(
            Bootstrap.bootstrap(), XMultiServiceFactory)
        Dim oDesktop As XDesktop = DirectCast(
            oSMF.createInstance("com.sun.star.frame.Desktop"), XDesktop)

        ' 创建新Writer文档
        Dim oDoc As XComponent = oDesktop.loadComponentFromURL(
            "private:factory/swriter", "_blank", 0, New PropertyValue() {})
        Dim oTextDoc As XTextDocument = DirectCast(oDoc, XTextDocument)
        Dim oText As XText = oTextDoc.getText()
        Dim oCursor As XTextCursor = oText.createTextCursor()

        ' 创建2行2列的表格
        Dim oTable As XTextTable = DirectCast(
            oSMF.createInstance("com.sun.star.text.TextTable"), XTextTable)
        oTable.initialize(2, 2)
        oText.insertTextContent(oCursor, oTable, False)

        ' 获取目标单元格(此处取第1行第2列,索引从0开始)
        Dim oCell As XTextContent = DirectCast(
            oTable.getCellByName("A2"), XTextContent)
        Dim oCellText As XText = DirectCast(oCell, XText)
        Dim oCellCursor As XTextCursor = oCellText.createTextCursor()

        ' 准备图片路径(替换为你的JPG绝对路径)
        Dim imagePath As String = "file:///C:/YourImagePath/your_image.jpg"

        ' 创建图形对象
        Dim oGraphic As XGraphic = DirectCast(
            oSMF.createInstance("com.sun.star.graphic.GraphicProvider"), XGraphicProvider) _
            .queryGraphic(New PropertyValue() {
                New PropertyValue With {.Name = "URL", .Value = New Any(imagePath)}
            })

        ' 创建文本框容器用于承载图片
        Dim oTextFrame As XTextFrame = DirectCast(
            oSMF.createInstance("com.sun.star.text.TextFrame"), XTextFrame)
        Dim frameProps(3) As PropertyValue
        ' 设置文本框大小(可根据需求调整)
        frameProps(0) = New PropertyValue With {.Name = "Width", .Value = New Any(2000)} ' 2000 twips ≈ 1.39英寸
        frameProps(1) = New PropertyValue With {.Name = "Height", .Value = New Any(1500)}
        ' 设置文本框在单元格内居中对齐
        frameProps(2) = New PropertyValue With {.Name = "HoriOrient", .Value = New Any(TextContentHorizontalAlignment.CENTER)}
        frameProps(3) = New PropertyValue With {.Name = "VertOrient", .Value = New Any(TextContentVerticalAlignment.CENTER)}
        oTextFrame.setProperties(frameProps)

        ' 将图片嵌入文本框
        Dim oShape As XShape = DirectCast(oTextFrame, XShape)
        Dim oGraphicShape As XGraphicObject = DirectCast(oShape, XGraphicObject)
        oGraphicShape.Graphic = oGraphic

        ' 将文本框插入单元格
        oCellText.insertTextContent(oCellCursor, oTextFrame, False)

        ' 可选:设置图片为嵌入模式,避免依赖外部文件
        Dim oEmbeddedObj As XEmbeddedObject = DirectCast(oGraphic, XEmbeddedObject)
        If oEmbeddedObj IsNot Nothing Then
            oEmbeddedObj.setPersistent(True)
        End If
    End Sub
End Module

关键说明:

  • 确保已通过NuGet安装LibreOfficeSDK包,项目引用对应的程序集
  • 替换代码中的imagePath为你的JPG文件绝对路径(注意格式为file:///开头的URL格式)
  • 调整Width和Height的值来控制图片显示大小(单位为twips,1英寸=1440 twips)
  • 代码中通过设置HoriOrient和VertOrient实现图片在单元格内的居中对齐
  • 启用setPersistent(True)可将图片嵌入文档,避免后续打开时找不到外部图片

内容的提问来源于stack exchange,提问作者Pete Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:26:29