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

如何修改LibreOffice Python宏仅获取选中区域内的公式代码?

解决LibreOffice Writer宏仅输出选中区域内公式代码的问题

修改后的代码

import uno
from com.sun.star.container import XIndexAccess
from com.sun.star.drawing import ShapeType

def explore_objects_in_selection():
    doc = XSCRIPTCONTEXT.getDocument()
    selection = doc.getCurrentSelection()
    
    # 把选中对象转换成可遍历的集合
    if not isinstance(selection, XIndexAccess):
        # 单个选中对象包装成数组
        selection = uno.Any("[]com.sun.star.uno.XInterface", [selection])
    
    # 先处理直接选中的公式形状
    for i in range(selection.getCount()):
        obj = selection.getByIndex(i)
        # 检查是不是公式所在的框架形状
        if hasattr(obj, "getShapeType") and obj.getShapeType() == ShapeType.FRAME:
            embedded_obj = obj.getEmbeddedObject()
            if hasattr(embedded_obj, "Formula"):
                print(embedded_obj.Formula)
    
    # 再处理选中文本区域内的公式
    text_cursor = doc.getCurrentController().getViewCursor()
    # 选中区域非空时才处理
    if text_cursor.getText().getString().strip() != "":
        for draw_page in doc.getDrawPages():
            for shape in draw_page:
                if shape.getShapeType() == ShapeType.FRAME:
                    embedded_obj = shape.getEmbeddedObject()
                    if hasattr(embedded_obj, "Formula"):
                        # 获取公式在文本中的锚点范围
                        anchor_range = shape.getAnchor()
                        # 判断锚点是否落在选中的文本范围内
                        if anchor_range.compareRegionStart(text_cursor.getStart()) >= 0 and \
                           anchor_range.compareRegionEnd(text_cursor.getEnd()) <= 0:
                            print(embedded_obj.Formula)

修改要点

  1. 直接处理选中的公式:遍历选中集合里的每个对象,判断是否是公式的容器FrameShape,如果是则直接提取内部公式代码,对应直接选中公式的场景。
  2. 筛选文本区域内的公式:如果选中的是文本范围,通过公式的文本锚点判断它是否处于选中区域内。公式在Writer里是锚定到文本位置的,只要锚点落在选中的文本区间内,就认为是区域内的公式。

关键逻辑说明

  • getShapeType():确认形状是公式所在的框架类型。
  • getEmbeddedObject().Formula:获取Math公式的内部代码。
  • getAnchor()+范围比较:判断公式的锚点是否在选中的文本区域内,实现文本区域内公式的筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 19:12:32