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

134 lines
3.8 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 CreateRow(table, row_count):
"""
创建表格行
"""
table.getRows().insertByIndex(table.getRows().getCount(), row_count)
def InsertRow(location_bookmark_name, data):
"""
表格插入行
Args:
location_bookmark: 用于定位表格的书签
data: 二维数组,用于填充表格数据
"""
bookmark_info = QueryAll()
table_bookmarks = bookmark_info["table"]
handle_table_index = -1
for table_info in table_bookmarks:
table_bookmark_names = table_info["bookmark"]
if location_bookmark_name in table_bookmark_names:
handle_table_index = table_info["tableIndex"]
if handle_table_index == -1:
return
doc = XSCRIPTCONTEXT.getDocument()
tables = doc.getTextTables()
handle_table = tables.getByIndex(handle_table_index)
col_count = handle_table.getColumns().getCount()
row_count = handle_table.getRows().getCount()
if data.len > 0 & data[0].len == col_count:
CreateRow(handle_table, data.len)
for row in range(data.len + 1, row_count + 1):
for col in range(col_count):
cell = handle_table.getCellByPosition(col, row)
cell.setString(data[row][col])
def DebugCall():
"""
调试调用
"""
InsertRow("h1", [["1", "2", "3"], ["4", "5", "6"]])
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 = (InsertRow,DebugCall,)