LibreOffice Calc에서의 프로그래밍을 위한 Add-in

경고 아이콘

다음에 설명되어 있는 Add-In으로 Calc을 확장하는 방법은 더 이상 사용되지 않습니다. 기존 Add-In과의 호환성을 보장하기 위해 인터페이스가 여전히 유효하고 지원되지만 새 Add-In을 프로그래밍하는 경우 새 API 함수를 사용해야 합니다.


LibreOffice Calc는 스프레드시트 작업용 추가 기능을 제공하는 외부 프로그래밍 모듈인 Add-In을 사용하여 확장할 수 있습니다. Add-In 목록은 함수 마법사Add-In 범주에서 확인할 수 있습니다. Add-In을 직접 프로그래밍하려는 경우 Add-In을 제대로 첨부하기 위해 에서 내보내야 하는 함수를 여기에서 확인할 수 있습니다.

LibreOffice은(는) 도구 - 기본 설정 - LibreOffice - 경로 - Add-in에 정의된 폴더에서 을(를) 검색합니다. LibreOffice에서 인식할 수 있으려면 은(는) 다음에 설명된 특정 속성을 가져야 합니다. 이 정보를 사용하면 LibreOffice Calc의 함수 마법사에 대한 고유한 Add-In을 프로그래밍할 수 있습니다.

애드인-개념

각 Add-In 라이브러리는 몇 가지 함수를 제공합니다. 일부 함수는 관리 용도로 사용합니다. 고유 함수에 대해 어떤 이름이라도 선택할 수 있습니다. 단, 선택한 이름은 매개 변수 전달에 대한 특정 규칙을 따라야 합니다. 정확한 이름 지정 및 호출 규칙은 플랫폼에 따라 다릅니다.

다음 함수:

최소한 관리 함수 GetFunctionCount 및 GetFunctionData는 있어야 합니다. 이 함수를 사용하여 함수, 매개 변수 유형, 구하는 값을 지정할 수 있습니다. 구하는 값으로는 Double 및 String 유형을 지원합니다. 매개 변수로는 셀 영역 Double Array, String Array, Cell Array를 추가로 지원합니다.

매개 변수는 참조의 도움을 받아 제시됩니다. 따라서 기본적으로 계수 조정이 가능합니다. 하지만 시트 계산 내에서는 그다지 유용하지 않으므로 LibreOffice Calc에서는 이 기능이 지원되지 않습니다.

라이브러리는 런타임 시 다시 로드할 수 있으며 관리 함수가 해당 내용을 분석할 수 있습니다. 각 함수에 대해 매개 변수 개수 및 유형, 내부 및 외부 함수 이름, 관리 번호에 대한 정보가 제공됩니다.

이 함수들은 동시에 호출할 수 있으며 그 결과가 즉시 제시됩니다. 런타임 함수(비동기 함Number)도 사용할 수 있지만 이러한 함수는 매우 복잡하므로 여기서는 자세히 설명하지 않겠습니다.

인터페이스 일반

LibreOffice Calc에 첨부된 Add-In 함수의 최대 매개 변수의 개수는 16입니다. 그 중 하나는 구하는 값이고 함수 입력 매개 변수는 최대 15개까지 가능합니다.

데이터 유형은 다음과 같이 정의되어 있습니다:

데이터 타입

정의

CALLTYPE

Windows에서: FAR PASCAL (_far _pascal)

기타: 기본값 (운영 체제 고유의 표준)

USHORT

2바이트 unsigned 정수

DOUBLE

플랫폼에 따른 8바이트 형식

Paramtype

int처럼 플랫폼에 따라 달라짐.

PTR_DOUBLE =0 포인터를 Double로

PTR_STRING =1 포인터를 기한이 0으로 지정된 문자열로

PTR_DOUBLE_ARR =2 포인터를 Double Array로

PTR_STRING_ARR =3 포인터를 String Array로

PTR_CELL_ARR =4 포인터를 Cell Array로

NONE =5


함수

다음 위치에서 호출되는 이러한 함수에 대한 설명이 제공됩니다: .

모든 함수에 대해 다음이 적용됩니다.

void CALLTYPE fn(out, in1, in2, ...)

출력: 결과값

입력: double&, char*, double*, char**, 셀 영역 등의 다양한 유형을 사용할 수 있으며, 여기에서 셀 영역은 이중 배열, 문자열 배열 또는 셀 배열 유형의 행렬입니다.

GetFunctionCount()

