OpenOffice中的这个"time-updating function"有什么问题?



我正在使用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 方法首先获取列,然后获取行。

相关内容

最新更新