LibreOffice에서 Java 런타임을 인식하도록 설정하는 방법
호환되는 Java 런타임을 설치하고 LibreOffice에서 활성화한 다음, 관련 없는 설정을 변경하지 않고 JRE 목록이 비어 있는 문제를 해결하세요.
Calc 매크로의 속도 향상을 위한 가장 확실한 첫 번째 방법은 셀 단위로 반복되는 읽기 및 쓰기 작업을 한 번의 범위 읽기, 메모리 루프, 그리고 한 번의 범위 쓰기로 대체하는 것입니다. 이렇게 하면 Basic과 Calc 간의 호출 횟수가 줄어듭니다. 하지만 수식, 서식, 파일 크기, 매크로 로직 등도 실행 시간에 영향을 미칠 수 있으므로 고정적인 속도 향상을 보장하지는 않습니다. 아래 예제는 상태 열을 변경하고 속도와 정확성을 측정하는 방법을 보여줍니다. API 세부 정보는 2026년 10월 9일 LibreOffice 26.8 설명서를 기준으로 확인했습니다.
현재 매크로를 통합 문서 사본에서 실행하고 소요 시간을 기록하십시오. 기존 매크로와 수정된 매크로 모두 동일한 시작 데이터가 있는 새 통합 문서 사본을 사용하거나 실행 사이에 입력 데이터를 복원하십시오. 그렇지 않으면 두 번째 실행에서 작업량이 줄어들 수 있습니다. 행 수, 계산 설정 및 출력 조건을 동일하게 유지하십시오. 한 번의 비정상적으로 빠른 실행 결과에 의존하지 말고 각 실행을 반복하고 일반적인 시간을 비교하십시오. 결과가 예상 규칙과 일치하는지 확인하십시오. 더 빨리 완료되었지만 잘못된 행을 변경하는 매크로는 개선된 것이 아닙니다.
LibreOffice Basic의 Timer타이머 함수는 자정 이후 경과된 초를 보고합니다. 이 값을 변수에 할당하면 Long숫자 초 단위로 얻을 수 있습니다. 짧은 시간 동안 타이머를 실행하려면 시작 값과 종료 값을 기록하고 두 값을 뺍니다. 종료 값이 더 작으면 자정을 넘긴 것이므로 차이에 86,400초를 더합니다. 타이머 함수는 정수 초 단위로 보고하므로 밀리초 단위까지 정확하게 측정하려면 타이머 서비스를 사용하십시오 . LibreOffice Basic 타이머 설명서 와 ScriptForge 타이머 서비스 설명서를ScriptForge 참조하십시오 . 통합 문서 열기, 저장 및 수동 검사는 실제 작업의 일부가 아닌 한 측정 간격 밖에 두십시오.

개별 셀 속성을 반복적으로 호출하거나 읽고 쓰는 루프는 getCellByPosition()Calc에게 각 작업마다 Basic-to-Calc 인터페이스를 거치도록 요청합니다. 행과 열이 많을 경우, 변환 자체는 간단하더라도 이러한 호출 횟수가 누적될 수 있습니다. 메모리에 저장된 배열을 순회하는 루프는 여전히 각 행을 방문하지만, 값마다 별도의 셀 API 호출을 피할 수 있습니다.
먼저 결과에 영향을 주지 않는 작업을 제거하세요. 루프 안에서 셀을 선택하거나 활성화하지 말고, 마지막 범위 작업 한 번으로 충분한 경우 셀을 반복적으로 재계산하거나 서식을 지정하지 마세요. 또한 제한된 데이터 블록만 필요한 경우 전체 열을 처리하지 마세요. 이러한 변경 사항은 추가 컨트롤을 추가하기 전에 실제 병목 현상을 파악하는 데 도움이 됩니다.
매크로에서 변경하려는 값만 포함하는 직사각형 범위를 사용하세요. 예시에서는 시트 이름이 인 경우 Data, 1행에 머리글 행, C열에 상태 값이 있다고 가정합니다. 시트 이름과 범위를 사용 중인 통합 문서에 맞게 변경하세요. API는 getDataArray()값을 포함하는 행으로 범위를 반환하고, 매크로는 setDataArray()동일한 크기의 배열을 해당 범위에 다시 기록합니다.

Sub UpdateStatuses
Dim oSheet As Object
Dim oRange As Object
Dim aData As Variant
Dim i As Long
oSheet = ThisComponent.Sheets.getByName("Data")
oRange = oSheet.getCellRangeByName("A2:C10001")
aData = oRange.getDataArray()
For i = LBound(aData) To UBound(aData)
If aData(i)(2) = "pending" Then
aData(i)(2) = "review"
End If
Next i
oRange.setDataArray(aData)
End Sub
행 배열은 0부터 aData(i)(2)시작하며 각 행의 세 번째 열을 참조합니다. 여기서는 선택한 범위가 A에서 시작하므로 C열입니다. 배열의 바깥쪽 시퀀스는 행을 나타내고 각 안쪽 시퀀스는 열을 나타냅니다. 전달되는 범위는 setDataArray()배열과 동일한 크기여야 합니다. 크기가 일치하지 않으면 오류가 발생합니다. LibreOffice XCellRangeData API 참조 및 LibreOffice ScriptForge 배열 설명서를 참조하십시오 .

