فتح جدول بيانات Office (Calc) - سلسل نصية الخلايا مع المحددات
-
22-07-2019 - |
سؤال
أنا باستخدام 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