打开Office电子表格(Calc) - 使用分隔符连接文本单元格

Mar*_*lly 13 openoffice.org concatenation spreadsheet

我正在使用Open Office的电子表格程序,并尝试将多个文本单元与分隔符连接在一起.例如,假设我有以下单元格:

+--------+
| cell 1 |
+--------+
| cell 2 |
+--------+
| cell 3 |
+--------+
| cell 4 |
+--------+
| cell 5 |
+--------+
Run Code Online (Sandbox Code Playgroud)

我想用分隔符连接它们,以便结果在这样的一个单元格中:

+----------------------------------------------+
| (cell 1),(cell 2),(cell 3),(cell 4),(cell 5) |
+----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是尝试制作宏或其他东西,但我不认为开放办公室支持那些.有任何想法吗?

Ada*_*ers 30

非常感谢Markus寻找解决方案.

以下是一些稍微详细的说明,以帮助像我这样的OpenOffice Basic新手.这适用于3.1版:

工具 - >宏 - >组织宏 - > OpenOffice.org Basic ...

现在从您希望功能存在的资源管理器树中进行选择,例如,它可以位于您自己的宏库(My Macros/Standard)中,也可以直接存储在当前的电子表格中.

现在输入一个新的宏名称,然后单击"新建"以打开OO.org Basic IDE.您将看到REM语句和一些存根Sub定义.删除所有内容并将其替换为:

Function STRJOIN(range, Optional delimiter As String, Optional before As String, Optional after As String)
    Dim row, col As Integer
    Dim result, cell As String

    result = ""

    If IsMissing(delimiter) Then
        delimiter = ","
    End If
    If IsMissing(before) Then
        before = ""
    End If
    If IsMissing(after) Then
        after = ""
    End If

    If NOT IsMissing(range) Then
        If NOT IsArray(range) Then
            result = before & range & after
        Else
            For row = LBound(range, 1) To UBound(range, 1)
                For col = LBound(range, 2) To UBound(range, 2)
                    cell = range(row, col)
                    If cell <> 0 AND Len(Trim(cell)) <> 0 Then
                        If result <> "" Then
                            result = result & delimiter
                        End If
                        result = result & before & range(row, col) & after
                    End If
                Next
            Next
        End If
    End If

    STRJOIN = result
End Function
Run Code Online (Sandbox Code Playgroud)

上面的代码与Markus的原始代码略有改进:

  • 当范围中的第一个单元格为空时,不以分隔符开头.

  • 允许选择分隔符(默认为","),以及在范围内的每个非空白条目之前和之后的字符串(默认为"").

  • 我将其重命名为STRJOIN,因为"join"是几种流行语言(如Perl,Python和Ruby)中此函数的典型名称.

  • 变量全部小写

现在保存宏,转到要显示联接的单元格,然后键入:

  =STRJOIN(C3:C50)
Run Code Online (Sandbox Code Playgroud)

将C3:C50替换为您想要加入的字符串范围.

要自定义分隔符,请使用以下内容:

  =STRJOIN(C3:C50; " / ")
Run Code Online (Sandbox Code Playgroud)

如果您想加入一堆电子邮件地址,可以使用:

  =STRJOIN(C3:C50; ", "; "<"; ">")
Run Code Online (Sandbox Code Playgroud)

结果会是这样的

<foo@bar.com>, <baz@qux.org>, <another@email.address>, <and@so.on>
Run Code Online (Sandbox Code Playgroud)

  • 哇这太可怕了.它应该是标准的开放式办公功能. (2认同)

Mar*_*lly 8

好吧,经过更多的搜索和实验,我发现你可以在calc中创建自己的函数.这是我做的功能,它可以做我想要的:

Function STRCONCAT(range)
    Dim Row, Col As Integer
    Dim Result As String
    Dim Temp As String

    Result = ""
    Temp = ""

    If NOT IsMissing(range) Then
        If NOT IsArray(range) Then
            Result = "(" & range & ")"
        Else
            For Row = LBound(range, 1) To UBound(range, 1)
                For Col = LBound(range, 2) To UBound(range, 2)
                    Temp = range(Row, Col)
                    Temp = Trim(Temp)
                    If range(Row, Col) <> 0 AND Len(Temp) <> 0 Then
                        If(NOT (Row = 1 AND Col = 1)) Then Result = Result & ", "
                        Result = Result & "(" & range(Row, Col) & ") "
                    End If
                Next
            Next
        End If
    End If

    STRCONCAT = Result
End Function
Run Code Online (Sandbox Code Playgroud)