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")

如果另一张纸上有“狐狸”和“狗”

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...