فتح جدول بيانات Office (Calc) - سلسل نصية الخلايا مع المحددات

StackOverflow https://stackoverflow.com/questions/1825886

سؤال

أنا باستخدام Open Office هو برنامج جداول البيانات و أحاول لسلسلة عدة خلايا النص جنبا إلى جنب مع delimeters.على سبيل المثال, لنفترض أن لدى الخلايا أدناه:

+--------+
| 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

نصائح أخرى

شكرا جزيلا ماركوس من أجل إيجاد حل لهذه.

وهنا بعض قليلا تعليمات أكثر تفصيلا لصالح أوبن أوفيس الأساسية نوبي مثلي.وهذا ينطبق على الإصدار 3.1:

أدوات -> وحدات الماكرو -> تنظيم وحدات الماكرو -> OpenOffice.org الأساسية...

الآن حدد من مستكشف شجرة حيث تريد وظيفة الخاص بك العيش ، على سبيل المثاليمكن أن يكون الخاصة بك في مكتبة الكلية (وحدات الماكرو / قياسي) أو تخزينها مباشرة في التيار جدول البيانات.

الآن أدخل جديد اسم الماكرو ثم انقر فوق جديد لفتح OO.org الأساسية 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

رمز أعلاه بعض تحسينات طفيفة من ماركوس' الأصلي:

  • لا تبدأ مع محدد عند الخلية الأولى في النطاق فارغة.

  • يسمح اختياري خيار محدد (الافتراضية ",") ، السلاسل التي تذهب قبل وبعد كل غير فارغة الدخول في مجموعة (الافتراضي ل "").

  • أنا تسميته STRJOIN منذ "الانضمام" هو نموذجي اسم هذا وظيفة في عدة لغات شعبية ، مثل 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top