
명령줄에서 .odt 파일에 대해 LibreOffice 매크로를 실행하고 싶습니다. 매크로를 여러 파일에 적용하도록 확장하고 싶기 때문에 매크로를 실행할 때마다 GUI가 팝업되는 것을 원하지 않습니다.
나는 현재 작업 중인 매크로(마지막에 파일도 닫음)를 가지고 있으며 가능한 한 다음과 같이 호출할 수 있어야 합니다.
soffice --invisible --nofirststartwizard --headless --norestore "D:\myFolder\my file.odt" "macro:///Standard.Module1.myMacro"
또는
swriter --invisible --nofirststartwizard --headless --norestore "D:\myFolder\my file.odt" "macro:///Standard.Module1.myMacro"
두 명령 모두 매크로를 올바르게 실행하지만 실행 중에 GUI가 열리고 닫힙니다. 이를 방지하려면 어떻게 해야 합니까?
저는 Windows 10 컴퓨터에서 작업 중입니다.도움말>LibreOffice 정보다음 정보를 제공했습니다.
버전: 5.2.1.2
빌드 ID: 31dd62db80d4e60af04904455ec9c9219178d620
CPU 스레드: 4; OS 버전: 윈도우 6.2; UI 렌더링: 기본값;
로캘: en-US(en_US); 계산: CL
답변1
문제는 LibreOffice가 시작될 때 보이지 않더라도 문서를 열면 보입니다. 에 해결책이 있습니다https://forum.openoffice.org/en/forum/viewtopic.php?f=5&t=22548:
LibreOffice 헤드리스를 실행하여 매크로를 호출합니다. 명령줄 호출은 다음과 같습니다.~ 아니다열려는 문서를 지정하세요. 매크로만 지정하세요. 예를 들어(최신 매크로 구문 사용):
soffice -headless -invisible "vnd.sun.star.script:Standard.Module1.MySubroutine?language=Basic&location=application"
매크로 호출loadComponentFromUrl속성
Hidden
이 true로 설정되어 있습니다. 이로 인해 문서가 보이지 않게 됩니다.이제 매크로는 문서와 관련된 모든 작업을 수행합니다.
편집하다:
다른 파일에 대해 작동하게 하려면 이전 매크로 구문을 사용하여 파일 이름을 매개변수로 전달하십시오. 의 예https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=8232:
soffice "macro:///Library3.Module1.test_Args(arg1,123,4.567,2000-12-31)"
답변2
Jim K의 이미 좋은 답변을 조금 더 명확히하려면 다음을 수행하십시오.
function OpenSilent(FilePath as String) as Object
Dim FileProperties(1) As New com.sun.star.beans.PropertyValue
FileProperties(0).Name = "Hidden"
FileProperties(0).Value = True
OpenSilent = StarDesktop.loadComponentFromURL("file://" & FilePath, "_blank", 0, FileProperties())
end function
sub Headless(FilePath as String)
Document = OpenSilent(FilePath)
call MyArgumentlessMacro()
call Document.close(True)
end sub
sub HeadlessWithArgs(FilePath as String, Arg1 as Variant, Arg2 as Variant)
Document = OpenSilent(FilePath)
call MyMacroWithArguments(Arg1, Arg2)
call Document.close(True)
end sub
이제 우리는 다음을 할 수 있습니다:
soffice --invisible --nofirststartwizard --headless --norestore 'macro:///MyLibrary.MyModule.Headless("/home/user/File.odt")'
# or
soffice --invisible --nofirststartwizard --headless --norestore 'macro:///MyLibrary.MyModule.Headless("/home/user/File.odt", "Hello, World", 6847)'
soffice 명령줄에서 호출하기 위해 내부 매크로의 이름을 전달할 수 있다면 훨씬 더 좋을 것입니다. 즉, Headless에 대한 인수로 이에 대해서는 나중에 다루겠습니다.