Python - LibreOffice Calc - 使用正则表达式查找和替换

Posted

技术标签:

【中文标题】Python - LibreOffice Calc - 使用正则表达式查找和替换【英文标题】:Python - LibreOffice Calc - Find & Replace with Regular Expression 【发布时间】:2016-07-15 07:40:18 【问题描述】:

我尝试在 LibreOffice 的 Calc 中使用 Python 编写查找和替换方法,以将所有“.+”替换为“&”(在单个列中 - 不那么重要) - 不幸的是,即使是标准的查找和替换方法似乎不可能(对我来说)。这就是我现在所拥有的:

import uno
def search()
    desktop = XSCRIPTCONTEXT.getDesktop()
    document = XSCRIPTCONTEXT.getDocument()
    ctx = uno.getComponentContext()
    sm = ctx.ServiceManager
    dispatcher = sm.createInstanceWithContext("com.sun.star.frame.DispatchHelper", ctx)
    model = desktop.getCurrentComponent()
    doc = model.getCurrentController()
    sheet = model.Sheets.getByIndex(0)

    replace = sheet.createReplaceDescriptor()
    replace.SearchRegularExpression = True
    replace.SearchString = ".+$"
    replace.ReplaceString ="&"
    return None

然后会发生什么:完全没有!我会很高兴并感谢每一个提示、示例代码和激励词!

【问题讨论】:

【参考方案1】:

此代码将 A 列中的所有非空单元格更改为 &

def calc_search_and_replace():
    desktop = XSCRIPTCONTEXT.getDesktop()
    model = desktop.getCurrentComponent()
    sheet = model.Sheets.getByIndex(0)
    COLUMN_A = 0
    cellRange = sheet.getCellRangeByPosition(COLUMN_A, 0, COLUMN_A, 65536);
    replace = cellRange.createReplaceDescriptor()
    replace.SearchRegularExpression = True
    replace.SearchString = r".+$"
    replace.ReplaceString = r"\&"
    cellRange.replaceAll(replace)

请注意,代码调用replaceAll 来实际执行某些操作。另外,来自User Guide:

& 将插入使用 Search RegExp 找到的相同字符串。

所以替换字符串需要是文字——\&

【讨论】:

我对您的代码做了一些微小的更改,但总的来说效果很好。非常感谢!

以上是关于Python - LibreOffice Calc - 使用正则表达式查找和替换的主要内容,如果未能解决你的问题,请参考以下文章

Python - LibreOffice Calc - 使用正则表达式查找和替换

LibreOffice Calc 上的 Python UNO,重新定位光标

在 Python 中定义一个 LibreOffice Calc 自定义函数

如何在 libreoffice calc 中编写 python 宏来发送和接收数据

如何从命令行 Python 脚本将所有工作表保存在 LibreOffice Calc 电子表格中

如何在 libreoffice calc 中编写 python 宏以在插入外部数据时处理合并的单元格