참조 매개 변수의 관리 함수를 제외한 함수의 갯수를 반환합니다. 모든 함수마다 0에서 nCount-1 사이의 명확한 번호가 지정되어 있습니다. 이 번호는 나중에 GetFunctionData와 GetParameterDescription 함수에서 필요합니다.

구문

void CALLTYPE GetFunctionCount(USHORT& nCount)

매개 변수

USHORT &nCount:

출력: 애드인 함수의 갯수를 포함할 변수에 대한 참조. 예를 들어 애드인이 LibreOffice Calc에 대해 5개 함수를 제공할 경우 nCount=5입니다.

GetFunctionData()

Add-in 함수에 대한 모든 주요 정보를 확인합니다.

구문

void CALLTYPE GetFunctionData(USHORT& nNo, char* pFuncName, USHORT& nParamCount, Paramtype* peType, char* pInternalName)

매개 변수

USHORT& nNo:

입력: 0과 nCount-1 사이의 함수 번호 포함.

char* pFuncName:

출력: 다음에 표시되는 이름으로, 프로그래머가 볼 수 있는 함수 이름입니다: . 하지만 이 이름이 함수 마법사에 사용되는 이름을 결정하는 것은 아닙니다.

USHORT& nParamCount:

출력: 애드인 함수의 매개 변수 갯수. 항상 결과값이 있으므로 이 갯수는 0보타 커야 하며 최대값은 16입니다.

Paramtype* peType:

출력: 포인터를 Paramtype 형식의 16 변수가 있는 Array로 . 첫 번째 nParamCount 항목은 상응하는 매개 변수 형식으로 채워집니다.

char* pInternalName:

출력: 함수 마법사에서 사용자에게 표시되는 함수 이름으로, 움라우트를 포함할 수 있습니다.

매개 변수 pFuncName과 pInternalName은 LibreOffice Calc에서 크기가 256으로 구현된 char 배열입니다.

GetParameterDescription()

Add-in 함수와 그 매개 변수에 대한 간단한 설명을 제공합니다. 선택 사항으로 이 함수를 사용하여 함수 마법사에서 함수와 매개 변수 설명을 표시할 수 있습니다.

구문

void CALLTYPE GetParameterDescription(USHORT& nNo, USHORT& nParam, char* pName, char* pDesc)

매개 변수

USHORT& nNo:

입력: 라이브러리 내부에 0과 nCount-1 사이의 함수 번호.

USHORT& nParam:

입력: 설명을 제공할 매개 변수를 지정하며 매개 변수는 1에서 시작합니다. nParam이 0이면 함수 자체의 설명이 pDesc에 제공되며 이 경우 pName은 무의미합니다.

char* pName:

출력: 예를 들어 "숫자", "Text" 또는 "날짜" 등과 같은 매개 변수의 종류 및 이름을 포함합니다. LibreOffice Calc에서는 char[256]로 구현됩니다.

char* pDesc:

출력: 예를 들어 "계산해야 할 모집단 값"과 같은 매개 변수의 설명을 포함합니다. LibreOffice Calc에서는 char[256]로 구현됩니다.

pName 및 pDesc는 LibreOffice Calc에서 256자 크기로 구현되는 문자 배열입니다. 함수 마법사에서 사용할 수 있는 공간은 제한적이며 256자를 전부 사용할 수 없다는 것에 주의하십시오.

셀 영역

아래 테이블은 셀 영역을 사용하려는 경우 외부 프로그램-모듈이 제공해야 하는 데이터 구조에 대한 정보를 표시합니다. LibreOffice Calc는 데이터 형식에 따라 세 개의 서로 다른 배열로 구분합니다.

Double Array

매개 변수로 숫지/Double 형식의 값이 있는 셀 영역을 사용할 수 있습니다. Double Array는 LibreOffice Calc에서 다음과 같이 정의됩니다:

오프셋

이름

설명

0

Col1

셀 영역 왼쪽 상단 모서리의 열 번호. 계산은 0에서 시작합니다.

2

Row1

셀 영역 왼쪽 상단 모서리의 행 번호, 0부터 계산.

4

Tab1

셀 영역 왼쪽 상단 모서리의 테이블 번호, 0부터 계산.

6

Col2

셀 영역 오른쪽 하단 모서리의 열 번호. 계산은 0에서 시작합니다.

8

Row2

셀 영역 오른쪽 하단 모서리의 행 번호, 0부터 계산.

10

Tab2

셀 영역 오른쪽 하단 모서리의 테이블 번호; 번호 매기기는 0부터 시작합니다.

12

Count

