我正在使用Calc(来自OpenOffice)进行工作。
我有一个电子表格,如下所示:
第一张图片
如果更新了列 F,则列 E 将使用当前编辑时间打印。
我为我的工作编写了这个宏:
Option VBASupport 1
Global oListener As Object
Global oScalcDocument As Object
Global oGroup6 as Object
Global CurRow as integer
Global GnameCO as String
Global Gcheck_name as Boolean
Sub RangeEventlistenerOn
CurRow = 0
oScalcDocument=ThisComponent
'---installation of an event listenr
oListener = createUnoListener("OOO_","com.sun.star.chart.XChartDataChangeEventListener")
oSheet = oScalcDocument.Sheets(0)
oSheet.Protect("")
oGroup6=oSheet.getColumns.getByIndex(5)
oGroup6.addChartDataChangeEventListener(oListener)
End Sub
Sub RangeEventlistenerOff
oGroup6.removeChartDataChangeEventListener(oListener)
End Sub
Sub OOO_chartDataChanged
CurRow = 2
'print(CurRow)
oScalcDocument=ThisComponent
oSheet = oScalcDocumet.Sheets(0)
'Get cell address
oSelection = oScalcDocument.getCurrentSelection
oRangeAddress = oSelection.getRangeAddress
CurRow = oRangeAddress.StartRow
oCell = oSheet.getCellByPosition(4,CurRow)
oCell.SetString(Format(Now,""DD.MM.YYYY hh:mm:ss"))
End Sub
Sub Refresh()
Refresh_data (Format(Date, "DD.MM.YYYY"))
MsgBox("Work finished")
Exit Sub
Exit Sub
End Sub
Sub Save()
Save_data(Format(Date, "DD.MM.YYYY"))
Exit Sub
End Sub
现在,我想将此电子表格更改为其他布局,如下所示:
第二张图片
如果更新了第 2 行,则将使用当前编辑时间打印第 3 行。
因此,我为我的工作更改了此宏:
Option VBASupport 1
Global oListener As Object
Global oScalcDocument As Object
Global oGroup6 as Object
Global CurCol as integer
Global GnameCO as String
Global Gcheck_name as Boolean
Sub RangeEventlistenerOn
CurCol = 0
oScalcDocument=ThisComponent
'---installation of an event listenr
oListener = createUnoListener("OOO_","com.sun.star.chart.XChartDataChangeEventListener")
oSheet = oScalcDocument.Sheets(0)
oSheet.Protect("")
oGroup6=oSheet.getRows.getByIndex(2)
oGroup6.addChartDataChangeEventListener(oListener)
End Sub
Sub RangeEventlistenerOff
oGroup6.removeChartDataChangeEventListener(oListener)
End Sub
Sub OOO_chartDataChanged
CurCol = 2
'print(CurCol)
oScalcDocument=ThisComponent
oSheet = oScalcDocumet.Sheets(0)
'Get cell address
oSelection = oScalcDocument.getCurrentSelection
oRangeAddress = oSelection.getRangeAddress
CurCol = oRangeAddress.StartColumn
oCell = oSheet.getCellByPosition(3,CurCol)
oCell.SetString(Format(Now,""DD.MM.YYYY hh:mm:ss"))
End Sub
Sub Refresh()
Refresh_data (Format(Date, "DD.MM.YYYY"))
MsgBox("Work finished")
Exit Sub
Exit Sub
End Sub
Sub Save()
Save_data(Format(Date, "DD.MM.YYYY"))
Exit Sub
End Sub
更新的代码无法正常工作。你能告诉我:变化有什么问题吗?
看起来有两种类型的问题。
oGroup6=oSheet.getRows.getByIndex(2)
这将获得第三行。正如 Lyrl 所解释的那样,它应该说索引 1。 将代码中的所有索引更改为从 0 开始(表示 0,1,2,3),而不是从 1 开始(表示 1,2,3,4)。
oCell = oSheet.getCellByPosition(3,CurCol)
getCellByPosition 方法首先获取列,然后获取行。