summaryrefslogtreecommitdiff
path: root/wizards
diff options
context:
space:
mode:
authorJean-Pierre Ledure <jp@ledure.be>2021-11-04 15:42:16 +0100
committerJean-Pierre Ledure <jp@ledure.be>2021-11-04 16:57:37 +0100
commit393d8629be64fc01271fd746938bb822020f64b9 (patch)
tree41fcf2357dab739a6492d77146117823ca17df67 /wizards
parenta04d60ca5af1b794c190fa9d5a0fb7506755f27d (diff)
ScriptForge - (SF_Calc) _ParseAddress() reuse last parsed address
Implementation to improve performance of a simple cache of the last already parsed range. The address is reused when the sheet name is explicit and that the range to parse, as a string, is identical to the previous parsing request. Change-Id: I0137689e9697686e76e07e037129983baba6ecfb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124711 Tested-by: Jean-Pierre Ledure <jp@ledure.be> Tested-by: Jenkins Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Diffstat (limited to 'wizards')
-rw-r--r--wizards/source/sfdocuments/SF_Base.xba2
-rw-r--r--wizards/source/sfdocuments/SF_Calc.xba24
2 files changed, 22 insertions, 4 deletions
diff --git a/wizards/source/sfdocuments/SF_Base.xba b/wizards/source/sfdocuments/SF_Base.xba
index ae2a23e9f0d3..efdc57be9b4d 100644
--- a/wizards/source/sfdocuments/SF_Base.xba
+++ b/wizards/source/sfdocuments/SF_Base.xba
@@ -604,8 +604,6 @@ Public Function SetPrinter(Optional ByVal FormDocument As Variant _
&apos;&apos;&apos; PaperFormat: one of next values
&apos;&apos;&apos; &quot;A3&quot;, &quot;A4&quot;, &quot;A5&quot;, &quot;B4&quot;, &quot;B5&quot;, &quot;LETTER&quot;, &quot;LEGAL&quot;, &quot;TABLOID&quot;
&apos;&apos;&apos; Left unchanged when absent
-&apos;&apos;&apos; _PrintComponent: undocumented argument to determine the component
-&apos;&apos;&apos; Useful typically to apply printer settings on a Base form document
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; True when successful
&apos;&apos;&apos; Examples:
diff --git a/wizards/source/sfdocuments/SF_Calc.xba b/wizards/source/sfdocuments/SF_Calc.xba
index 38ef4e843cef..96dd08d5562c 100644
--- a/wizards/source/sfdocuments/SF_Calc.xba
+++ b/wizards/source/sfdocuments/SF_Calc.xba
@@ -111,6 +111,8 @@ Type _Address
XCellRange As Object &apos; com.sun.star.table.XCellRange
End Type
+Private _LastParsedAddress As Object &apos; _Address type - parsed ranges are cached
+
REM ============================================================ MODULE CONSTANTS
Private Const cstSHEET = 1
@@ -135,6 +137,7 @@ Private Sub Class_Initialize()
ObjectType = &quot;CALC&quot;
ServiceName = &quot;SFDocuments.Calc&quot;
Set _Component = Nothing
+ Set _LastParsedAddress = Nothing
End Sub &apos; SFDocuments.SF_Calc Constructor
REM -----------------------------------------------------------------------------
@@ -3379,7 +3382,7 @@ Private Function _ParseAddress(ByVal psAddress As String) As Object
&apos;&apos;&apos; Exceptions:
&apos;&apos;&apos; CALCADDRESSERROR &apos; Address could not be parsed to a valid address
-Dim oAddress As _Address &apos; Return value
+Dim oAddress As Object &apos; Return value
Dim lStart As Long &apos; Position of found regex
Dim sSheet As String &apos; Sheet component
Dim sRange As String &apos; Range component
@@ -3389,6 +3392,20 @@ Dim oRangeAddress As Object &apos; Alias for rangeaddress
Dim vLastCell As Variant &apos; Result of _LastCell() method
Dim oSelect As Object &apos; Current selection
+ &apos; If psAddress has already been parsed, get the result back
+ If Not IsNull(_LastParsedAddress) Then
+ &apos; Given argument must contain an explicit reference to a sheet
+ If (InStr(psAddress, &quot;~.&quot;) = 0 And InStr(psAddress, &quot;.&quot;) &gt; 0 And psAddress = _LastParsedAddress.RawAddress) _
+ Or psAddress = _LastParsedAddress.RangeName Then
+ Set _ParseAddress = _LastParsedAddress
+ Exit Function
+ Else
+ Set _LastParsedAddress = Nothing
+ End If
+ End If
+
+ &apos; Reinitialize a new _Address object
+ Set oAddress = New _Address
With oAddress
sSheet = &quot;&quot; : sRange = &quot;&quot;
.SheetName = &quot;&quot; : .RangeName = &quot;&quot;
@@ -3477,6 +3494,9 @@ Dim oSelect As Object &apos; Current selection
End With
+ &apos; Store last parsed address for reuse
+ Set _LastParsedAddress = oAddress
+
Finally:
Set _ParseAddress = oAddress
Exit Function
@@ -3736,4 +3756,4 @@ CatchDuplicate:
End Function &apos; SFDocuments.SF_Calc._ValidateSheet
REM ============================================ END OF SFDOCUMENTS.SF_CALC
-</script:module>
+</script:module> \ No newline at end of file