libreoffice-python-script/BookmarkQuery.py
zzs c723f786c4 🎉
2025-03-20 18:05:11 +08:00

87 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

def QueryAll():
"""
查询所有书签表格中的书签获取对应表格index
返回结果格式:
{
"text": [],
"table": [
{
"tableIndex": 表格索引,
"bookmark": [书签名称列表]
}
]
}
"""
doc = XSCRIPTCONTEXT.getDocument()
bookmarks = doc.getBookmarks()
bookmark_names = bookmarks.getElementNames()
result = {
"text": [],
"table": []
}
tables = doc.getTextTables()
bookmark_in_table_position = QueryBookmarkPositionInTable(tables, bookmarks)
existing_table_indices = {}
for bk_name in bookmark_names:
if bk_name in bookmark_in_table_position:
table_index = bookmark_in_table_position[bk_name]["tableIndex"]
if table_index in existing_table_indices:
index = existing_table_indices[table_index]
result["table"][index]["bookmark"].append(bk_name)
else:
new_entry = {
"tableIndex": table_index,
"bookmark": [bk_name]
}
result["table"].append(new_entry)
existing_table_indices[table_index] = len(result["table"]) - 1 # 更新索引记录
else:
result["text"].append(bk_name)
return result
def QueryBookmarkPositionInTable(tables, bookmarks):
"""
查询书签在表格中的位置
{'bk1': {'tableIndex': 0, 'row': 0, 'col': 0}, 'bk2': {'tableIndex': 0, 'row': 0, 'col': 2}}
"""
bookmark_names = bookmarks.getElementNames()
bookmark_position = {}
for table_index in range(tables.getCount()):
table = tables.getByIndex(table_index)
col_count = table.getColumns().getCount()
row_count = table.getRows().getCount()
for row in range(row_count):
for col in range(col_count):
cell = table.getCellByPosition(col, row)
cell_text_obj = cell.getText()
for bk_name in bookmark_names:
bookmark_obj = bookmarks.getByName(bk_name)
bookmark_text_obj = bookmark_obj.getAnchor().getText()
if cell_text_obj == bookmark_text_obj:
bookmark_position[bk_name] = {
"tableIndex": table_index,
"col": col,
"row": row}
print(bookmark_position)
return bookmark_position
g_exportedScripts = (QueryAll,)