2009-12-01 6 views
12

오픈 오피스의 스프레드 시트 프로그램을 사용 중이고 여러 텍스트 셀을 구분 기호와 함께 연결하려고합니다.오픈 오피스 스프레드 시트 (Calc) - 구분 기호로 텍스트 셀 연결

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

내 첫번째 생각은 시도했다 : 결과는 다음과 같이 하나 개의 셀에 하나가되도록 내가 구분 기호로를 연결하는 싶습니다

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

예를 들어, 나는 아래의 세포가 있다고 가정 매크로 또는 무언가를 만들지 만, 오픈 오피스가 그러한 것을 지원한다고 생각하지 않습니다. 어떤 아이디어?

+1

이렇게하면 수퍼 유저에게 더 좋은 응답을 얻을 수 있습니다. 질문이 자동으로 옮겨 지므로 거기에 다시 게시 할 필요가 없습니다. – ChrisF

+0

오, 와우, 나는 슈퍼 유저가 존재한다는 것을 몰랐다. 감사! –

답변

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 
29

해답을 찾은 Markus에게 감사드립니다.

나 자신과 같은 OpenOffice Basic 초보자를위한 약간 더 자세한 지침이 있습니다. > 매크로 - -> 매크로 관리 -> OpenOffice.org 기본 ...

지금 당신이 살고 함수를 원하는 탐색기 트리에서 선택 예를 들어,

도구 :이 버전 3.1에 적용 현재 스프레드 시트에 직접 저장된 매크로 라이브러리 (내 매크로/표준) 또는 에있을 수 있습니다.

이제 새 매크로 이름을 입력하고 새로 만들기를 클릭하여 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 

: 범위의 첫 번째 셀 때

  • 구분 기호로 시작하지 않음을 빈.

  • 은 구분 기호 (기본값 ",")의 옵션 선택을 허용하고 문자열 이는 이전에 가서 (이 ""기본값) 범위 의 각 공백이 아닌 기입 한 후.

  • "join"은 Perl, Python 및 Ruby와 같은 널리 사용되는 언어로 된 함수의 일반적인 이름이기 때문에 이름을 STRJOIN으로 변경했습니다.

  • 변수 모든

지금, 매크로를 저장하면이 (가), 및 종류 표시에 가입 할 셀로 이동 소문자 :

=STRJOIN(C3:C50) 

는 C3 교체 : C50을 범위를 당신이 결합하고 싶은 끈의.이메일 주소의 무리에 합류하고 싶다면

=STRJOIN(C3:C50; "/") 

, 당신은 사용할 수 있습니다 :

대신 같은 것을 사용하여 구분 기호를 지정하려면

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

을하고 그 결과 같은 것

<[email protected]>, <[email protected]>, <[email protected]>, <[email protected]> 
+2

정말 유용합니다. 덕분에 많이 –

+2

와우 이것은 끔찍한입니다. 표준 오픈 오피스 기능이어야합니다. – surfer190

1

매우 편리하고 빠른 교체를 즐기는 경우가 종종 있습니다. & 계산 옵션뿐만 아니라 일반적으로 빠른 처리 & 수정 옵션, 다시 한 번 덤프 된 파일 목록이나 앞에 앉아있을 때.

나는 왜 그들이 처음부터 그러한 필수 기능을 포함하지 않았는지 결코 이해하지 못했습니다.

아담의 스크립트를 기반으로하지만, 확장자는 수평에서 수직으로 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 
관련 문제