다음 요소의 개수입니다. 비어 있는 셀은 계산되거나 전달되지 않습니다.

14

Col

요소의 열 번호. 계산은 0에서 시작합니다.

16

요소의 행 번호, 0부터 계산.

18

Tab

요소의 테이블 번호, 0부터 계산.

20

Error

0 값이 "오류 없음"에 사용되는 경우의 오류 번호입니다. 이 요소가 수식 셀에서 얻어지는 경우 오류 값은 수식에 의해 결정됩니다.

22

Double/유동 소수점 타입의 8 바이트 IEEE-변수

30

...

다음 요소


String Array

데이터 타입 텍스트의 수치를 포함하는 셀 영역은 문자열 배열로 사용됩니다. LibreOffice Calc에서 문자열 배열은 다음과 같이 정의됩니다:

오프셋

이름

설명

0

Col1

셀 영역 왼쪽 상단 모서리의 열 번호. 계산은 0에서 시작합니다.

2

Row1

셀 영역 왼쪽 상단 모서리의 행 번호, 0부터 계산.

4

Tab1

셀 영역 왼쪽 상단 모서리의 테이블 번호, 0부터 계산.

6

Col2

셀 영역 오른쪽 하단 모서리의 열 번호. 계산은 0에서 시작합니다.

8

Row2

셀 영역 오른쪽 하단 모서리의 행 번호, 0부터 계산.

10

Tab2

셀 영역 오른쪽 하단 모서리의 테이블 번호; 번호 매기기는 0부터 시작합니다.

12

Count

다음 요소의 개수입니다. 비어 있는 셀은 계산되거나 전달되지 않습니다.

14

Col

요소의 열 번호. 계산은 0에서 시작합니다.

16

요소의 행 번호, 0부터 계산.

18

Tab

요소의 테이블 번호, 0부터 계산.

20

Error

0 값이 "오류 없음"에 사용되는 경우의 오류 번호입니다. 이 요소가 수식 셀에서 얻어지는 경우 오류 값은 수식에 의해 결정됩니다.

22

Len

다음 문자열의 길이. 최종 0-바이트 포함. 최종 0-바이트를 포함하는 길이가 홀수값이면 두 번째의 0-바이트가 문자열에 추가되어 짝수의 값을 유지합니다. 따라서 Len은 ((StrLen+2)&~1)으로 계산됩니다.

24

String

최종 0-바이트와 문자열

24+Len

...

다음 요소


Cell Array

셀 배열은 숫자뿐 아니라 텍스트가 포함된 셀 영역을 호출하는 데 사용됩니다. LibreOffice Calc의 셀 배열은 다음과 같이 정해집니다.

오프셋

이름

설명

0

Col1

셀 영역 왼쪽 상단 모서리의 열 번호. 계산은 0에서 시작합니다.

2

Row1

셀 영역 왼쪽 상단 모서리의 행 번호, 0부터 계산.

4

Tab1

셀 영역 왼쪽 상단 모서리의 테이블 번호, 0부터 계산.

6

Col2

셀 영역 오른쪽 하단 모서리의 열 번호. 계산은 0에서 시작합니다.

8

Row2

셀 영역 오른쪽 하단 모서리의 행 번호, 0부터 계산.

10

Tab2

셀 영역 오른쪽 하단 모서리의 테이블 번호; 번호 매기기는 0부터 시작합니다.

12

Count

다음 요소의 개수입니다. 비어 있는 셀은 계산되거나 전달되지 않습니다.

14

Col

요소의 열 번호. 계산은 0에서 시작합니다.

16

요소의 행 번호, 0부터 계산.

18

Tab

요소의 테이블 번호, 0부터 계산.

20

Error

0 값이 "오류 없음"에 사용되는 경우의 오류 번호입니다. 이 요소가 수식 셀에서 얻어지는 경우 오류 값은 수식에 의해 결정됩니다.

22

Type

셀 내용의 형식, 0 == Double, 1 == String

24

Value or Len

Type == 0인 경우 : Double/유동 소수점 형식의 8 바이트 IEEE-변수

Type == 1인 경우: 다음 문자열의 길이에 최종 0-바이트 포함됨. 최종 0-바이트를 포함한 길이가 홀수값일 경우 문자열에 두 번째의 0-바이트가 추가되어 짝수의 값이 유지됩니다. 그러므로 Len은 ((StrLen+2)&~1)으로 계산됩니다.

26 if Type==1

String

Type == 1: 최종 0-바이트가 포함된 문자열

32 or 26+Len

...

다음 요소