如何解决libreoffice使用INDIRECT引用替换长文本内的引用
我很困惑如何在长文本中使用公式替换引用。例如:
A1: fox
A2: dog
A3: The quick brown REFA1 jumps over the lazy REFA2.
我想在A4中得到结果。我用INDIRECT尝试了REGEX,但这没用。
A4: =REGEX(A3 ;"REF([A-Z][:digit:]+)";INDIRECT("$1"); "g")
Libre在应用捕获的组之前执行INDIRECT并打印“ #REF!”。因为“ $ 1”不是合法参考。
P.S。 A3中的文本来自其他来源,我无法使用字符串连接对其进行预格式化。
解决方法
如果无法为此任务提供正确的公式,请使用宏:
Function RefSubstitute(sSourceText As String,sRefPrefix As String,Optional sSourceSheet As Variant) As String
Dim sTemp As Variant
Dim oSheet As Variant
Dim i As Long
Dim sAddress As String,sSubst As String
Dim FA As Variant,argSearch As Variant,argReplace As Variant
RefSubstitute = sSourceText
If IsMissing(sSourceSheet) Then
oSheet = ThisComponent.getCurrentController().getActiveSheet()
Else
If ThisComponent.getSheets().hasByName(sSourceSheet) Then
oSheet = ThisComponent.getSheets().getByName(sSourceSheet)
Else
RefSubstitute = "Wrong sheet name"
Exit Function
EndIf
EndIf
If InStr(sSourceText,sRefPrefix) = 0 Then
RefSubstitute = sSourceText
Exit Function
EndIf
FA = CreateUnoService("com.sun.star.sheet.FunctionAccess")
argSearch = Array("","^[A-Z][:digit:]+")
argReplace = Array("","^[A-Z][:digit:]+","")
sTemp = Split(sSourceText,sRefPrefix)
For i = LBound(sTemp)+1 To UBound(sTemp)
argSearch(0) = sTemp(i)
sAddress = FA.callFunction("REGEX",argSearch)
sSubst = ""
On Error Resume Next
sSubst = oSheet. getCellRangeByName(sAddress).getCellByPosition(0,0).getString()
On Error GoTo 0
argReplace(0) = sTemp(i)
argReplace(2) = sSubst
sTemp(i) = FA.callFunction("REGEX",argReplace)
Next i
RefSubstitute = Join(sTemp,"")
End Function
喜欢这样
=REFSUBSTITUTE(A3 ;"REF")
如果所有链接都指向当前工作表,或者
=REFSUBSTITUTE(A3 ;"REF";"Sheet2")
如果另一张纸上有“狐狸”和“狗”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。