Open Office Spreadsheet (Calc) - 使用分隔符连接文本单元格
-
22-07-2019 - |
题
我正在使用 Open Office 的电子表格程序,并尝试将多个文本单元格与分隔符连接在一起。例如,假设我有以下单元格:
+--------+
| cell 1 |
+--------+
| cell 2 |
+--------+
| cell 3 |
+--------+
| cell 4 |
+--------+
| cell 5 |
+--------+
我想将它们与分隔符连接起来,以便结果位于一个单元格中,如下所示:
+----------------------------------------------+
| (cell 1),(cell 2),(cell 3),(cell 4),(cell 5) |
+----------------------------------------------+
我的第一个想法是尝试制作一个宏或其他东西,但我认为开放式办公室不支持这些。有任何想法吗?
解决方案 2
那么,经过了很多搜索和实验,我发现你可以让你自己的函数计算的。这是一个功能我做了做什么,我想:
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
其他提示
非常感谢马库斯找到了解决方案。
这里有一些稍微更详细的说明,以帮助像我这样的 OpenOffice Basic 新手。这适用于 3.1 版本:
工具 -> 宏 -> 组织宏 -> OpenOffice.org 基本...
现在从要启用功能的探险家树中进行选择,例如它可以位于您自己的宏库(我的宏 /标准)中,也可以直接存储在当前电子表格中。
现在输入新的宏名称并单击新建以打开 OO.org Basic IDE。您将看到一个REM语句和一些存根的子定义。删除所有这些,然后用以下方式替换它:
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
上面的代码比 Markus 的原始代码有一些细微的改进:
当范围中的第一个单元格为空时,不以分隔符开头。
允许选择定界符(默认为“”,“”),以及该范围内每个非空头条目之前和之后的字符串(默认为“”)。
我将其重命名为STR Join,因为“ Join”是几种流行语言的典型名称,例如Perl,Python和Ruby。
变量全部小写
现在保存宏,转到您要加入的单元格,然后键入:
=STRJOIN(C3:C50)
将 C3:C50 替换为您要连接的字符串范围。
要自定义分隔符,请使用以下内容:
=STRJOIN(C3:C50; " / ")
如果您想加入一堆电子邮件地址,您可以使用:
=STRJOIN(C3:C50; ", "; "<"; ">")
结果会是这样的
<foo@bar.com>, <baz@qux.org>, <another@email.address>, <and@so.on>
自从所以常常我会喜欢更换及计算期权的易用性和速度,以及一般的快速处理和修改选项,当再次坐在倾倒,文件列表或任何的前面。
我永远无法理解他们为什么不包括从一开始就这样的基本功能,真的。
它是基于亚当的脚本,但扩展到从水平到垂直交换CONCAT
,同时仍保持在分隔符顺序。
Function CONCAT2D(Optional range, Optional delx As String, Optional dely As String, _
Optional xcell As String, Optional cellx As String, _
Optional swop As Integer)
Dim xy(1), xyi(1), s(1) As Integer
Dim out, cell, del, dxy(1) As String
'ReDim range(2, 1) 'Gen.RandomMatrix 4 Debugging
'For i = LBound(range, 1) To UBound(range, 1)
' For j = LBound(range, 2) To UBound(range, 2)
' Randomize
' range(i,j) = Int((100 * Rnd) )
' Next
'Next
out = ""
If IsMissing(delx) Then : delx = "," : End If
If IsMissing(dely) Then : dely = delx() : End If
If IsMissing(xcell) Then : xcell = "" : End If
If IsMissing(cellx) Then : cellx = xcell() : End If
If IsMissing(swop) Then : swop = 0 : End If
dxy(0) = delx() : dxy(1) = dely()
xyi(0) = 1 : xyi(1) = 2
If swop = 0 Then : s(0) = 0 : s(1) = 1
Else s(0) = 1 : s(1) = 0 : End If
If NOT IsMissing(range) Then
If NOT IsArray(range) _
Then : out = xcell & range & cellx
Else del = delx
For xy(s(0)) = LBound(range, xyi(s(0))) To UBound(range, xyi(s(0))
For xy(s(1)) = LBound(range, xyi(s(1))) To UBound(range, xyi(s(1))
cell = range(xy(0), xy(1))
If cell <> 0 AND Len(Trim(cell)) <> 0 _
Then : If out <> "" Then : out = out & del : End If
out = out & xcell & cell & cellx
del = dxy(s(0))
End If
Next : del = dxy(s(1))
Next
End If
Else out = "ERR"
End If
CONCAT2D = out
End Function