Frage

Ich bin mit Tabellenkalkulationsprogramm Open Office und ich versuche, mehrere Textzellen verketten zusammen mit Trennzeichen. Zum Beispiel nehme ich die Zellen unter:

+--------+
| cell 1 |
+--------+
| cell 2 |
+--------+
| cell 3 |
+--------+
| cell 4 |
+--------+
| cell 5 |
+--------+

Ich mag sie mit Trennzeichen verketten, so dass das Ergebnis in einer Zelle wie dieser ist:

+----------------------------------------------+
| (cell 1),(cell 2),(cell 3),(cell 4),(cell 5) |
+----------------------------------------------+

Mein erster Gedanke war, zu versuchen, einen Makro oder etwas zu machen, aber ich glaube nicht, Open Office diejenigen unterstützt. Irgendwelche Ideen?

War es hilfreich?

Lösung 2

Nun, nach viel mehr auf der Suche und Experimentieren, ich fand Sie Ihre eigenen Funktionen in Calc machen kann. Dies ist eine Funktion, die ich gemacht, dass das tut, was ich will:

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

Andere Tipps

Vielen Dank Markus für eine Lösung dieses Problems zu finden.

Hier sind einige etwas ausführlichere Anleitung zum Nutzen von Openoffice Basic-Neulinge wie mich. Dies gilt für Version 3.1:

Extras -> Makros -> Makros -> OpenOffice.org Basic ...

Und von dem Explorer-Baum wählen, wo Sie Ihre Funktion leben wollen, z.B. es kann in Ihrer eigenen Makro-Bibliothek sein (My Macros / Standard) oder direkt in der aktuellen Tabelle gespeichert.

Sie nun einen neuen Makronamen ein und klicken Sie Neu, um das OO.org Basic IDE zu öffnen. Sie erhalten eine REM sehen Erklärung und einige Stummel Sub-Definitionen. Löschen all das und ersetzen mit:

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

Der obige Code hat einige leichte Verbesserungen von Markus' original:

  • nicht mit einem Trennzeichen beginnen, wenn die erste Zelle im Bereich leer ist.

  • Ermöglicht optional Wahl des Trennzeichen (standardmäßig ""), und die Strings, die vor und nach jedem nicht-leeren Eintrag im Bereich gehen (Default auf "").

  • I umbenannt es strjoin seit "Join" ist der typische Name dieses Funktion in mehreren populären Sprachen wie Perl, Python und Ruby.

  • Variablen alle Klein

Sie nun das Makro speichern, in die Zelle, wo Sie die Verknüpfung angezeigt werden soll, und Typ:

  =STRJOIN(C3:C50)

ersetzt C3:. C50 mit dem Bereich von Strings, die Sie anschließen möchten,

das Trennzeichen anzupassen, verwenden Sie stattdessen so etwas wie:

  =STRJOIN(C3:C50; " / ")

Wenn Sie eine Reihe von E-Mail-Adressen verbinden wollen, könnten Sie verwenden:

  =STRJOIN(C3:C50; ", "; "<"; ">")

und das Ergebnis wäre so etwas wie

<foo@bar.com>, <baz@qux.org>, <another@email.address>, <and@so.on>

Schon so oft würde ich die Leichtigkeit und Schnelligkeit ersetzen und Berechnungsoptionen sowie im Allgemeinen der schnellen Handhabung genießen & Modifizieren Optionen, wenn wieder einmal vor einer abgeladen-Datei-Listen sitzen oder was auch immer.

Ich habe nie verstanden, warum sie nicht enthalten, eine solche wesentliche Funktion von Anfang an, wirklich.

Es basiert auf Adams Skript, aber mit der Erweiterung CONCAT von horizontal auf vertikal zu tauschen, während immer noch die Begrenzungszeichen in Ordnung zu halten.

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top