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

OpenOffice/LibreOffice BASIC宏中如何将剪贴板内容赋值给数组变量

OpenOffice/LibreOffice Basic 剪贴板内容读取实现

现有草稿的核心问题:执行.uno:Copy仅会将选中文本推送到系统剪贴板,后续代码未主动读取剪贴板对象,反而直接绑定thisComponent.currentSelection(0)的文档引用,全程未和剪贴板对象交互,无法实现“将剪贴板内容存为独立变量”的目标。

实现思路

直接调用LibreOffice内置的剪贴板服务读取内容,获取独立的字符串副本后,再开展后续的去重、写文件操作,不需要依赖dispatcher的粘贴/复制调度逻辑。

分步操作

  • 初始化桌面级剪贴板服务,获取剪贴板对象实例
  • 读取剪贴板当前承载的可传输数据对象
  • 遍历剪贴板支持的内容格式,匹配纯文本类型
  • 将匹配到的文本流转换为字符串,赋值给独立变量

核心代码

' 初始化剪贴板服务
Dim oClipboard As Object
oClipboard = createUnoService("com.sun.star.datatransfer.DesktopClipboard")

' 获取剪贴板内的可传输内容对象
Dim oTransferable As Object
oTransferable = oClipboard.getContents()

' 匹配纯文本格式
Dim arrSupportedMime() As String, targetMime As String
arrSupportedMime = oTransferable.getTransferDataFlavors()
Dim hasPlainText As Boolean
hasPlainText = False
For Each mime In arrSupportedMime
    If InStr(LCase(mime), "text/plain") > 0 Then
        targetMime = mime
        hasPlainText = True
        Exit For
    End If
Next

' 赋值为独立的文本变量
Dim clipboardContent As String
If hasPlainText Then
    clipboardContent = oTransferable.getTransferData(targetMime)
End If

补充说明

  • 读取得到的clipboardContent是完全独立的字符串副本,后续剪贴板被其他程序修改、清空,都不会对这个变量造成影响
  • 无需依赖.uno:Copy的调度调用即可读取剪贴板内容;如果场景仅处理当前文档的选中词汇,甚至可以省略复制到剪贴板的步骤,直接读取选中文本的字符串属性做去重处理
  • 如果读取文本出现乱码,可在MIME匹配环节筛选对应字符集的纯文本格式条目即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 04:36:04