getDataArray()이 메서드는 셀 값을 숫자 또는 문자열로 반환하며, 원래 수식 텍스트는 반환하지 않습니다. 수식이 포함된 범위를 읽고 해당 배열을 다시 쓰는 경우 setDataArray(), 수식이 현재 결과로 대체될 수 있습니다. 값 배열 메서드는 값을 포함해야 하는 입력/출력 셀에만 사용해야 합니다. 매크로에서 수식을 유지하거나 수정해야 하는 경우에는 수식 배열 메서드 getFormulaArray()와 를 사용하거나 setFormulaArray(), 수식이 없는 범위에서만 작업해야 합니다. XCellRangeFormula API 참조 문서에서 이러한 인터페이스 분리에 대한 내용을 확인할 수 있습니다.
배열 버전을 측정한 후에만 이러한 옵션을 테스트하십시오. 수식 재계산이 실행 시간의 대부분을 차지하는 경우, 쿼리를 실행하고 isAutomaticCalculationEnabled(), `react_count_react_count_automatical_include`를 사용하여 자동 계산을 일시적으로 비활성화한 enableAutomaticCalculation(False)다음, 원래 설정을 복원하고 필요할 때 변경된 셀을 재계산할 수 있습니다. 오류 발생 시 통합 문서가 수동 계산 모드로 남지 않도록 복원 경로를 정리 경로에 두십시오. 매크로가 단계 간에 새로운 수식 결과가 필요한 경우 계산을 비활성화하지 마십시오. LibreOffice 문서에서는 calculate()변경된 셀 재계산을 언급하고 있으며, 이는 전체 재계산을 강제로 수행하므로 자체적으로 비용이 많이 들 수 있습니다. XCalculatable API 참조를calculateAll() 확인하십시오 .
lockControllers()매크로가 여러 셀을 변경하는 동안 화면 업데이트에 사용되는 일부 알림을 일시 중단할 수 있습니다. unlockControllers()매크로가 오류 처리기를 통해 종료되는 경우를 포함하여 모든 잠금을 와 함께 사용하십시오. 이렇게 하면 화면 업데이트 작업량이 줄어듭니다. 수식 계산을 중지하거나 셀별 로직을 일괄 작업으로 만들지는 않습니다. 범위 배열을 대체하는 용도가 아니라 화면 새로 고침 병목 현상을 측정하여 해결하는 데 사용하십시오. XModel API 참조를 확인하십시오 .
수정된 매크로를 통합 문서 사본에서 실행하고 기준선과 동일한 조건에서 실행 시간을 기록합니다. 영향을 받은 행, 영향을 받지 않은 행, 수식 및 주요 합계를 비교합니다. 프로덕션 워크플로에 저장이 포함되어 있는 경우 사본을 저장하고 닫은 다음 다시 엽니다. 이렇게 하면 간단한 시각적 검사로는 놓칠 수 있는 문제를 발견할 수 있습니다. 출력 검사가 계속 통과하는 동안 반복 실행을 통해 안정적인 개선이 나타나야 합니다.

매크로가 여전히 복잡한 수식, 서식 지정, 파일 입출력 또는 정렬에 대부분의 시간을 소비하는 경우 해당 단계를 별도로 프로파일링하십시오. 범위 배열은 반복적인 셀 접근 횟수만 줄여줍니다. 매우 큰 시트의 경우 전체 메모리 배열을 사용하면 상당한 메모리가 소모될 수 있습니다. 메모리 사용량이 증가하면 한 번에 몇 개의 열씩 처리하거나 행을 측정 가능한 블록으로 나누어 처리하고, 각 블록이 의도한 행에서 시작하고 끝나는지 확인하십시오. 데이터가 이미 데이터베이스에 있고 레코드를 필터링, 그룹화 또는 업데이트하는 작업인 경우 모든 레코드를 Calc에 로드하는 것보다 데이터베이스 쿼리로 작업을 옮기는 것이 더 적합할 수 있습니다.
호환되는 Java 런타임을 설치하고 LibreOffice에서 활성화한 다음, 관련 없는 설정을 변경하지 않고 JRE 목록이 비어 있는 문제를 해결하세요.
소형 LibreOffice 컨테이너를 구축하고, GUI 없이 오피스 문서를 변환하고, 호스트 파일 접근을 제한하면서 PDF 출력 결과를 검증합니다.
LibreOffice 프레젠테이션 파일의 크기를 줄이려면 내장된 사진을 압축하고, 적절한 이미지 설정을 선택하고, 공유하기 전에 슬라이드 품질을 확인하세요.
LibreOffice의 페이지 크기를 프린터에 맞게 조정하고, 인쇄 가능한 여백을 확인하고, 사용자 지정 크기 문서를 인쇄하기 전에 배율을 수정하십시오.
반복적인 셀 접근을 일괄 범위 읽기 및 쓰기로 대체한 다음 결과를 벤치마킹하고 대용량 Calc 통합 문서에서 수식을 보호하십시오.
긴 원고를 여러 장으로 나누고, Writer에서 이를 조합하여 스타일, 내용 및 내보내기 검사를 일관되게 유지하세요.
Base의 PostgreSQL 직접 연결 옵션을 사용하여 서버 세부 정보를 입력하고, 로그인하고, ODB 연결 파일을 저장하고, 일반적인 액세스 오류를 해결할 수 있습니다.
Linux 사용자 글꼴 폴더에 글꼴을 설치하고 LibreOffice Flatpak을 다시 시작한 다음, 앱 샌드박스를 약화시키지 않고 Writer에 글꼴이 나타나는지 확인하십시오.
macOS Sonoma에서 LibreOffice의 네트워크 드라이브 저장 시 발생하는 충돌을 방지하고 작업을 보호하기 위해 로컬 우선 워크플로, 권한 검사 및 맞춤형 테스트를 활용하세요.
Calc에서 CSV 가져오기 시 ID 열을 텍스트로 설정하고 미리 보기를 확인한 후 저장된 데이터를 검증하여 선행 0을 유지하세요.