Linux의 LibreOffice Calc에서 매크로를 만들고 실행하는 방법

LibreOffice는 주류 및 독점 Microsoft Office 제품군에 대한 FOSS 세계의 답변입니다. 주요 Office Productivity 소프트웨어 개발자 및 기여자가 개발한 이 제품은 여러 운영 체제에서 Microsoft Office를 완전히 대체합니다.

Microsoft Excel에 해당하는 LibreOffice 앱을 LibreOffice Calc라고 합니다. Excel과 유사한 여러 기능과 인터페이스가 제공됩니다. 자동화용 매크로를 개발하고 실행하기 위한 매크로 엔진이 내장되어 있습니다. 그러나 Visual Basic은 지원하지 않지만 자체 언어를 지원합니다. 매크로 프로그래밍을 위한 LibreOffice Basic.

LibreOffice 제품군은 Ubuntu, Debian, Fedora 및 CentOS를 포함한 대부분의 Linux 배포판에 사전 설치되어 제공됩니다.

LibreOffice Calc에서 매크로 생성 및 실행

먼저 샘플 데이터가 포함된 워크시트를 만들어 보겠습니다.

Macros Organizer를 열려면 다음으로 이동하십시오. 도구 » 매크로 » 매크로 구성 » LibreOffice 기본 사항. 그것은 열 것이다 LibreOffice 기본 매크로 아래 스크린샷과 같은 창입니다.

매크로의 새 이름을 입력한 다음 창 오른쪽 하단에 있는 새로 만들기 버튼을 클릭합니다.

이제 LibreOffice Basic에 매크로 편집기 화면이 표시되어야 합니다.

보시다시피 수동으로 만든 매크로는 기본적으로 "내 매크로 및 대화 상자 -> 표준 -> 모듈1" 아래에 만들어집니다.

현재 두 개의 매크로가 있습니다. 하나는 기본, 이는 기본 빈 매크로이고 기타는 테스트, 위에서 만든 매크로. 이제 테스트 매크로를 향상시킬 것입니다.

매크로는 다음 작업을 수행합니다.

  • 모든 사람이 직업 작가를 가지고 있는지 확인하십시오.
  • 새 시트 만들기
  • 새 시트에서 작성자의 모든 항목 이동

다음은 매크로입니다.

하위 테스트 rem 직업 작가가 있는 항목을 새 시트로 이동 dim crs(8) as object dim j as 정수 dim prof as object dim i as 정수 dim sh as object dim sh2 as object sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 for i = 1 ~ 5 x = 1 prof = sh.GetCellByPosition(3, i) rem 전체 행을 변수에 저장 If prof.string = "Writer" then crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem 이제 새 시트를 만들고 여기에 이 ​​데이터를 씁니다. ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1) i = 0 IsNull(crs(i))이 아닌 동안 수행 sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 루프 엔드 서브

위의 매크로를 섹션별로 설명하겠습니다.

서브 테스트 . . . 엔드 서브

테스트 는 매크로의 이름이므로 코드에서 다음과 같이 표시됩니다. 하위 테스트 (서브 = 서브루틴). 마찬가지로 우리는 이 매크로 코드를 다음과 같이 종료합니다. 엔드 서브. 이 명령문은 메뉴에서 매크로를 생성할 때 자동으로 추가되지만 사용자는 여기에 매크로 코드를 직접 작성할 수 있으며 서브루틴 이름은 매크로 이름으로 간주됩니다.

LibreOffice Basic의 모든 주석은 키워드로 시작합니다. . rem으로 시작하는 완전한 줄은 주석으로 간주됩니다. 또 다른 방법은 ' (단일 역 쉼표) 줄 시작 부분에.

dim crs(8) as object dim j as Integer dim prof as object dim i as Integer dim sh as object dim sh2 as object

LibreOffice Basic의 변수 선언입니다. 일반 구문은 희미하게 . 배열을 선언하려면 변수 crs와 유사한 구문을 사용하십시오. 여기서 8은 배열의 길이입니다.

sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1

이 구성 요소 현재 문서를 참조합니다. 이 경우에는 Calc 워크시트입니다. 인덱스 0인 Sheet, 즉 첫 번째 시트를 변수 sh에 로드합니다. 이름을 사용하여 시트를 로드하는 기능도 있습니다.

다음으로 우리는 함수를 호출합니다 getCellRangeByPosition sh 개체의 배열 crs에 로드합니다. 셀 범위는 위치를 기반으로 하는 시트의 셀 그룹을 나타냅니다.

인수에 유의하십시오. 0, 0 (열 0, 행 0)은 범위의 시작 셀을 나타내며, 3, 0 (3열, 0행)은 범위의 끝 셀을 나타냅니다. 따라서 0, 0, 3, 0 샘플 시트의 첫 번째(제목) 행을 나타냅니다.

for i = 1 ~ 5 x = 1 prof = sh.GetCellByPosition(3, i) rem 전체 행을 변수에 저장 If prof.string = "Writer" then crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 다음 i인 경우 종료

우리는 사용 ~을위한 행을 반복하는 문. 그만큼 ~을위한 블록은 다음으로 끝납니다. 다음 각 반복이 끝날 때마다 변수 i를 증가시키는 명령문입니다.

다음으로 우리는 함수를 호출합니다 GetCellByPosition 개체의 sh. 매개변수를 전달합니다. (3, 나)즉, 각 반복마다 3열과 i행에 있는 cell의 객체가 변수 prof에서 검색됩니다.

그런 다음 우리는 만약에 셀 prof의 값이 "Writer"인지 확인하는 문입니다. 그렇다면 다시 함수를 호출합니다. getCellRangeByPosition, 이번에는 시작 및 끝 행 번호 대신. 다시 배열에 저장합니다. crs.

ThisComponent.Sheets.insertNewByName("작가", 1) sh2 = ThisComponent.Sheets(1)

먼저 이름으로 새 시트를 만듭니다. 작가, 위치에 1, 인덱스가 0에서 시작하므로 두 번째 위치입니다. 그런 다음 새로 생성된 이 시트의 개체를 가져와 이 시트에 작성자 데이터를 입력할 수 있습니다.

i = 0 Do IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 루프

그만큼 동안 루프 문은 정수 값 범위에서 루프하는 것과 달리 조건에 따라 루프를 원할 때 사용됩니다. ~을위한 이전에 표시된 대로. 여기에서 우리는 다음까지 반복합니다. crs(i) null이 아닙니다.

다음으로 우리는 다시 전화를 겁니다. getCellRangeByPosition 새 시트에서 범위 개체를 가져오기 위해 이전과 비슷한 방식으로

마지막으로 두 가지 함수를 호출합니다. getDataArray 에서 데이터를 반환하는 crs(i), 즉, 첫 번째 시트의 데이터(작성자에 대한) 한 행; 이 데이터를 다음을 사용하여 새 시트의 셀 범위에 씁니다. 세트데이터배열.

마지막으로 다음에서 매크로를 저장합니다. 파일 » 모두 저장 옵션.

매크로를 실행하려면 다음으로 이동하십시오. 도구 » 매크로 » 매크로 실행 매크로 선택기 라이브러리의 "내 매크로" 디렉토리에서 매크로를 선택합니다. 클릭 운영 매크로 이름을 선택한 후 버튼을 누릅니다.

샘플 스프레드시트에서 위의 매크로를 실행하면 다음 결과가 생성됩니다.

LibreOffice에서 매크로를 만드는 방법입니다. 자세한 정보 및 옵션은 공식 문서를 참조하십시오.

? 건배!