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
相关产品推荐
相关产品推荐

