2010-06-07 4 views
3

셸 명령을 실행하고 호출 한 셀에 결과를 저장하는 사용자 지정 OpenOffice 함수를 작성하고 싶습니다. 기본 매크로가 작동하지만 명령 출력을 캡처하는 방법을 찾을 수 없습니다.셸 명령을 실행하고 사용자 지정 함수의 결과로 출력을 반환하십시오.

Function MyTest(c1) 
    MyTest = Shell("bash -c "" echo hello "" ") 
End Function 

위의 값은 항상 0을 반환합니다. Shell 명령의 설명서를 보면 실제로 STDOUT을 반환하지 않는다고 생각합니다.

함수에서 반환 할 수 있도록 출력을 캡처하는 방법은 무엇입니까?

답변

1

출력을 임시 파일로 리디렉션 한 다음 다른 파일로 해당 파일의 내용을 읽을 수 있습니까?

예를 들어, Shell("bash -c "" echo hello > tmp.txt "" ")

1

Kimbal Robinson's answer 작동하지만이 파일을 사용하는 단점이있다. 느린데 (메모리 만 사용하는 것에 비해), 나중에 파일을 삭제해야합니다 (/ tmp에두면 보통 자동으로 삭제됩니다).

대안은 클립 보드를 통해 데이터를 전송하는 것이다 :

Dim myCommand As String 
myCommand = "echo hello world" 
Shell ("bash", 1, "-c "" " & myCommand & " | xclip -selection clipboard"" ", true) 
' setting the 4th parameter to true ensures that the Shell function will wait until ' 
' the command terminates before returning ' 

' then paste the content of the clipboard ' 
Dim dh As Object 
dh = createUnoService("com.sun.star.frame.DispatchHelper") 
dh.executeDispatch(StarDesktop.CurrentFrame, ".uno:Paste", "", 0, Array()) 

이것은 현재 문서의 현재 지점에서 명령어의 결과를 붙여 것이다.

명령에서 여러 줄을 입력하면 "텍스트 가져 오기"대화 상자가 나타납니다 (이를 방지하는 방법을 모르겠습니다).

관련 문제