【发布时间】:2022-02-16 21:27:40
【问题描述】:
我需要知道表格中最后一行的编号才能处理它。所以,我用 Python 写了这个函数:
def find_last_cell(cursor):
cursor.gotoEnd()
last_cell = sheetCalc.getCellRangeByName(cursorCalc.AbsoluteName)
last_column = last_cell.CellAddress.Column
last_row = last_cell.CellAddress.Row
return last_column, last_row
我在我的“主要”函数中写了这个:
def calcula(oEvent):
column_1, row_1 = find_last_cell(cursorCalc)
write_Value(column_1, sheetCalc, 2, 28) #Just for debug
write_Value(row_1, sheetCalc, 2, 29) #Just for debug
#fill_qtd(row_1)
#fill_tension(row_1)
#fill_fp(row_1)
return 0
问题:
调试:
- 如果我转到文件>>刷新,当我再次按下按钮时会出现此错误:
com.sun.star.uno.RuntimeException:(在模块文件中调用函数计算时出错:///C:/Users/34471945882/AppData/Roaming/LibreOffice/4/user/Scripts/python/Calc_Inst.py (: 文件“C:\Program Files\LibreOffice\program\pythonscript.py”,第 915 行,在调用中 ret = self.func( *args ) 文件“C:\Users\34471945882\AppData\Roaming\LibreOffice\4\user\Scripts\python\Calc_Inst.py”,第 154 行,在 calcula column_1, row_1 = find_last_cell(cursorCalc) #Verifica a última célula ocupada 文件“C:\Users\34471945882\AppData\Roaming\LibreOffice\4\user\Scripts\python\Calc_Inst.py”,第 95 行,在 find_last_cell last_cell = sheetCalc.getCellRangeByName(cursorCalc.AbsoluteName) #Seleciona a última célula ))
- 如果我在我的 python 文件中进行任何修改(例如添加注释)并再次保存,它就可以工作。但是我需要对表中的每个修改都执行此操作,这对用户来说是不寻常的。
问题:如何纠正这种行为?我想随时使用按钮而不需要刷新或修改python文件?
LibreOffice 版本: 版本:7.2.5.2 (x64) / LibreOffice 社区 内部版本号:499f9727c189e6ef3471021d6132d4c694f357e5 CPU线程:4;操作系统:Windows 6.3 Build 9600; UI 渲染:Skia/Raster; VCL:赢 区域设置:pt-BR (pt_BR);用户界面:pt-BR 计算:CL
【问题讨论】:
-
cursorCalc.AbsoluteName- 你是说cursor.AbsoluteName吗?另外,cursorCalc是在哪里定义的?如果它是一个全局变量,那么这很可能是问题所在。 -
@JimK,是的,这一切都在我的 python 文件的开头定义:sheets = document.getSheets(); sheetCalc = sheet.getByName('Calculadora'); cursorCalc = sheetCalc.createCursor()。这是一个全局变量。但为什么会出现问题?
-
对,所以如果它是全局的,那么它不会得到改变的值。而是在
calcula()的开头初始化这些值,并去掉所有的全局变量。它们不是必需的。正如您已经发现的那样,当 python 文件被修改时,代码的初始部分只运行一次。这是声明常量而非变量的好地方。 -
谢谢@JimK,它正在工作!
标签: python libreoffice libreoffice-calc