LibreOffice Calc에서의 프로그래밍을 위한 Add-in
다음에 설명되어 있는 Add-In으로 Calc을 확장하는 방법은 더 이상 사용되지 않습니다. 기존 Add-In과의 호환성을 보장하기 위해 인터페이스가 여전히 유효하고 지원되지만 새 Add-In을 프로그래밍하는 경우 새 API 함수를 사용해야 합니다.
LibreOffice Calc는 스프레드시트 작업용 추가 기능을 제공하는 외부 프로그래밍 모듈인 Add-In을 사용하여 확장할 수 있습니다. Add-In 목록은 함수 마법사의 Add-In 범주에서 확인할 수 있습니다. Add-In을 직접 프로그래밍하려는 경우 Add-In을 제대로 첨부하기 위해 shared library외부 DLL에서 내보내야 하는 함수를 여기에서 확인할 수 있습니다.
LibreOffice은(는) 도구 - 기본 설정 - LibreOffice - 경로 - Add-in에 정의된 폴더에서 shared libraryDLL을(를) 검색합니다. LibreOffice에서 인식할 수 있으려면 shared libraryDLL은(는) 다음에 설명된 특정 속성을 가져야 합니다. 이 정보를 사용하면 LibreOffice Calc의 함수 마법사에 대한 고유한 Add-In을 프로그래밍할 수 있습니다.
애드인-개념
각 Add-In 라이브러리는 몇 가지 함수를 제공합니다. 일부 함수는 관리 용도로 사용합니다. 고유 함수에 대해 어떤 이름이라도 선택할 수 있습니다. 단, 선택한 이름은 매개 변수 전달에 대한 특정 규칙을 따라야 합니다. 정확한 이름 지정 및 호출 규칙은 플랫폼에 따라 다릅니다.
다음 함수: Shared Library AddIn DLL
최소한 관리 함수 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 |
Shared Library DLL 함수
다음 위치에서 호출되는 이러한 함수에 대한 설명이 제공됩니다: Shared Library 외부 DLL.
모든 Shared Library DLL 함수에 대해 다음이 적용됩니다.
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:
출력: 다음에 표시되는 이름으로, 프로그래머가 볼 수 있는 함수 이름입니다: Shared Library DLL. 하지만 이 이름이 함수 마법사에 사용되는 이름을 결정하는 것은 아닙니다.
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 |
... |
다음 요소 |