Contents
Index 🔎︎

# 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 libraryexternal DLL so that the Add-In can be successfully attached.

LibreOffice searches the Add-in folder defined in the configuration for a suitable shared libraryDLL. To be recognized by LibreOffice, the shared libraryDLL 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 LibraryAddIn 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 LibraryDLL functions

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

For all Shared LibraryDLL 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 LibraryDLL. 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 | ... | 다음 요소