Contents

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

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

LibreOffice Calc can be expanded by Add-Ins, which are external programming modules providing additional functions for working with spreadsheets. These are listed in the Function Wizard in the Add-In category. If you would like to program an Add-In yourself, you can learn here which functions must be exported by the shared library external DLL so that the Add-In can be successfully attached.

LibreOffice searches the Add-in folder defined in the configuration for a suitable shared library DLL. To be recognized by LibreOffice, the shared library DLL must have certain properties, as explained in the following. This information allows you to program your own Add-In for Function Wizard of LibreOffice Calc.

## 애드인-개념

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

### Functions of 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 functions

Following you will find a description of those functions, which are called at the Shared Library external DLL.

For all Shared Library DLL functions, the following applies:

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

Output: Resulting value

Input: Any number of types (double&, char*, double*, char**, Cell area), where the Cell area is an array of types double array, string array, or cell array.

### GetFunctionCount()

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

구문

void CALLTYPE GetFunctionCount(USHORT& nCount)

매개 변수

USHORT &nCount:

Output: Reference to a variable, which is supposed to contain the number of Add-In functions. For example: If the Add-In provides 5 functions for LibreOffice Calc, then nCount=5.

### GetFunctionData()

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

구문

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

매개 변수

USHORT& nNo:

Input: Function number between 0 and nCount-1, inclusively.

char* pFuncName:

Output: Function name as seen by the programmer, as it is named in the Shared Library DLL. This name does not determine the name used in the Function Wizard.

USHORT& nParamCount:

Output: Number of parameters in AddIn function. This number must be greater than 0, because there is always a result value; the maximum value is 16.

Paramtype* peType:

Output: Pointer to an array of exactly 16 variables of type Paramtype. The first nParamCount entries are filled with the suitable type of parameter.

char* pInternalName:

Output: Function name as seen by the user, as it appears in the Function Wizard. May contain umlauts.

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

### GetParameterDescription()

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

구문

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

매개 변수

USHORT& nNo:

Input: Number of the function in the library; between 0 and nCount-1.

USHORT& nParam:

Input: Indicates, for which parameter the description is provided; parameters start at 1. If nParam is 0, the description itself is supposed to be provided in pDesc; in this case, pName does not have any meaning.

char* pName:

Output: Takes up the parameter name or type, for example, the word "Number" or "String" or "Date", and so on. Implemented in LibreOffice Calc as char[256].

char* pDesc:

Output: Takes up the description of the parameter, for example, "Value, at which the universe is to be calculated." Implemented in LibreOffice Calc as char[256].

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

## 셀 영역

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

### Double Array

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

Offset | Name | Description
--- | --- | ---
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에서 문자열 배열은 다음과 같이 정의됩니다:

Offset | Name | Description
--- | --- | ---
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의 셀 배열은 다음과 같이 정해집니다.

Offset | Name | Description
--- | --- | ---
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 | ... | 다음 요소