라이브러리 추가 API 멤버
이 페이지는 기본 통합 문서, 워크시트, 렌더링, 가져오기, 진단 및 뷰어 API를 지원하면서 별도의 작업 지향 가이드가 필요하지 않은 공용 형식에 대한 참조를 완성합니다
필터링 및 조건부 서식
TXLSAutofilter | Add, AddAutofilterData, AssignFrom, Clear및 ParseAutofilterData 는 필터 정의를 편집하거나 가져오고, SetRangeBounds(ARow1, ACol1, ARow2, ACol2)는 로드된 조건이나 드롭다운 도형을 지우지 않고 1 기반 경계 포함 범위를 복원하며, 양수가 아니거나 뒤집힌 경계, 로드된 필드 수와 다른 열 수는 무시합니다. Defined, FirstRow, FirstCol, LastCol, LastRow및 FieldCount 는 활성 범위와 필터링된 열 수를 노출합니다 |
TXLSAutofilterItem | Shape 는 항목과 연결된 필터 단추 그리기를 노출하고, 로드된 필터 조건은 검사나 Roundtrip 편집을 위해 TXLSAutofilterDOPER 피연산자 레코드로 제공됩니다. DataType 이 피연산자 형식을 선택하고 grbitSgn 이 부호와 플래그 비트를 전달합니다 |
TXLSDataBarSpec | AxisColor, AxisIsThemeColor, AxisThemeColorId, AxisThemeColorTint및 ClearAxisThemeColor 는 축을 제어하고, Direction, GradientFill, NegativeBarBorderColorSameAsPositive, NegativeBarColor, NegativeBarColorSameAsPositive및 NegativeBorderColor 는 막대 모양을 제어하며, IsIndexedColor, IndexedColorIndex및 ClearIndexedColor 는 팔레트 인덱스 막대 색을 관리합니다 |
TXLSIconSetSpec | ThresholdEqualsInclude 는 각 아이콘 임계값에 대해 포함 비교와 배타 비교 중 하나를 선택합니다 |
TXLSCfValue | IsIndexedColor 및 IndexedColorIndex 는 레거시 팔레트 인덱스로 저장된 임계값 색을 보고하고, ClearIndexedColor 는 해당 형식을 다시 제거합니다. 테마 색 또는 리터럴 색은 기존 접근자를 통해 계속 사용할 수 있습니다 |
TXLSCfValue, TXLSDataBarSpec, TXLSColorScaleSpec, TXLSIconSetSpec및 TXLSDxfStyle 는 AttachWriteGuardOwner를 허용하여 규칙 개체를 소유 통합 문서에 연결하므로 편집 시 쓰기 가드가 자동으로 획득됩니다. 소유자는 TXLSCondFormatWriteGuardOwner를 구현하며, 유일한 AcquireWriteGuard 메서드가 규칙에 통합 문서의 쓰기 가드를 넘겨줍니다. TXLSDxfStyle 는 팔레트 인덱스 규칙 색을 위해 FontColorIndex 가 있는 FontColorIsIndexed 와 FillFgColorIndex / FillFgColorIsIndexed , FillBgColorIndex / FillBgColorIsIndexed 쌍에 더해, 기존 굵게·이탤릭·밑줄·색상 멤버와 함께 차등 폰트 재정의인 FontName, FontSize, FontScheme (빈 문자열, 포인트 크기, 또는 major / minor같은 테마 폰트 슬롯)를 추가합니다. 대입이 일어날 때마다 쓰기 가드를 획득하고 다시 내보내도록 규칙을 dirty로 표시합니다
TXLSConnections, TXLSDataTables및 TXLSQueryTables 는 OnAcquireWriteGuard 를 노출합니다. 이는 편집 경로가 변경 전에 소유 통합 문서의 TXLSConnectionAcquireWriteGuard를 획득한 후 통합 문서 세대를 진행하기 위해 사용하는 훅입니다. 가드는 TXLSDataTableAcquireWriteGuard을 기록하고 TXLSQueryTableAcquireWriteGuard가 쓰기 완료를 표시하여 종속 캐시를 다시 빌드할 수 있게 합니다 IXLSWorkbookWriteGuard 변경 전에 호출하고 그 후에는 통합 문서 세대(generation)를 올리는 데 씁니다. 이 가드는 다음을 기록합니다: StartGeneration, and Complete 은(는) 쓰기가 끝났음을 표시해 종속 캐시가 다시 빌드될 수 있게 합니다
보존된 데이터 연결에는 형식화된 설명이 따릅니다. TXLSConnectionKind (xlckUnknown, xlckOdbc, xlckDao, xlckFile, xlckWeb, xlckOleDb, xlckText, xlckAdo)가 연결을 분류하고, TXLSConnectionCredentials (xlccIntegrated, xlccNone, xlccStored, xlccPrompt)가 인증 모드를 기록하며, 각 연결 매개변수 값은 TXLSConnectionParameterValueKind (xlcpvNone, xlcpvBoolean, xlcpvDouble, xlcpvInteger, xlcpvString, xlcpvCell)로 태그가 붙습니다. What-If 데이터 테이블은 저장된 정의 종류를 TXLSDataTableKind
What-If 데이터 테이블 및 피벗 그룹화
TXLSDataTable | Assign, ContainsCell및 IsRoot 는 테이블을 복사하고 검사합니다. Kind, FirstRow, FirstCol, LastCol, LastRow, AlwaysCalculate, ColumnInputCol, ColumnInputRow, ColumnInputDeleted, RowInputCol, RowInputRow및 RowInputDeleted 는 저장된 계산 정의를 노출합니다 |
TXLSDataTables | Add, AddExisting, Delete, Clear, Assign, AdjustForShift및 Offset 는 컬렉션을 관리합니다. FindByCell 및 FindRoot 는 지정된 셀을 포함하거나 그 셀에 뿌리를 둔 테이블을 찾습니다. Count, Items및 OnChange 는 컬렉션 상태를 노출합니다 |
TXLSPivotCacheField | GroupBaseField 및 GroupParentField 는 그룹화된 필드와 해당 소스 또는 부모 필드 간의 관계를 노출합니다 |
아이콘 집합 임계값은 프로그래밍 방식으로 렌더링하거나 검증할 수 있습니다. XLSCfIconSetCount 는 TXLSIconSetType 이 정의하는 아이콘 수를 보고하고, XLSBuildCfIconGeometry 는 아이콘 하나를 그리는 프리미티브( TXLSCfIconGeometry , 종류TXLSCfIconPrimitive: TXLSCfIconPrimitiveKind, cfipPolygon, cfipEllipse, cfipRect)와 포인트( cfipLine)로TXLSCfIconPoint를 채우므로 사용자 지정 렌더러도 Excel의 기본 제공 아이콘 모양과 일치합니다
진단, 수식 추적 및 유효성 검사
TXLSDiagnostic | Code, NativeCode, Message, Severity, ExceptionClass, PartName, RecordId, SheetIndex, SheetName및 StreamOffset 는 파서, 작성기 또는 패키지 진단 하나를 식별합니다 |
TXLSDiagnostics | Add 는 진단을 추가하고, Clear 는 컬렉션을 초기화하며, Count 와 Items 는 항목을 열거합니다 |
TXLSDiagnosticSeverity and TXLSDiagnosticOperation | TXLSDiagnosticSeverity (xlsDiagnosticInfo, xlsDiagnosticWarning, xlsDiagnosticError, xlsDiagnosticFatal)는 진단 하나를 분류하고 TXLSDiagnosticOperation (xlsOperationNone, xlsOperationOpen, xlsOperationSave, xlsOperationCalculate, xlsOperationExport)는 진단이 발생한 단계를 나타냅니다. OnDiagnostic 핸들러는 전달된 TXLSDiagnostic |
TXLSFormulaDebugSession | CurrentStep, DependencyCount, NodeCount및 StepCount 는 현재 디버거 스냅샷과 해당 추적 크기를 노출합니다 |
TXLSFormulaTracer | StepCount 는 기록된 평가 단계 수를 보고합니다 |
TXLSImportCheck | AddRule, AddUniqueRule, AddCrossColumnRule는 열 술어, 복합 유일성, 형식화된 비교를 구성합니다. Check는 재계산이나 패킹 셀 구체화 없이 저장된 워크시트 값과 수식 캐시에서 구조화된 위반을 반환합니다. HeaderRow, FirstRow, LastRow, OnVerifyCell, ViolationCount, Violation은 범위, 콜백, 결과를 노출합니다. Annotate와 KeepOnlyViolations는 명시적인 수정 통합 문서 작업입니다. 타입, 경계, 날짜 체계, 튜플 ID, 실패 동작은 가져오기 검증 스키마를 참고하세요 |
가져오기 검증 스키마
lxImportCheck의 TXLSImportCheck는 애플리케이션이 소유한 규칙을 기준으로 TXLSXWorksheet를 검증합니다. 저장된 스칼라 값과 저장된 수식 결과를 검사하며, 1 기반 워크시트 좌표를 사용하고 텍스트→숫자, 텍스트→날짜, 텍스트→Boolean 암시 변환은 없습니다
Validator := TXLSImportCheck.Create;
try
Validator.HeaderRow := 1;
Rule := Validator.AddRule(2);
Rule.Name := 'quantity';
Rule.Flags := [irRequired, irValueType, irValueRange];
Rule.ValueKind := ivkInteger;
Rule.MinimumValue := 1;
Rule.MaximumValue := 1000;
Validator.AddUniqueRule([1, 3]).Name := 'account-and-region';
Validator.AddCrossColumnRule(4, 5, icLessOrEqual).Name := 'start-before-end';
FailureCount := Validator.Check(Sheet);
if FailureCount > 0 then
Validator.Annotate(Sheet, 'Import validator');
finally
Validator.Free;
end;
HeaderRow > 0이면 다음 행부터 검사를 시작하고 FirstRow보다 우선합니다. 그렇지 않으면 FirstRow 기본값은 1입니다. LastRow = 0은 워크시트의 마지막 사용 행을 쓰고, 양수 LastRow는 셀을 만들지 않고 없는 셀을 포함할 수 있습니다. 열은 1~16,384 범위 안에 있어야 하고 활성 데이터 행 경계는 1~1,048,576 안에 있어야 합니다
열 규칙과 명시적 타입
TlxImportColumnRule | Column, Flags, Name, Title, MinLength, MaxLength, Pattern, ValueKind, DateSerialMode가 열 하나를 구성합니다. MinimumValue, MaximumValue, HasMinimum, HasMaximum, MinimumInclusive, MaximumInclusive는 경계를 구성합니다. Validate는 스키마 구성을 검사하고 PreparePattern은 정규식을 준비합니다. 두 Check 오버로드는 오류 메시지와 선택적 TlxImportViolationKind를 동반한 Boolean을 반환합니다 |
TlxImportRuleFlags | irRequired, irTextLength, irPattern, irUnique, irCallback은 기존 검사를 유지합니다. irValueType는 ValueKind를, irValueRange는 구성된 경계를 켭니다. 플래그가 없는 열은 검사하지 않습니다 |
TlxImportValueKind | ivkAny는 지원되는 유한 스칼라 값을 받고, ivkNumber는 유한 숫자 Variant를 받으며, ivkInteger는 정수 값까지 요구합니다. ivkDate는 날짜 Variant나 명시적으로 켠 Excel serial을 받고, ivkBoolean은 Boolean Variant를, ivkText는 문자열 Variant를 요구합니다 |
TlxImportDateSerialMode | idsNone은 기본값으로 숫자 값과 날짜를 구별합니다. idsExcel1900과 idsExcel1904는 irValueType에 ValueKind = ivkDate를 쓰는 열에 대해 숫자 값을 명시적으로 해석합니다 |
AddRule(Column)은 그 열의 이전 규칙을 교체해 해제합니다. 값 타입·범위·길이·패턴 술어는 누락 값, null, 빈 문자열을 건너뛰지만 irRequired는 이를 보고합니다. 유일성은 아래에서 설명하는 별개 정책을 유지합니다. 비어 있지 않은 공백은 여전히 값입니다. 숫자는 Boolean이 될 수 없고, 날짜는 일반 숫자가 될 수 없으며, 숫자처럼 보이는 문자열은 텍스트로 남습니다
MinimumValue나 MaximumValue를 할당하면 그 경계가 켜지고, HasMinimum이나 HasMaximum으로 다시 끌 수 있습니다. 두 경계 포함 스위치의 기본값은 True입니다. 경계는 유한한 형식화 숫자나 날짜여야 하고 두 경계는 비교 가능하며 빈 구간이 아닌 구간을 기술해야 합니다. 뒤집히거나, 없거나, 호환되지 않거나, 빈 경계는 워크시트 검증이 시작되기 전에 예외를 발생시킵니다
숫자 경계는 숫자 값을, 날짜 경계는 날짜를 비교합니다. 정수 간 비교는 Int64와 UInt64의 모든 비트를 보존합니다. 호환되지 않는 범주의 값은 범위 검사에 실패합니다. 텍스트 길이와 정규식 술어는 계속 스칼라의 텍스트 표현을 검사하고, 정규식 검사는 기존 IsMatch 동작을 유지하므로 전체 텍스트가 일치해야 할 때는 ^...$ 같은 앵커를 쓰세요. 잘못된 정규식은 호환성을 위해 패턴 검사를 비활성화합니다
날짜 서식 Excel 값
Excel에서 가져온 셀은 숫자 서식이 날짜를 표시하더라도 숫자 serial을 담을 수 있습니다. 그것이 받아들이는 가져오기 스키마라면 serial 모드를 명시적으로 고르세요. 모드는 검증에만 영향을 주고 저장된 셀 값은 절대 바꾸지 않습니다
Rule := Validator.AddRule(4); Rule.Flags := [irRequired, irValueType, irValueRange]; Rule.ValueKind := ivkDate; if Sheet.Workbook.Date1904 then Rule.DateSerialMode := idsExcel1904 else Rule.DateSerialMode := idsExcel1900; Rule.MinimumValue := VarFromDateTime(EncodeDate(2026, 1, 1)); Rule.MaximumValue := VarFromDateTime(EncodeDate(2026, 12, 31));
VarFromDateTime은 Variants에, EncodeDate는 SysUtils에 선언되어 있습니다. 숫자 serial은 음수가 아니어야 하고 10000년 1월 1일 전에 해석되어야 합니다. 소수 serial은 시각 부분을 유지합니다. 1900 체계는 60(포함)부터 61(미포함) 직전까지 모든 serial을 거부합니다. 그 구간은 가상의 윤날을 뜻합니다. 1904 체계는 serial 0을 1904년 1월 1일로 매핑합니다
날짜 경계는 시각 부분을 포함하므로, 12월 31일 자정으로 설정한 최댓값은 그날의 이후 시각을 제외합니다. 마지막 날 전체를 받아들여야 한다면 다음 해 1월 1일을 제외 상한으로 쓰세요. 10/08/2026 같은 텍스트 날짜는 구성된 serial 모드와 무관하게 텍스트로 남습니다
복합 유일성과 열 간 비교
AddUniqueRule(const AColumns: array of Integer): TlxImportUniqueRule | 정렬되고 비어 있지 않은 서로 다른 열 목록 위에 독립적인 튜플 제약을 추가합니다. Name이 규칙을 식별하고, Title이 메시지 접두어가 되며, ColumnCount와 0 기반 Columns[Index]가 멤버를 노출합니다. SkipIncompleteRows 기본값은 True입니다 |
AddCrossColumnRule(ALeftColumn, ARightColumn: Integer; AComparison: TlxImportComparison): TlxImportCrossColumnRule | 읽기 전용 LeftColumn, RightColumn, 편집 가능한 Comparison, Name, Title, SkipBlankValues(기본값 True)로 같은 행 비교를 추가합니다 |
TlxImportComparison | icEqual, icNotEqual, icLess, icLessOrEqual, icGreater, icGreaterOrEqual이 관계를 고릅니다. 숫자 쌍과 날짜 쌍은 값을 비교하고, Boolean 쌍은 False를 True보다 앞세우며, 문자열 쌍은 대소문자 구분 UTF-16 코드 단위를 서수적으로 비교합니다 |
복합 키는 각 멤버의 정확한 Variant 타입과 텍스트 ID를 유지합니다. Integer(1), Double(1), 문자열 '1', Boolean, 날짜는 서로 다른 멤버입니다. case folding, 유니코드 정규화, 로캘 파싱, 구분자 모호성은 없습니다. ('ab', 'c')와 ('a', 'bc') 같은 조합은 다른 채로 남고, 각 검증 패스는 새 튜플 인덱스로 시작합니다
SkipIncompleteRows = True이면 누락, null, 빈 문자열 멤버가 있는 행은 튜플 유일성에서 제외됩니다. False로 두면 그런 멤버를 원래 Variant ID로 포함합니다. 중복은 첫 튜플 열을 셀 주소로 보고하고 FirstDuplicateRow로 첫 일치 행을 알려 줍니다
기존 단일 열 irUnique는 텍스트 기반 대소문자 무시 매칭 동작을 유지하고 누락이나 null 값을 건너뜁니다. 한 열에 엄격한 형식화 ID가 필요하면 AddUniqueRule([Column])을 쓰세요
열 간 비교는 문자열→숫자, 숫자→Boolean, 일반 숫자→날짜 강제 변환을 절대 하지 않습니다. 섞인 호환되지 않는 범주는 icNotEqual에서도 실패합니다. 문자열 비교는 결합형·분해형 유니코드를 구별하고 삽입된 NUL 문자를 보존하며 짧은 접두어 우선 순서를 사용합니다. SkipBlankValues = False이면 어느 쪽 빈 피연산자든 열 간 위반이 됩니다
구조화된 결과와 수정 통합 문서
TlxImportViolation | Row, Col, SheetName, Address가 셀을 식별하고 Address는 A1 표기입니다. ValueText와 ErrorText는 표시 정보를 담고, RuleName과 Kind는 구성된 규칙과 실패 범주를 식별합니다. RelatedColumn은 열 간 실패의 둘째 피연산자를, FirstDuplicateRow는 유일성 실패의 원래 행을 식별합니다 |
TlxImportViolationKind | ivRequired, ivTextLength, ivPattern, ivUnique, ivCallback, ivValueType, ivValueRange, ivCellError, ivFormulaCacheMissing, ivCompositeUnique, ivCrossColumn이 지원되는 실패 범주를 구별합니다 |
Check(Sheet)는 위반 수를 반환하고, ViolationCount와 0 기반 Violation(Index)가 보고서를 열거합니다. 한 열 규칙은 첫 실패 술어를 보고하고, 독립 구성된 튜플·비교 규칙은 같은 셀에 위반을 더 추가할 수 있습니다. 호출자가 안정적인 애플리케이션 규칙 식별자를 필요로 하면 의미 있는 Name 값을 지정하세요
수식 셀은 저장된 캐시 값으로 검증됩니다. 저장된 캐시 결과가 없는 수식은 ivFormulaCacheMissing을, 오류 결과는 ivCellError를 보고합니다. 새 수식 결과가 필요하면 검사 전에 명시적으로 재계산하세요. 검증은 외부 소스에 접근하거나 수식 정의를 바꾸거나 캐시 없는 수식을 평가하지 않습니다
OnVerifyCell은 TlxImportVerifyCell 콜백 시그니처를 유지하며, 적용 가능한 열 술어와 유일성 검사가 성공한 뒤 실행됩니다. Boolean을 반환하고 애플리케이션 오류 메시지를 설정할 수 있습니다. 콜백은 통합 문서와 검증 스키마를 바꾸지 않아야 하고 통합 문서 쓰기는 읽기 리스에 의해 거부됩니다. 콜백 예외는 전파되고 리스는 해제되어 이후 작업에 쓸 수 있습니다
Check는 절대 주석 달기, 행 삭제, 패킹 값 구체화를 하지 않습니다. 검사 뒤 Annotate로 빨간 폰트를 적용하고 기존 메모에 오류 텍스트를 덧붙이거나, KeepOnlyViolations를 명시적으로 호출해 위반하지 않은 행을 제거하고 수정 통합 문서를 만드세요. 이 메서드들은 제공된 워크시트를 수정하므로 보고서를 검토한 뒤 의도한 통합 문서에 호출하세요
검증은 동기 호출 동안 워크시트와 통합 문서를 빌려 씁니다. 호출자의 개체 소유권을 채택하거나 인터페이스 소유 통합 문서를 요구하지 않습니다. 읽기 리스가 검사 내내 관련 저장 셀 스냅샷과 저장 수식 캐시 접근을 보호합니다
외부 링크 저장 정책
TXLSExternalLinkUpdateMode = (xluPromptUser, xluNever, xluAlways);
property IXLSWorkbook.SaveExternalLinkValues: Boolean;
property IXLSWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
property TXLSXWorkbook.SaveExternalLinkValues: Boolean;
property TXLSXWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
xluPromptUser를 사용합니다. xluNever 와 xluAlways 는 통합 문서에 저장된 업데이트 기본 설정만 변경할 뿐 외부 파일 또는 네트워크 접근을 허가하거나 시작하지 않습니다
계산 감사 및 통합 문서 힌트
function TXLSWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.RunCalculationAudit(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.FormulaIsVolatile(Formula: WideString): Boolean;
function TXLSWorkbook.AuditOverlayHash(SheetIndex, Row, Col: Integer): Integer;
function TXLSWorkbook.AuditOverlayRead(SheetIndex, Row, Col: Integer; var Value: Variant): Boolean;
procedure TXLSWorkbook.AuditOverlayWrite(SheetIndex, Row, Col: Integer; const Value: Variant);
procedure TXLSWorkbook.AuditOverlayClear;
TXLSCalculationAuditIssueKind = (xlcaiCacheMismatch, xlcaiParseFailure,
xlcaiMissingFunction, xlcaiMissingName, xlcaiUnsupportedArguments,
xlcaiCircularReference, xlcaiExternalReferenceDenied,
xlcaiExternalReferenceMissing, xlcaiDataTableSkipped, xlcaiCancelled,
xlcaiInternalFailure);
TXLSCalculationAuditIssue = record
Kind: TXLSCalculationAuditIssueKind;
SheetIndex: Integer;
SheetName: WideString;
Row: Integer;
Col: Integer;
Formula: WideString;
Symbol: WideString;
Expected: Variant;
Actual: Variant;
ResultCode: Integer;
Stack: WideString;
ExternalTarget: WideString;
end;
TXLSCalculationAuditIssues = array of TXLSCalculationAuditIssue;
TXLSRecalcAuditProgress = procedure(ASender: TObject;
ACurrent, ATotal: Integer; var ACancel: Boolean) of object;
property WorkbookCodeName: WideString;
property CalculationThreadMode: TXLSCalculationThreadMode;
property ForceFullCalculationState: TXLSOptionalBooleanState;
property RefreshAllOnLoadState: TXLSOptionalBooleanState;
RecalcAndVerify 는 수식 기호 실패와 캐시 값 불일치를 워크시트 좌표, 수식, 기호, 기대값과 실제값, 제한된 잘림 정보를 갖춘 안정적인 구조화 범주로 묶되, 캐시와 통합 문서 의미는 그대로 둡니다. RecalcAndVerifyEx 는 심층 감사를 수행합니다. 종속성 그래프를 통해 모든 수식을 한 번씩 평가해 격리된 결과 오버레이에 담으므로 종속 셀이 오래된 캐시 대신 이번 패스의 값을 읽고, 평가 실패(지원하지 않는 인수, 순환 참조, 거부되었거나 누락된 외부 참조, 건너뛴 데이터 테이블, 취소, 내부 실패)를 결과 코드로 분류하며, 실패마다 크기가 제한된 호출 스택을 기록하고, 이슈 예산과 진행/취소 싱크를 존중합니다. 변경되지 않은 통합 문서 구조에 대해 패스가 완전히 성공한 뒤 ApplyResults 가 재계산된 값을 원자적으로 커밋하는 경우를 제외하면 읽기 전용으로 유지됩니다AbsoluteTolerance 와 RelativeTolerance 는 불일치 보고를 제어하는 것이지, 중간 계산 값이나 명시적인 캐시 적용을 제어하는 것이 아닙니다
숫자 결과의 경우 불일치로 간주하려면 절대 차이가 AbsoluteTolerance 를 넘고, 상대 허용 오차가 활성화된 경우 RelativeTolerance * max(abs(Expected), abs(Actual))
도 넘어야 합니다
어느 한 임계값에 일치하는 차이는 허용됩니다. 그래도 변경된 값은 감사 오버레이에 들어가므로 종속 수식은 현재 계산 값을 보게 되고, 차이가 보고 기준에 미치지 못해도 ApplyResults 는 그 값을 커밋합니다
읽기 전용 감사는 저장된 캐시를 절대 변경하지 않습니다TXLSCalculationAuditReport.Issues 의 각 요소는 TXLSCalculationAuditIssue입니다. Kind 는 xlcai* 범주 중 하나를 선택하고, Expected / Actual 은 캐시 불일치 시 비교된 값을 전달하며, Stack 은 Sheet!A1 > Sheet!B2 형태로 표현되는 크기 제한 평가 호출 체인(최외곽 프레임이 먼저)이고, ExternalTarget 은 외부 참조 이슈의 외부 통합 문서를 설명합니다. TXLSRecalcAuditOptions.OnProgress 는 TXLSRecalcAuditProgress / ACurrent 노드 진행 상황을 받는 ATotal 싱크이며, ACancel 을 설정하면 다음 노드 경계에서 감사를 중단하고 xlcaiCancelled 이슈 하나를 남깁니다RunCalculationAudit 는 통합 문서 수준 감사 래퍼가 위임하는 엔진 진입점이며 동일한 옵션 레코드를 받습니다. FormulaIsVolatile 는 수식이 매 패스마다 재계산을 강제하는지( NOW, RAND, TODAY, OFFSET, INDIRECT같은 호출이나 해석할 수 없는 참조)를 보고합니다AuditOverlayWrite 는 셀 하나의 대체 값을 저장하고(계산기 관례에 맞춘 1기반 시트 인덱스, 0기반 행과 열), AuditOverlayRead 와 AuditOverlayHash 가 이를 조회하며, AuditOverlayClear 는 레이어를 비웁니다. 오버레이된 값은 일반 셀 값 getter가 반환하므로 재계산과 심층 감사가 워크시트 셀을 변경하지 않고도 그 값을 관찰하고, 오버레이를 지우면 저장된 값이 복원됩니다테이블 수식 및 IME 상태
property TXLSXTable.ColumnCalculatedFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TXLSXTable.ColumnTotalsFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TDataValidation.ImeMode: TXLSDataValidationImeMode;
property TXLSXDataValidation.ImeModeKind: TXLSDataValidationImeMode;
SaveExternalLinkValues 를 False 로 설정하면 클래식 XCT 및 CRN 레코드 또는 XLSX 외부 통합 문서 sheetDataSet 하위 트리가 생략되지만, 링크 대상, 시트 이름, 외부 정의 이름, 관계, 수식 참조, 알 수 없는 XML 및 인메모리 캐시는 유지됩니다. 동일한 통합 문서에서 이 속성을 True 로 되돌리면 유지된 캐시를 다시 직렬화할 수 있습니다
웹 추가 기능 작업 창 검사 및 제거
function IXLSWorkbook.HasWebAddinTaskPanes: Boolean;
function IXLSWorkbook.WebAddinTaskPaneCount: Integer;
function IXLSWorkbook.RemoveWebAddinTaskPanes: Integer;
function TXLSXWorkbook.HasWebAddinTaskPanes: Boolean;
function TXLSXWorkbook.WebAddinTaskPaneCount: Integer;
function TXLSXWorkbook.RemoveWebAddinTaskPanes: Integer;
1303 을 추가하고 변경 전에 예외를 발생시키며, 클래식 XLS 및 ODS는 패키지를 검사하지 않고 False, 0및 -1 을 반환합니다
통합 문서 개체 표시 정책
TXLSObjectDisplayMode = (xlsodmShowAll, xlsodmShowPlaceholders,
xlsodmHideAll);
property IXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSXWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSPaginationModel.ExportObjectPlaceholders: Boolean;
property TXLSPDFExport.ExportObjectPlaceholders: Boolean;
property TXLSSvgExport.ExportObjectPlaceholders: Boolean;
property TXLSPageImageExporter.ExportObjectPlaceholders: Boolean;
property TXLSPrintDocument.ExportObjectPlaceholders: Boolean;
property TXLSXHtmlExportOptions.ExportObjectPlaceholders: Boolean;
workbookPr.showObjects로 매핑합니다. 값이 없으면 xlsodmShowAll이 기본이고, 건드리지 않은 예약된 클래식 페이로드와 지원되지 않는 XLSX 토큰은 무손실로 유지되며, 명시적 할당은 정규화된 값만 내보냅니다
ExportObjectPlaceholders 를 설정하면 이미지 페이로드를 디코드하거나 차트 장면을 구성하지 않는 동일한 저비용 정책을 요청합니다
xlsodmHideAll 은 렌더링이 시작되기 전에 그리기 컬렉션과 개체 기반 범위 확장을 차단합니다. 통합 문서 변환은 세 상태를 모두 전달하고, ODS는 자리 표시자 모드에서 완전한 그리기를 쓰며 hide-all 모드에서는 그리기와 미디어 출력을 생략하고, 워크시트 배경은 독립적으로 유지됩니다
렌더링 보정 값 및 스냅샷
TXLSRenderCalibration = record
WidthCorrection: Double;
HeightCorrection: Double;
LineSpacing: Double;
CellMarginFactor: Double;
ScreenScaling: Integer;
MeasurementDpi: Integer;
end;
function XLSDefaultRenderCalibration: TXLSRenderCalibration;
function XLSValidateRenderCalibration(const AValue: TXLSRenderCalibration;
out AInvalidField: TXLSRenderCalibrationField): Boolean;
1, 1, 1, 1, 100, 96입니다. 너비 및 높이 보정은 0보다 크고 2보다 작아야 하며, 줄 간격은 (0, 4], 셀 여백은 [0, 4], 화면 배율은 [100, 500] 퍼센트, 측정 DPI는 [36, 2400]RenderCalibration, CaptureRenderCalibration및 ResetRenderCalibration 멤버를 노출합니다. 전체 레코드 할당은 변경 전에 검증하며, 각 캡처는 하나의 렌더링 작업에 대한 관례상 불변인 독립적인 값 스냅샷을 반환합니다
렌더링 지오메트리 및 글꼴 측정
TXLSRenderGeometryBackend = (xlsrgbAutoFit, xlsrgbPagination, xlsrgbPdf,
xlsrgbSvg, xlsrgbBitmap, xlsrgbPrintPreview, xlsrgbViewer, xlsrgbHtml);
TXLSRenderFont = record
Name: WideString;
Size: Double;
Styles: TXLSRenderFontStyles;
Charset: Byte;
end;
function CreateXLSRenderGeometry(
const ACalibration: TXLSRenderCalibration;
AWorkbookGeneration: UInt64;
ABackend: TXLSRenderGeometryBackend;
ACacheCapacity: Integer = 4096): IXLSRenderGeometry;
property TXLSHTMLExport.RenderGeometry: IXLSRenderGeometry;
property TXLSXHtmlExportSession.RenderGeometry: IXLSRenderGeometry;
IXLSRenderGeometry 는 하나의 불변 보정 값, 통합 문서 세대, 백엔드 식별자, 측정 서비스, 경계가 있는 작업 로컬 메트릭 캐시를 소유합니다. CreateXLSRenderGeometry는 GDI를 쓰고, 네이티브 Linux 또는 macOS에서 lxPortableCairo의 CreateXLSPortableCairoRenderGeometry는 FreeType/HarfBuzz가 있는 명시적 폰트 바이트를 씁니다. MeasureText 는 픽셀 너비, 높이, 줄 높이, 어센트, 디센트 및 줄 수를 반환하고, MaximumDigitWidthPixels, ColumnWidthToPixels, PixelsToColumnWidth, PointsToPixels, PixelsToPoints및 UsableCellWidthPixels 는 공유 지오메트리 변환을 제공합니다
MarkSheet 측정을 포함하여 각 공용 작업에 대해 하나의 서비스를 캡처하고, TXLSPaginationModel.Build 는 선택된 RenderBackend에 대해 하나의 서비스를 캡처합니다. PDF, SVG, 비트맵, 인쇄 미리 보기, 통합 문서 뷰어 및 HTML 진입점은 출력 전에 자체 백엔드를 선택하고, 통합 문서 보정 값을 변경해도 기존 스냅샷은 변경되지 않으며, 출력은 워크시트 크기를 쓰지 않습니다
xlsrgbHtml 서비스를 캡처하고, 증분 TXLSXHtmlExportSession 은 BeginExport 에서 한 번 캡처하여 모든 시트에 해당 스냅샷을 재사용합니다. 두 내보내기 모두 유지된 서비스를 RenderGeometry 를 통해 노출하여 보정 및 캐시 진단에 사용할 수 있습니다
IXLSRenderGeometry 속성인 WorkbookGeneration, CacheCapacity및 CacheEntryCount 는 진단을 위해 바인딩된 세대와 캐시 충전 상태를 보고하고, ImplicitWidthMaximumDigitWidthPixels 는 암시적 열 너비 에뮬레이션의 기반이 되는 숫자 폭 측정값을 반환합니다
MeasureText 는 TXLSRenderTextMetrics 멤버가 TXLSRenderFont 플래그 집합(굵게, 기울임, 밑줄, 취소선)인 Styles 로부터 TXLSRenderFontStyle 레코드(픽셀 너비, 높이, 줄 높이, 어센트, 디센트, 줄 수)를 채웁니다
가져오기, 코드 생성, 비교 및 모니터링
TXLSHTMLImport | LoadFromHTML 오버로드는 스트림 또는 파일에서 워크시트로 HTML 표 콘텐츠를 가져오며, 시작 좌표, 표 선택 및 소수점 구분 기호를 선택적으로 지정할 수 있습니다 |
TXLSCodeGen | Language (타입 TlxCodeGenLanguage: lcgDelphi 또는 lcgCppBuilder)는 생성되는 문의 소스 방언을 선택하고, GenerateToList 는 생성된 통합 문서 코드를 문자열 목록에 쓰며, TlxCodeGenOptions 는 병합, 열 너비, 숫자 형식(cgoMerges, cgoColumnWidths, cgoNumberFormats. 시트와 셀은 항상 내보냄)으로 출력을 넓힙니다 |
TXLSXWorkbookCompare | Compare는 형식화된 저장 셀, 수식 텍스트, 시트 존재 여부, 병합을 비교합니다. Options는 수식 캐시, 기본 셀 스타일, 행·열 지오메트리를 더하고, SetNumericTolerance가 숫자 동등성을 구성하며, Count, Diff, Report가 순서가 보존된 결과를 노출합니다. 통합 문서 비교를 참고하세요 |
TXLSFileMonitor | IntervalMs 는 폴링 간격을 선택하고 SynchronizeEvent 는 동기화된 콜백 전달을 선택합니다. OnFileChanged 핸들러는 모니터를 비활성화하거나 파괴할 수 있고, FileName 을 변경해 다른 파일 감시를 시작할 수 있습니다 |
TXLSCSVLoader and TXLSCSVSaver | 로더는 구분자로 나뉜 텍스트를 메모리상의 Variant 그리드로 파싱합니다. ParseFile 과 ParseStream 이 그리드를 채우고 CellValue, RowCount, ColCount 가 이를 다시 읽으며, 구분자(ValueSeparator)와 인코딩(TXLSCsvEncoding: 시스템 ANSI, UTF-16, UTF-8)은 자동으로 감지하고 타입 승격은 DetectTypes 와 열별 ColumnTypes 항목(TXLSCsvColumnType: auto, text, number, date, boolean, skip)으로 선택적으로 제어합니다. SkipRows, AutoTrim, LocaleTolerantNumbers, FieldWidths 는 고정 폭과 로캘 처리를 세밀하게 조정합니다. TXLSCSVSaver.SaveAs 는 RFC 4180 인용 규칙으로 그리드를 다시 쓰고 QuoteAllStrings 는 강제 인용을 지시합니다. TXLSTSVSaver 는 탭으로 구분된 출력을 위해 세이버에서 파생됩니다 |
통합 문서 비교
lxCompare의 TXLSXWorkbookCompare는 수식을 재계산하거나 어느 통합 문서도 수정하지 않고 두 TXLSXWorkbook 인스턴스를 비교합니다. 시트는 대소문자 무시 이름으로 짝을 이루고, 시트 순서만 바꾸는 것은 차이를 만들지 않습니다
Options 기본값은 빈 집합이고 두 허용 오차의 기본값은 0입니다. 기본 비교는 추가·제거된 시트, 추가·제거된 저장 셀, 바뀐 형식화 리터럴 값, 바뀐 수식 텍스트, 추가·제거된 병합 범위를 보고합니다
리터럴 비교는 숫자, 텍스트, Boolean 값, 날짜, 오류, 빈 칸을 구별합니다. 숫자 1은 텍스트 '1'과 다르고, Boolean은 자기 텍스트 철자와 다르며, 날짜는 자기 타입을 유지하고, 오류는 저장된 오류 코드로 비교합니다. 값이 같은 숫자 저장 타입은 동등하게 비교되지만, 정확 비교에서 서로 다른 Int64 값은 계속 구별됩니다
lcoFormulaCachedResults | 수식 텍스트가 일치하는 셀에서 기존 캐시 결과를 비교하고, 없거나 무효화된 캐시와 사용 가능한 캐시를 구별합니다. 같은 형식화 값을 가진 로드·계산 캐시는 동등하게 비교됩니다 |
lcoCellStyles | 일치하는 저장 셀 좌표에서 해석된 기본 스타일(폰트, 채우기, 그라디언트, 테두리, 정렬, 숫자 서식, 셀 보호)을 비교합니다. 무관한 스타일 풀 삽입 순서는 차이를 만들지 않고, 테마 색은 각 통합 문서의 현재 테마 기준으로 해석됩니다 |
lcoAxisGeometry | 유효 행 높이, 열 너비, 숨김 플래그, 윤곽선 수준, 축소 플래그, 워크시트 기본값을 비교합니다. 유효 기본값과 같은 명시적 크기는 암시적 크기와 동등하게 비교됩니다 |
lcoDefinedNames | 통합 문서 및 워크시트 범위 이름과 그 수식 정의, 표시 여부, 메모, 매크로 플래그를 비교합니다. 범위는 워크시트 이름을 따르고, 삽입 순서는 차이를 만들지 않습니다 |
lcoDataValidations | 저장 순서대로 유효성 검사 정의(정규화된 대상 범위, 수식, 연산자, 프롬프트, 오류 메시지, 제어 플래그)를 비교합니다. 한 정의 안에서 대상 범위 순서를 바꾸는 것은 차이를 만들지 않습니다 |
lcoConditionalFormats | 저장 순서대로 조건부 서식 정의(유효 우선순위, stop-if-true 동작, 대상 범위, 수식, 차등 스타일, 지원되는 색 눈금·데이터 막대·아이콘 집합 설정)를 비교합니다. 스타일 풀과 인덱스 팔레트 식별자는 의미 값으로 해석됩니다 |
lcoTables | 이름으로 표를 짝짓고 범위, 헤더, 합계, 스타일 설정, 메모, 열 이름, 레이블, 수식, 배열 플래그, 고유 이름, 연결 이름, 필터 조건, 정렬 조건을 비교합니다. 표 ID, 열 ID, 삽입 순서는 차이를 만들지 않지만, 색 필터와 정렬 차등 스타일 ID는 모양으로 해석됩니다 |
lcoDrawings | 드로잉 순서대로 형식화된 드로잉 정의를 비교하며 그룹 자식 순서와 차트 plot 그룹 순서를 유지합니다. 지원되는 정식 정의는 이미지, 텍스트 상자, 차트, 그룹, 완전한 형식화 Slicer 뷰, 형식화 타임라인 뷰를 커버하고, 불투명하거나 지원되지 않는 드로잉 노드는 EXLSSemanticSnapshot을 발생시킵니다 |
lcoBlankStyleRegions | 양쪽 모두 저장 셀이 없는 좌표에서 해석된 기본 스타일(워크시트 기본값과 가상 스타일 오버레이 포함)을 비교합니다. 동등한 사각형 분할은 동등하게 비교되고, 인접한 동일 변경은 셀을 구체화하지 않고 사각형으로 합쳐집니다 |
lcoRichTextRuns | 일치하는 저장 텍스트 셀에서 유효 run 폰트와 텍스트를 비교하고, 생략된 run 속성에 기본 폰트를 상속하며, 빈 run은 무시하고, 유효 폰트가 같은 인접 run을 합칩니다. 평문 텍스트는 동등한 기본 폰트 리치 텍스트 run과 일치합니다 |
lcoPivotTables | 이름으로 형식화된 피벗 테이블 정의를 짝짓고 소스 바인딩, 레이아웃, 필드, 정렬된 뷰 멤버, 데이터 집계, 필터, 그룹화 참조, 계산 정의, 스타일, 네이티브 구체화 플래그를 비교합니다. 캐시와 공유 멤버 ID는 소스 ID와 형식화 값으로 해석됩니다 |
lcoPivotCaches | 소스 ID로 로컬 형식화 피벗 캐시 정의를 짝짓고 새로 고침 메타데이터, 필드 메타데이터, 그룹화된 레이블과 범위, 순서 없는 공유 멤버 도메인, 순서 있는 형식화 레코드 값을 비교합니다. 숫자·텍스트·Boolean·날짜·오류·빈 멤버는 계속 구별되고, 날짜는 binary64 정밀도를 유지하며, 캐시 ID와 공유 멤버 슬롯 순서는 차이를 만들지 않습니다 |
lcoSlicerState | 이름이 있는 Slicer 뷰와 캐시를 짝짓고(표 열 또는 비-OLAP 피벗 바인딩, 연결된 피벗 테이블 이름, 형식화 멤버 선택, 교차 필터와 정렬 설정, 캡션, 스크롤 위치, 열 레이아웃, 크기, 스타일, 잠금·캡션 플래그, 앵커 지오메트리 포함) 비교합니다. 바인딩은 표·열·시트·캐시 ID를 해석합니다 |
lcoTimelineState | 이름이 있는 형식화 타임라인 뷰와 로컬 비-OLAP 캐시를 짝짓고(소스 필드와 연결된 피벗 테이블 바인딩, 활성 날짜 선택, 캡션, 수준, 워크시트 경계 포함) 비교합니다. 비활성 선택은 쓰이지 않는 날짜 끝점을 생략합니다 |
Options는 TlxCompareOption의 집합인 TlxCompareOptions 타입입니다. 옵션을 켜면 그 차이가 기본 비교에 더해집니다
SetFeatureLimits(MaxBytes, MaxItems)는 설정을 바꾸기 전에 두 양수 한도를 검증합니다. MaxFeatureBytes 기본값은 64 MiB, MaxFeatureItems 기본값은 1,000,000이며, 개별 setter도 같은 원자적 검증을 유지합니다
기능 예산은 두 통합 문서의 집계 분리 정식 바이트와 셉니다 항목(리치 텍스트 run, 필터 XML 노드, 피벗 필드, 도메인 멤버와 레코드 값, Slicer·타임라인 연결 포함)을 커버합니다. 리더는 네이티브 XML을 만들기 전에 개수와 큰 텍스트 입력을 검사하고, 경계가 있는 출력 스트림을 강제하며, 한도 초과 시 EXLSXSemanticBudget을 발생시킵니다
SetNumericTolerance(AbsoluteTolerance, RelativeTolerance)는 설정을 바꾸기 전에 두 인수를 검증합니다. 둘 다 유한하고 음수가 아니어야 하며, 개별 AbsoluteTolerance, RelativeTolerance setter도 같은 검증을 사용합니다
숫자 리터럴과 숫자 캐시 값은 절대 차이가 AbsoluteTolerance 이하이거나 더 큰 절대값 기준 상대 차이가 RelativeTolerance 이하일 때 동등하게 비교됩니다. 0 임계값은 정확한 동등성을 유지하고, 상대 계산은 극단적 부호 반대 값에서 오버플로를 피하며, 허용 오차는 텍스트를 강제 변환하지 않고 날짜·스타일·지오메트리에는 적용되지 않습니다
LeftName과 RightName은 Report 줄이 쓰는 선택적 표시 이름을 설정하며 기본값은 left, right입니다. 이름은 보고에만 영향을 주고 시트 짝짓기나 비교에는 영향을 주지 않습니다
Comparer := TXLSXWorkbookCompare.Create;
try
Comparer.Options := [lcoFormulaCachedResults, lcoCellStyles,
lcoAxisGeometry];
Comparer.SetNumericTolerance(0.001, 0.000001);
DifferenceCount := Comparer.Compare(LeftWorkbook, RightWorkbook);
for I := 0 to DifferenceCount - 1 do
begin
Entry := Comparer.Diff(I);
ReportLines.Add(Entry.Describe);
end;
finally
Comparer.Free;
end;
Compare는 차이 수를 반환하고, Count는 그 뒤에 개수를 읽으며, Diff(Index)는 0 기반 인덱싱으로 comparer 소유 TlxCompareDiff를 반환합니다. 항목을 읽는 동안 comparer를 유지하고, 또 다른 성공 비교 뒤에는 항목을 다시 얻으세요
각 항목은 Kind, Sheet, 해당 시 1 기반 Row·Col, Ref, LeftText, RightText, 형식화된 LeftKind / RightKind 값을 제공합니다. TlxCompareValueKind는 lcvNone, lcvBlank, lcvNumber, lcvText, lcvBoolean, lcvDateTime, lcvError, lcvFormula를 담고, lcvNone은 없는 쪽이나 값이 아닌 차이에 쓰입니다
TlxCompareKind는 lckSheetAdded, lckSheetRemoved, lckCellAdded, lckCellRemoved, lckValueChanged, lckFormulaChanged, lckMergeAdded, lckMergeRemoved를 유지하고 lckFormulaCacheChanged, lckStyleChanged, lckRowGeometryChanged, lckColumnGeometryChanged를 더합니다
스타일 차이는 LeftText와 RightText에 안정적인 정식 스타일 지문을 담고, 지오메트리 차이는 비교한 크기·숨김·윤곽·축소 상태를 담습니다. Ref는 영향받은 연속 축 구간을 식별하고, 행은 Row에 첫 행과 Col 0, 열은 Col에 첫 열과 Row 0을 설정합니다
기능 차이는 lckDefinedNameChanged, lckDataValidationChanged, lckConditionalFormatChanged, lckTableChanged, lckDrawingChanged, lckPivotTableChanged, lckPivotCacheChanged, lckSlicerChanged, lckTimelineChanged를 사용합니다. Change는 lccChanged, lccAdded, lccRemoved 중 하나이고, 존재하는 쪽은 자기 정식 정의 지문을, 없는 쪽은 빈 문자열을 담습니다
lckRichTextChanged는 셀 좌표에서 바뀐 run 정의를 식별하고 LeftText, RightText에 정식 run 지문을 담습니다. 숫자 허용 오차는 셀 리터럴과 수식 캐시에 적용되지만, 형식화된 기능 정의는 정확히 비교됩니다
기능 참조는 범위 지정 이름이나 표 이름을 식별하거나, 유효성 검사·조건부 서식·드로잉 정의에 1 기반 순서 위치를 씁니다. 정렬된 기능을 삽입하거나 이동하면 여러 위치가 바뀔 수 있고, 통합 문서 수준 이름 항목의 Sheet는 비어 있습니다
lckBlankStyleRegionChanged는 Row, Col, 경계 포함 LastRow, LastCol, A1 Ref로 바뀐 빈 사각형을 식별합니다. 저장 좌표는 일반 셀 비교와 lcoCellStyles가 처리하므로, 저장 셀과 빈 영역을 함께 검사하려면 두 스타일 옵션을 모두 켜세요
Describe는 항목 하나를 서식화하고, Report(List)는 서식화된 항목을 호출자 소유 TStrings에 덧붙입니다. 형식화 값 변경은 타입이 다를 때 타입 레이블을 포함하고, 결과는 셀 삽입 순서가 아니라 시트 이름, 행, 열, 차이 종류, 참조 순으로 정렬됩니다
비교는 읽기 리스를 잡고 분리된 커서 스냅샷으로 저장 셀을 순회하며 패킹 저장소를 유지합니다. 지오메트리는 저장 메타데이터 경계와 압축 반복 행 구간을 분할하고, 빈 스타일 비교는 사각형 백만 행 그리드를 훑지 않고 활성 사각형과 저장 셀 경계를 훑습니다. 작업량은 저장 기능, 영역 교차, 보고된 차이에 따라 늘어납니다
실패한 비교는 이전 성공 결과를 보존합니다. 잘못된 허용 오차 할당도 기존 설정과 결과를 유지하고, nil 통합 문서를 넘기면 결과를 지우고 0을 반환합니다
이 비교는 XLSX 파사드의 저장 셀 내용과 선택된 형식화 기능 정의를 다룹니다. 이름·유효성 검사·조건부 서식·표·차트 수식 철자는 의미 수식 파서를 통해 정규화되지만, 피벗 계산 수식은 저장된 정의 텍스트를 유지합니다
표 필터는 지원되는 사용자 지정·값 목록·날짜 그룹·색·아이콘·동적·top-count 형태와 정렬 조건을 받습니다. 독립 필터 열과 값 집합 항목은 순서를 정규화하고, Boolean 기본값과 숫자 철자는 정규화되며, 정렬 조건 순서는 여전히 의미가 있습니다
형식화된 피벗·Slicer·타임라인 비교는 새로 고치거나 가용성을 평가하지 않고 지원되는 로컬 워크시트 소스와 비-OLAP 바인딩을 해석합니다. 네이티브 Slicer 가용성 힌트는 파생된 표시 메타데이터이고, 멤버 선택과 인식된 네이티브 정렬 메타데이터는 비교 대상입니다
불투명한 네이티브 드로잉 속성, 불완전한 바이너리 피벗 모델, 외부 또는 OLAP 피벗 소스, 원시 피벗 테이블 보조 레코드와 확장 XML, 알 수 없는 필터 XML, 모델링되지 않은 Slicer·타임라인 확장 속성이나 자식은 EXLSSemanticSnapshot을 발생시킵니다. 그런 데이터의 보존이 의미적 동등성을 뜻하지는 않습니다
선택된 가져온 피벗 테이블·피벗 캐시 기능은 형식화 프로젝션을 비교하기 전에 보존된 네이티브 XML(중첩 필드 메타데이터와 캐시 레코드 포함)도 검증합니다. 알 수 없는 네임스페이스, 속성, 자식, 확장 페이로드는 같은 협조적 기능 한도 안에서 명시적으로 실패하고, 모델링된 Slicer 캐시 바인딩은 계속 지원됩니다
TSimpleDomNode.RawName은 리더가 정규화한 Name과 함께 원래 요소 QName을 노출해 기존 파서 이름 매칭을 바꾸지 않고 네임스페이스 민감 검사를 가능하게 합니다
통합 문서 설정과 불투명 패키지 메타데이터는 비교 밖에 있습니다. 기본 스타일 비교는 조건부 서식이나 테이블 스타일 모양을 평가하지 않고, 드로잉 비교는 의미 스냅샷의 지원되는 이미지·텍스트 상자·차트·정렬된 그룹 경계를 유지합니다
유효 리치 텍스트 속성
TMsoFbtOpt.StoredPids는 저장된 OfficeArt 속성 식별자를 정렬 순으로 반환하고, TMsoFbtSp.PersistentFlags는 속성이나 앵커를 할당하지 않고 네이티브 도형 플래그를 노출합니다
TMsoShapeContainer.HasPreservedObjectData는 보존된 OBJ 꼬리 바이트를 식별합니다. HasOrdinaryEmbeddedPictureObjectData는 그림 꼬리에 인식된 클립보드 형식과 0 그림 플래그 레코드만 있는지 검사하고, 연결되거나 알 수 없는 레코드는 페이로드를 복사하지 않고 거부합니다
TMSOShapeTextBox.HasValidTextRuns는 run을 만들지 않고 저장된 TXO run 경계와 예약 필드를 검사합니다. TMsoDrawing.HasUnmodeledAppearance은 형식화 파서가 건너뛴 네이티브 드로잉 데이터를 식별해, 캡처가 해소되지 않은 모양을 명시적으로 거부할 수 있게 합니다
TXLSXRichTextRun.BoldSet, ItalicSet, StrikethroughSet, UnderlineSet, VertAlignSet, ColorSet은 상속 폰트 속성과 명시적 재정의(false 플래그, none, baseline, 자동 색 포함)를 구별합니다. setter는 값이 새 run의 초기 기본값과 같아도 속성을 명시적 표시합니다
TXLSXRichText.HasUnsupportedAppearance는 형식화 run 모델이 표현할 수 없는 네이티브 리치 속성을 보고합니다. 포터블 캡처와 유효 리치 텍스트 비교는 그런 run을 명시적으로 거부하고, 지원되는 shared/inline run 속성과 공백은 가져온 의미론을 유지합니다
유효 리치 텍스트 비교는 인접한 동일 run을 합치기 전에 명시적 false 재정의를 적용합니다. 상속 속성과 명시적으로 지워진 속성은 공유 문자열 중복 제거와 지원되는 XML 라운드트립에서 계속 구별됩니다
TXMLReader.ResolveNamespaceUri(Prefix, Uri)는 리더 위치를 바꾸지 않고 현재 범위 안의 네임스페이스 바인딩을 해석하며, 바인딩이 없으면 false를 반환합니다. 빈 접두어는 기본 네임스페이스를 요청하고, 원시 QName은 네임스페이스 민감 검사에 계속 쓸 수 있습니다
불변 리치/씬 레코드, 캡처 소스 확장, HXRSNP02 전송 계약은 포터블 헤드리스 출력에 설명되어 있습니다
분리된 스타일과 축 검사
TXLSXWorksheet.ReadSemanticCellStyle(Row, Col)은 유효한 1 기반 좌표에 대해 분리된 TXLSSemanticCellStyle을 반환합니다. 저장·패킹 스타일, 워크시트 기본값, 적용 가능한 스타일 오버레이, 암시적 날짜 서식, 인덱스 색, 테마 색을 셀을 구체화하거나 스타일 풀을 바꾸지 않고 해석합니다. 공개 호출은 읽기 리스를 획득하고 조건부 서식과 테이블 스타일 규칙은 제외합니다
TXLSXWorksheet.GetStoredAxisSpans(IsRow)은 경계 포함 1 기반 FirstIndex, LastIndex를 가진 TXLSXAxisSpan 레코드 배열인 TXLSXAxisSpans를 반환합니다. 크기·숨김·윤곽·축소 메타데이터 발자국을 보고하고, 압축된 반복 행 높이 구간을 유지하며, 워크시트의 유효 기본값은 기존 속성으로 계속 접근할 수 있습니다
반환된 구간은 서로 겹치지 않는 정규화 분할이 아니라 저장 메타데이터 발자국을 기술합니다. 두 축을 비교하는 애플리케이션은 첫·마지막 경계를 합친 뒤 결과 구간마다 유효 상태를 한 번 검사하면 됩니다
TXLSXWorksheet.GetStoredStyleRegions은 압축된 가상 서식 발자국의 경계 포함 FirstRow, FirstCol, LastRow, LastCol을 담은 분리된 TXLSXStyleRegions를 반환합니다. 이 발자국은 겹칠 수 있고, 호출자는 ReadSemanticCellStyle로 유효 모양을 읽습니다
TXLSXWorkbook.ReadSemanticFeatures(Kind, Sheet, MaxBytes, MaxItems)은 안정적인 Key, 정식 Definition 바이트, 셉니다 ItemCount를 가진 분리된 TXLSXSemanticFeatures 항목을 반환합니다. 선택적 양수 한도의 기본값은 64 MiB와 1,000,000 항목입니다
TXLSXSemanticFeatureKind는 xlsxSemanticDefinedNames, xlsxSemanticDataValidations, xlsxSemanticConditionalFormats, xlsxSemanticTables, xlsxSemanticDrawings, xlsxSemanticPivotTables, xlsxSemanticPivotCaches, xlsxSemanticSlicers, xlsxSemanticSlicerCaches, xlsxSemanticTimelines, xlsxSemanticTimelineCaches를 담습니다
정의된 이름과 세 캐시 종류는 통합 문서 전체 범위를 쓰며 nil 시트를 허용합니다. 나머지 종류는 통합 문서에 속한 워크시트가 필요하고, 규칙과 드로잉은 저장된 순서를 유지하며, 반환된 배열과 버퍼는 호출자 소유 복사본입니다. 이 리더들은 읽기 리스를 획득하고 위에서 설명한 형식화 커버리지와 명시적 미지원 데이터 동작을 상속합니다
TXLSXWorksheet.ReadSemanticRichText(Row, Col, IncludePlainText, MaxBytes, MaxItems, ConsumedItems)은 1 기반 좌표의 분리된 정식 run 바이트를 반환하고, 리치 텍스트가 없고 IncludePlainText가 false면 빈 버퍼를 반환합니다. 선택적 ConsumedItems: PInteger가 캡처한 run 수를 받고, 평문 캡처는 패킹 저장소를 유지합니다
TXLSPivotCacheField.GroupItemTypes[Index]는 GroupItemLabels[Index]에 대응하는 형식화 종류를 노출하고, 저장된 그룹화 레이블 도메인 밖 인덱스는 거부합니다
수식 메타데이터와 피벗 조회 콜백
TXLSGetCellFormulaText과 TXLSCalculator.OnGetCellFormulaText은 1 기반 SheetIndex와 0 기반 Row/Col로 저장된 식 텍스트를 읽고, lxOk 또는 형식화 오류 코드를 반환하며 수식 숨김 보호를 존중합니다. TXLSGetPivotTable과 OnGetPivotTable은 1 기반 SheetIndex와 0 기반 범위 좌표로 빌려 온 표를 찾습니다
통합 문서 엔진은 일반·읽기 전용·격리 계산 컨텍스트에서 이 선택적 콜백들을 연결합니다. 콜백은 대상을 재계산하거나 피벗 소스를 새로 고치거나 소유권을 이전하지 않습니다
TXLSPivotDataConstraint는 FieldName과 형식화 Item을 저장하고, TXLSPivotDataConstraints가 field/item 쌍을 모읍니다. TXLSPivotTable.GetDataValue는 분리된 로컬 표/캐시 스냅샷에서 표시되는 지원 집계 하나를 조회하고, IntersectsQueryRange는 모델링된 보고서 필터 셀을 포함한 1 기반 워크시트 경계를 사용합니다
TlxPivotQueryBudget는 작업과 메모리 추정치를 동기로 받고 평가를 계속할 수 있는지 반환합니다. EXLSPivotQueryBudget와 EXLSPivotQueryUnsupported는 소진된 한도와 지원되지 않는 캐시·집계 모델을 구별합니다
TXLSPivotCache.QueryModelIsComplete는 디코딩된 조회 준비 상태를 BIFF 원시 재생 완전성과 별개로 기록합니다. QueryRecordsValid는 가져온 레코드 유효성을 노출하고, SetQueryRecordValidity는 레코드를 새로 고치지 않고 형식 리더 우선순위를 적용합니다
명시적 코드페이지 바이트
| 멤버 | 계약 |
|---|---|
XlsEncodeCodePage(Text, CodePage, MaxBytes = -1) | 명시적 0이 아닌 바이트 지향 페이지의 정확한 바이트로 RawByteString을 반환하고, 삽입된 null을 보존하며, 유니코드 라운드트립 동일성을 검증하고, 표현 불가능한 텍스트에 EConvertError를 발생시킵니다. 음수가 아닌 MaxBytes는 들어가는 가장 긴 완전 문자 접두부를 유지하고, -1은 길이를 무제한으로 둡니다. 검증은 잘라내기 전에 원본 텍스트를 커버합니다 |
XlsDecodeCodePage(Bytes, CodePage) | 명시적 바이트 인코딩에서 WideString을 반환하고 삽입된 null을 보존합니다. 잘못된 바이트 시퀀스는 설치된 디코더 동작을 따릅니다. 페이지 0과 UTF-16 페이지 1200은 거부됩니다. 이 API는 ANSI 로캘을 추론하거나 UTF-16 바이트 스트림을 다루지 않습니다 |
TXLSBlob.GetCompressedUnicodeString(Index, Count) | 정확한 BIFF8 압축 유니코드 U+0000~U+00FF 코드 단위를 반환하고, 삽입된 null을 보존하며, 요청한 바이트 범위를 검증하고, 그 바이트를 코드페이지로 해석하지 않습니다 |
TXLSBlob.AddRawString | AnsiString 코드페이지 변환 없이 정확한 인코딩 바이트를 덧붙이고 DataLength를 갱신합니다. 빈 입력은 바이트를 더하지 않습니다 |
TXLSCalculator.CodePage, TXLSFormula.FCodePage | 명시적 레거시 수식 바이트 인코딩을 선택하며 기본값은 CP1252입니다. 소유 클래식 통합 문서는 초기화되거나 SetCodePage가 호출될 때 자기 계산기를 동기화합니다 |
TXLSFontList.GetFont, TXLSNumFormatList.GetNumFormatBlob, TXLSStyles.GetStyleBlob | 선택적 CodePage 인수 기본값은 1252이며 BIFF5 텍스트를 인코딩합니다. BIFF8 출력은 유니코드로 유지됩니다 |
TMsoDrawing.StoreNotes | 선택적 CodePage 인수 기본값은 1252이며 유니코드 이전 주석 텍스트를 인코딩합니다. 기존 BIFF5 일반 주석 레코드 크기 한도는 유지되며, 그 레코드 형식에 없는 작성자·리치 텍스트·지오메트리 필드를 더하지 않습니다 |
TXLSCustomName.SetSourceData | 선택적 FileFormat과 CodePage 인수는 가져온 원시 NAME 바이트를 식별하며 기본값은 xlExcel97과 1252입니다. 원시 레코드는 형식과 레거시 인코딩이 요청 출력과 일치할 때만 재사용됩니다 |
TXLSFormulatArrayItem.GetDataSize, TXLSFormulatArray.GetDataSize, TXLSFormulatArray.GetData, TXLSFormulatArrays.GetDataSize, TXLSFormulatArrays.GetData, TXLSCompiledFormula.GetExternalData | 선택적 ACodePage 인수 기본값은 1252입니다. 레거시 문자열 배열 크기와 출력은 같은 인코딩 바이트 수를 쓰고, BIFF8 문자열은 유니코드로 유지됩니다 |
반환된 RawByteString은 AddRawString이나 바이트 지향 스트림 작업에 직접 넘기세요. 기본 AnsiString으로 변환하면 네이티브 FPC 시스템에서 바이트가 다시 인코딩될 수 있습니다
클래식 정의된 이름과 배열 수식 블록
TXLSCustomName deferred compilation | ClearDefinition은 저장된 정의 문자열과 가져온 원시 NAME 바이트를 유지하면서 컴파일된 RefersTo AST를 해제하고, Compile은 저장된 정의에서 AST를 다시 만들어 성공 여부를 보고하며, GetCompiledFormula은 자동으로 다시 컴파일하므로 지워진 이름은 다음 읽기에서 다시 해석됩니다. PeekCompiledFormula는 재컴파일을 유발하지 않고 현재 AST를 반환하고, StoredDefinition은 파싱되지 않은 정의 소스를 노출합니다 |
TXLSCustomName identity and flags | StoreIndex는 컬렉션 안에서 이름의 저장 위치를, NameID는 계산 엔진이 쓰는 통합 문서 고유 숫자 ID를 노출하고, IsHidden과 IsMacro는 BIFF NAME 레코드의 hidden·macro 플래그를 읽고 씁니다 |
TXLSFormulatArray.RowsCount, ColsCount | 파싱된 배열 수식 블록의 행·열 범위를 보고합니다. 둘 다 1부터 시작하며 내보내기 메서드가 전달하는 셀별 항목 도메인의 경계입니다 |
클래식 폰트, 서식, 스타일 풀
TXLSFontList stored font attributes | 인덱스 속성은 0 기반 목록 인덱스에서 저장된 폰트 키를 반영합니다. Name, Size, ColorIndex, Bold, Italic, Strikethrough, Underline이 OutLineFont, Shadow, SubScript, SuperScript, Family, CharSet과 함께 읽기 전용 검사를 위해 제공됩니다 |
TXLSNumFormatList.AddValue, FmtExists | AddValue는 서식 문자열을 등록하고 인덱스를 반환하며, 기본 제공 서식 철자를 정식 id에 매핑하고 날짜·시간 서식에 플래그를 붙입니다. FmtExists는 사용자 지정 서식 문자열이 이미 등록되어 있는지 보고합니다 |
TXLSNumFormatList.IsDateFormat, IsDateFormatValue | IsDateFormat은 인덱스에 저장된 서식이 날짜·시간 서식으로 플래그되었는지 보고하고, IsDateFormatValue는 서식 문자열을 직접 날짜·시간 토큰으로 검사합니다 |
TXLSStyles.AddStyle, AddBuiltinStyle | AddStyle는 XF 레코드 인덱스에 묶인 명명된 사용자 지정 셀 스타일을 등록하고, AddBuiltinStyle은 기본 제공 id와 행·열 수준 스타일이 쓰는 윤곽선 수준으로 기본 제공 셀 스타일을 등록합니다 |
TXLSStyles.BuiltinStyleName | 기본 제공 id 0~53의 정식 Excel 기본 제공 셀 스타일 표시 이름을 반환하는 class function입니다. 범위 밖 id는 빈 이름을 반환해 writer가 원시 builtin 바이트 형태로 폴백합니다 |
패키지 및 이진 저장소 도우미
TXLSXOpaquePackage | LoadWorkbookXmlMetadata 는 통합 문서 수준 XML 상태를 캡처하고, MarkAllPartsClean 은 더티 플래그를 초기화하며, WorkbookExtLstXml 및 WorkbookRootAttributesXml 은 보존된 통합 문서 XML 조각을 노출합니다. IsDiscardedPart 는 웹 추가 기능 정리와 같은 삭제 작업으로 파트 이름이 제거되었는지 보고합니다 |
TXLSFileStorage | Load, LoadFolder, Write및 WriteFolder 는 복합 파일 콘텐츠를 전송합니다. Child 및 Count 는 하위 항목을 열거하며, 각 항목은 명명된 저장소 노드인 TXLSFileItem 이고 그 TXLSFileStream 하위 클래스가 저장된 바이트를 TXLSBlob 으로 운반하며 DataSize 가 페이로드 길이를 보고합니다 |
TXLSBlob | Add 는 다른 blob을 추가하고, AddByte, AddWord, AddLong, AddDouble, AddString및 AddWideString 은 형식화된 값을 추가합니다. CopyData, CopyMem, FillByte, Write, Clear, Reset및 Dump 는 콘텐츠를 관리하며, Buff 및 DataLength 는 저장소를 노출합니다 |
TXLSBlobList | Append, AppendList, CopyData및 Write 는 항목을 결합하거나 내보냅니다. Entries 및 TotalSize 는 목록 상태를 노출합니다 |
TXLSWideStringBuilder | AddString 은 텍스트를 추가하고 Length 는 누적 문자 수를 보고합니다 |
그리기 및 통합 문서 뷰어 추가
TXLSFillFormat | PictureFill 은 그림 기반 도형 채우기를 구성하고, FillType 은 작성기가 내보내는 채우기 종류(단색, 그라데이션, 그림 또는 미리 설정된 질감)를 선택합니다 |
TXLSShapes | AddScrollBar 와 AddSpinner 는 폼 컨트롤을 만듭니다. 반환된 TXLSScrollBar 와 TXLSSpinner 개체가 컨트롤 지오메트리와 연결된 셀을 노출하고 스피너는 Min, Max, Inc 단계 한도를 추가합니다. 한편 RegisterScrollBar 와 RegisterSpinner 는 통합 문서에서 로드된 컨트롤을 등록합니다 |
TXLSWorkbookViewer | CanUndo와 CanRedo는 트랜잭션 히스토리 가용성을 보고합니다. ClearSelectedRange, CopySelectedRange, PasteSelectedRange, PasteText는 선택 범위에 동작하고, ReferencePickMode는 셀 또는 범위 참조를 대화형으로 선택할 수 있게 합니다 |
TXLSWorkbookEditHistory | lxWorkbookViewer의 헤드리스 콘텐츠 트랜잭션 엔진은 빌려 온 클래식 또는 XLSX 통합 문서를 바인딩하고, 범위 보호 사전 검사, 유니코드 텍스트 복사·붙여넣기, 범위 지우기, 작업당 하나의 undo/redo 트랜잭션을 제공합니다. 헤드리스 편집 트랜잭션을 참고하세요 |
TXLSCellContentSnapshot | 두 워크시트 클래스는 원래 워크시트의 1 기반 좌표에서 분리된 네이티브 콘텐츠 캡처와 복원을 위해 ReadCellContent(Row, Col)과 RestoreCellContent(Snapshot)을 노출합니다. 캡처는 수식을 평가하거나, 없는 셀을 만들거나, 패킹 저장소를 구체화하지 않으며, 불변 NativeData 페이로드는 리치 텍스트, 수식 캐시, 셀 스타일을 보존합니다. 직접 복원은 저수준 작업이므로 호출자가 보호와 구조 경계를 검증해야 합니다 |
페이지 매김, 이미지 출력 및 인쇄
XLSValidateCachedChartSceneModel, XLSRecordCachedChartScene | 셀을 해석하지 않고 캐시된 차트 메타데이터를 사전 점검하고, lxPortableChart에서 분리된 차트를 위해 경계가 있는 벡터·텍스트 프리미티브를 기록하며, TXLSPortableSceneObjects와 항목·바이트·텍스트 회계를 반환합니다. lxPagination 진입점은 기존 Windows 호출자를 위해 같은 공유 구현을 유지합니다. 현재 부분집합은 하나의 기본 plot 그룹을 가진 일반 세로 막대형, 가로 막대형, 꺾은선형, 분산형, 원형, 도넛형, 단일 계열 영역형 차트를 커버하며, 기록에는 검증된 네이티브 메타데이터, 유한하고 엄격하게 정렬된 캐시 점, 붙지 않은 차트 모델이 필요합니다. 캐시 차트 기록을 참고하세요 |
TXLSGraphicsBackend | DrawTiledImage 는 잘라낸 페이지 영역 전체에 시트 배경을 반복해 칠합니다 |
TXLSPaginationModel | CompactRangeMode, IncludeDrawings, IncludeGridlines, IncludeCellBorders및 PaintPageBackground 는 페이지 콘텐츠를 제어하고, RenderDPI, RenderColorMode및 RenderSession 은 출력 해상도, 색 처리, 활성 렌더 세션을 노출합니다 |
TXLSCellImageExporter | Measure 는 클래식 또는 XLSX 범위의 픽셀 크기를 계산합니다. ImageFormat, JpegQuality, MaxPixels, MaxBytes, IncludeObjects, IncludeGridlines, IncludeCellBorders, BackgroundColor, TransparentBackground, BeforePaint, AfterPaint및 PaginationModel 은 렌더링을 구성하고 관찰합니다 |
TXLSPageImageExporter | BeforePaint, AfterPaint, MaxPixels, MaxBytes, BackgroundColor및 TransparentBackground 는 페이지가 나뉜 이미지 내보내기에 동일한 페인트 훅과 출력 안전 한도를 적용합니다 |
TXLSPrintDocument | PrintWorksheet, PrintWorkbook및 PrintAllVisibleSheets 는 클래식 또는 XLSX 콘텐츠를 VCL 프린터로 보냅니다. FirstPage, PrintRangeOnly, Collate, Copies, OnBeforeNewPage및 OnAfterGeneratePage 는 인쇄 작업을 제어합니다 |
클래식 차트 모델 및 워크시트 차트 개체
TXLSXChartSeries | LineVisible, LineColorRGB, LineWidthPoints는 독립적인 계열 스트로크를 기술합니다. LineStyleSet, LineColorSet, LineWidthSet는 명시적 설정을 보존하고, EffectiveLineVisible은 레거시 채우기 전용 규약을 해석합니다. MarkerFillSet과 MarkerBorderSet은 명시적 검은색과 자동 마커 색을 구별하며, line과 scatter 포터블 기록은 2~72 포인트의 원 지름을 지원합니다. 색과 폭 setter는 변경 전에 검증하고 통합 문서 읽기 리스를 존중합니다 |
TXLSChartSeries | AddTrendline 과 AddErrorBars 는 형식화된 계열 주석을 만들고, TrendlineCount 와 ErrorBarCount 는 컬렉션 크기를 보고합니다. 기존 MarkerSize 필드는 raw BIFF twips를 유지하고, 읽기 전용 MarkerSizePoints getter는 소수 포인트 크기를 포함해 그 값을 20으로 나눠 반환합니다 |
TXLSChartAxis | HasAxcExtFlag 는 호출자가 비트 마스크를 직접 디코드하지 않아도 되도록 하나의 raw AXCEXT 플래그를 검사합니다 |
TXLSChartModel | AxisGroupCount 는 차트에서 디코드된 주 축 및 보조 축 그룹 수를 보고합니다 |
TXLSCustomChart | AddAreaData 는 저장 시 수식 재바인딩을 위해 미리 만들어진 영역 항목을 추가하고, ApplyDateAxisModel 은 형식화된 날짜 축 모델을 raw 차트 레코드에 적용합니다. GetStoredRecordInfo는 할당 없이 0 기반 레코드 ID와 바이트 수를 읽고, ReadStoredRecord(Index, MaxBytes)는 바이트 한도를 검사한 뒤 TXLSChartStoredRecord로 분리된 바이트를 반환하며, 수식을 평가하거나 캐시를 수정하지 않습니다 |
TXLSWorksheet | AddChartObject 는 워크시트에 차트 프레임을 배치하고 공유 차트 작성기에 연결합니다 |
TXLSXChartLayoutResolver | TryResolve 는 선택적 크기 검증과 함께 하나의 레이아웃 사각형을 해석하고, ResolveChart 는 차트, 제목, 범례, 플롯, 축 사각형을 계산합니다 |
형식화된 차트 디코드 모델
디코드된 차트 상태는 일반 레코드와 열거형으로 노출되므로 검사 코드가 raw BIFF 레코드를 직접 훑을 필요가 없습니다. TXLSChartInfo 는 TXLSChartTypeFamily (cfBar, cfLine, cfPie, cfArea, cfScatter, cfRadar, cfDoughnut, cfSurface, cfBubble)와 함께 디코드된 차트 요약을 전달하고, 각 계열은 TXLSChartSeriesType을 보고하며, TXLSChart3DState 와 TXLSChart3DInfo 는 3차원 뷰를 설명합니다. TXLSChartAxisType (catCategory, catValue, catSeries, catDate)와 TXLSChartLegendPosition 은 축과 범례를 분류하고, 날짜 축 모델은 TXLSChartDateUnit (xcduDays, xcduMonths, xcduYears)와 TXLSChartDateValues를 사용합니다. TXLSCustomChart 는 디코드된 모델을 TXLSChartInfo로 노출하며, 추세선과 오차 막대 주석은 각 계열에서 접근할 수 있는 형식화된 개체(TXLSChartTrendline, TXLSChartErrorBars)입니다
차트 작성 레코드
차트 시트와 작성기에 대한 작성은 개체 그래프 대신 일반 레코드를 받습니다. TXLSChartTrendlineInfo, TXLSChartErrorBarsInfo, TXLSChartDataLabelsInfo및 TXLSChartSeriesStyleInfo 는 TXLSWorksheets.AddChartSheet 와 공유 차트 작성기에 전달되는 계열 항목을 채우고, TXLSPivotChartInfo 는 차트가 피벗 테이블에 붙을 때 사용되는 피벗 차트 프레이밍을 설명합니다
클래식 차트 채우기 검사
TXLSCustomChart.GetChartModel은 복합 페이로드 항목 뒤에 오는 속성을 포함해 GelFrame 레코드에서 지원되는 네이티브 OfficeArt 속성 테이블과 3차 속성 테이블을 디코드합니다. 기존 작성기 표현은 계속 지원되고, 잘못된 테이블 경계는 이전 형식화 채우기를 그대로 두고 미지원 레코드를 보고합니다
차트 검사는 형식화된 상태를 추가하기 전에 완전한 저장 텍스트와 주석 페이로드를 검증합니다. 잘린 추세선 이름이나 데이터 레이블 구분자는 _UnsupportedSemanticRecordID로 자기 레코드 ID를 보고하고, nil이거나 크기가 부족한 SeriesText 헤더는 BIFF5와 BIFF8 양쪽에서 그 레코드를 미지원으로 보고합니다. 페이로드를 초과하는 선언된 series-text 범위는 EReadError를 발생시키고 부분 모델을 해제하며 저장된 차트 레코드는 그대로 둡니다
마커 getter와 채우기 검사는 raw 차트 저장소를 보존합니다. 선언된 모양 캡처 경로는 지원되는 코어 차트를 별도로 검증하고, 검증되지 않은 리치 제목이나 도형 확장 체크섬은 계속 미지원입니다
경계가 있는 저장 차트, 문자열, 폰트 리더
TXLSChartStoredBytes는 분리된 바이트 배열이고 TXLSChartStoredRecord는 RecordId와 Data를 담습니다. 이 리더들은 디코드된 차트 모델을 만들거나 수식을 평가하지 않고 보존된 소스 저장소를 검사합니다
| TXLSCustomChart.GetStoredRecordInfo | 페이로드를 복사하지 않고 0 기반 레코드 인덱스의 레코드 ID와 셉니다 바이트 길이를 반환합니다 |
| TXLSCustomChart.ReadStoredRecord | 인덱스와 음수가 아닌 MaxBytes를 검증한 뒤 페이로드 하나를 복사합니다. 기본 바이트 한도는 High(Int64)입니다 |
| TXLSCustomChart.ReadStoredFormulaLeafInfo | 정확한 소스 계산기와 음수가 아닌 바이트·텍스트 할당량으로 일관된 저장 BRAI 리프를 검사합니다. 외부 계산기나 번역 소유자는 미지원 리프를 반환하고, AllowUnboundBiff 기본값은 False입니다 |
| TXLSCustomChart.ReadStoredFormulaLiteral | 같은 출처와 할당량 검사를 거친 뒤에만 분리된 리터럴을 반환합니다. 미지원 리프는 EInvalidOperation을 발생시킵니다 |
| TXLSCustomChart.SourceBiffVersion, SourceCodePage | 보존된 차트 레코드의 읽기 전용 출처 정보입니다 |
| TXLSStringTable.GetStoredStringLength, ReadStoredString | 표의 1 기반 문자열 ID로 기존 UTF-16 저장소를 셉니다. 음수가 아닌 문자 할당량이 커버할 때만 복사합니다. 잘못된 ID와 불완전한 UTF-16 저장소는 거부됩니다 |
| TXLSFontList.GetStoredNameLength, ReadStoredName | 음수가 아닌 문자 할당량 아래에서 이름을 세거나 복사하기 전에 목록의 0 기반 인덱스에서 저장된 폰트 키를 검사합니다 |
| TMsoFbtOptItem.HasStoredUnicodeString | 문자열을 구체화하지 않고 경계가 있는 저장된 복합 유니코드 문자열 메타데이터를 검사합니다 |
| TMsoShapeContainer.HasOrdinaryChartObjectData | 저장된 차트 개체 타입, 0이 아닌 개체 ID, 지원되는 플래그, 알 수 없는 개체 꼬리 데이터의 부재를 검사합니다 |
공유 문자열 테이블 유지 관리와 SST 출력
lxStringTable의 TXLSStringTable은 클래식 통합 문서의 공유 문자열을 뒷받침합니다. 아래 멤버들은 라운드트립 저장을 위한 리더 측 등록, 슬롯 유지 관리, 원시 SST 출력을 다룹니다
KeyExists, AddWithExtras | KeyExists는 문자열이 이미 슬롯을 차지하는지 보고합니다. AddWithExtras는 Add의 리더 측 짝으로, 원시 rgRun 리치 텍스트와 rgExtRst 발음 표기 페이로드를 참조 수수를 올리지 않고 항목에 붙입니다. 참조하는 각 셀이 나중에 정상 add 경로를 통해 수수를 복원하기 때문입니다 |
Replace, ReplaceIndex | Replace는 이전 슬롯의 참조 하나를 버리고(수수가 0이 되면 해제) 텍스트를 다시 추가해 결과 슬롯을 반환합니다. ReplaceIndex는 텍스트를 복사하지 않고 이전 슬롯에서 새 슬롯으로 참조 하나를 옮깁니다 |
AddSSTData, InitExtIndex | AddSSTData는 원시 SST 페이로드를 writer의 blob 목록에 출력합니다. 폰트 run 재매핑 테이블을 받는 오버로드는 내보내는 동안 각 FormatRun 폰트 인덱스를 다시 써서([MS-XLS] §2.5.129) 리치 run이 저장 시점 폰트 재정렬을 따르게 하고, 빈 테이블은 레거시 그대로 출력을 유지합니다. InitExtIndex는 출력 전에 살아 있는 슬롯 위로 ExtSST 버킷에 번호를 매깁니다 |
SlotCount, ExtIndex, ParsedExtSSTDsst, ParsedExtSSTItemCount, BiffSizeLimit | SlotCount는 슬롯 순회의 1 기반 상한이며 삭제된 슬롯은 빈 채로 읽힙니다. ExtIndex는 슬롯을 ExtSST 버킷 번호로, 살아 있지 않은 슬롯은 -1로 해석합니다. ParsedExtSSTDsst와 ParsedExtSSTItemCount는 가져온 EXT/SST 헤더 값을 유지하고, BiffSizeLimit은 출력되는 각 레코드 청크의 한도입니다. 클래식 writer는 BIFF5에 2080바이트, BIFF8에 8224로 설정합니다 |
PDF 첨부, 서명 및 HTML 내보내기
IXLSPDFAttachmentSource | WriteTo 는 내보내기가 소스 데이터를 소유할 필요 없이 첨부 바이트를 PDF 내보내기로 스트리밍합니다 |
TXLSPDFExport | AttachmentDuplicatePolicy 는 중복 이름 처리를 선택하고, AttachmentSpoolThreshold 는 첨부 스풀링을 제어하며, DocumentLanguage 는 문서 언어 메타데이터를 씁니다 |
TXLSPDFSignature | TextAlign, TextSize, TextColor, TextBold및 TextItalic 은 보이는 서명 모양을 구성합니다 |
TXLSHTMLExport | ViewMode (타입 TXLSHtmlViewMode: 현재 보기 또는 전체 스프레드시트 테이블)가 HTML 프레젠테이션을 선택하고, HotTrackTargets ( TXLSHtmlHotTrackTarget집합)와 HotTrackColor 는 대화형 셀 및 개체 강조를 구성합니다 |
TXLSXHtmlExportOptions | ViewMode, HotTrackTargets및 HotTrackColor 는 동일한 XLSX HTML 내보내기 컨트롤을 제공합니다 |
계산 감사 및 통합 문서 컨트롤
TXLSCalculationAuditReport | Truncated 는 이슈 한도 잘림을 보고하고, StackTruncated 는 호출 스택 프레임 잘림을 보고하며, Issues 는 기록된 계산 이슈를 인덱싱합니다 |
TXLSUserFunctionRegistry | Generation 은 등록된 사용자 함수 집합이 바뀔 때마다 변경되므로 캐시된 수식 바인딩을 무효화할 수 있습니다 |
EXLSReportRecoverableData | Category 는 호출자에게 제시되는 복구 가능한 보고서 데이터 범주를 식별합니다 |
IXLSWorkBook | ManualCalculationThreadCount 는 수동 계산에 사용되는 워커 수를 제한합니다 |
TXLSXDataValidation | HasUnknownImeMode 는 HotXLS가 보존했지만 인식하지 못하는 IME 모드 값을 보고합니다 |
TXLSXTable | ColumnCalculatedFormulaArrayRaw 와 ColumnTotalsFormulaArrayRaw 는 테이블 열의 원본 배열 수식 텍스트를 노출합니다 |
레거시 PivotCache 프레이밍 호환성
TXLSPivotCache | RawBucketIndex 는 소스 하위 스트림 위치를 식별하고, RawFramingIsLegacy 는 오래된 HotXLS 프레이밍을 식별하며, RawModelIsComplete 는 형식화된 모델이 모든 레코드를 대표하는지 보고하고, CanUpgradeFraming 은 옵트인 형식화 재작성이 안전한지 보고합니다 |
TXLSPivotCache | StreamId 는 클래식 캐시 스트림 식별자를 노출하고, SourceDataType 는 클래식 소스 데이터 유형을 노출하며, RawHasStorageStream 은 로드된 캐시가 독립적인 PivotCache 저장소 스트림에서 왔는지 보고합니다 |
TXLSWorkbook | UpgradeLegacyPivotCacheFraming 은 형식화된 모델이 완전한 레거시 HotXLS 캐시 프레이밍만 다시 쓰도록 옵트인합니다. 일반 raw 캐시 재생이 기본 동작으로 남습니다 |
StreamId 는 SXStreamID 레코드([MS-XLS] §2.4.303)로 쓰이고 반드시 같아야 하는 SXDB 헤더의 idstm 필드로 반복됩니다. SourceDataType 은 SXVS 레코드([MS-XLS] §2.4.317: $0001 worksheet, $0002 external, $0004 consolidation, $0010 scenario)로 쓰이고 반드시 같아야 하는 SXDB 헤더의 vsType 필드로 반복됩니다. 워크시트 범위에서 만든 캐시는 worksheet 유형으로 시작하고, 파일에서 다시 읽은 캐시는 자신의 하위 스트림이 담고 있던 값을 유지하므로 BIFF 작성기는 자신이 내보내지 않은 레코드를 가리키는 SXDB 필드를 남기지 않습니다. RawHasStorageStream 은 자체 저장소 스트림에서 로드되었고 통합 문서 전역 디스크립터가 캐시된 레코드보다 앞서는 캐시를 표시합니다
클립보드 통합 및 붙여넣기 옵션
TXLSPasteOption = (xlpoValuesOnly, xlpoInsertRows, xlpoInsertCols);
TXLSPasteOptions = set of TXLSPasteOption;
function XLSGetClipboardText: WideString;
function XLSSetClipboardText(const Text: WideString): Boolean;
function XLSSetClipboardTextAndHtml(const Text: WideString;
const Html: AnsiString): Boolean;
function XLSBuildHtmlClipboard(const Html: AnsiString): AnsiString;
function XLSEncodeClipboardField(const Text: WideString): WideString;
function XLSClipboardHasText: Boolean;
function XLSParseClipboardGrid(const ClipboardText: WideString;
Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasXmlSpreadsheet: Boolean;
function XLSGetClipboardXmlSpreadsheet: WideString;
function XLSParseXmlSpreadsheet(const XmlText: WideString;
Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasBiff8: Boolean;
function XLSGetClipboardBiff8: AnsiString;
function XLSReadClipboardPasteData(out Biff8: AnsiString;
out Text: WideString): Boolean;
function XLSSetClipboardBiff8(const Biff8: AnsiString;
const Text: WideString; const Html: AnsiString = ''): Boolean;
PasteFromClipboard 오버로드가 공유합니다. xlpoValuesOnly 는 수식 셀의 캐시된 값을 유지하고 형식과 병합은 건너뛰며, xlpoInsertRows 와 xlpoInsertCols 는 블록이 놓이기 전에 기존 콘텐츠를 밀어냅니다CF_UNICODETEXT 를 사용하고(현재 ANSI 코드 페이지를 거쳐 CF_TEXT 로 폴백), XLSSetClipboardTextAndHtml 은 텍스트와 스타일이 적용된 HTML Format 페이로드를 한 번의 트랜잭션으로 쓰고, XLSBuildHtmlClipboard 는 문서나 프래그먼트의 CF_HTML 바이트 오프셋을 계산하며, XLSEncodeClipboardField 는 탭으로 구분된 필드 하나를 인용합니다. XLSParseClipboardGrid 는 TXLSCSVLoader 가 CSV에 사용하는 것과 동일한 타입 스니핑으로 클립보드 텍스트를 탭 구분 행으로 파싱하고, XLSParseXmlSpreadsheet 는 XLSGetClipboardXmlSpreadsheet 로 가져온 SpreadsheetML 2003 페이로드에 동일한 로더 채우기를 실행하며, Biff8 도우미는 Excel이 클립보드에 직접 올려 놓는 네이티브 스트림을 감지해 읽으므로 붙여넣은 데이터가 텍스트 손실 없이 값, 수식, 서식을 유지합니다XLSReadClipboardPasteData 는 Biff8 스트림과 Unicode 텍스트를 클립보드 잠금 한 번으로 함께 담아 오므로, 붙여넣기가 두 번의 읽기 사이에 클립보드를 다시 열 필요가 없고 동시에 쥔 쪽에 어느 형식도 내주지 않습니다. XLSSetClipboardBiff8 는 짝이 되는 쓰기 쪽으로, BIFF8 compound-file 스트림, 탭으로 구분된 Unicode 텍스트, 선택적 CF_HTML 페이로드를 한 트랜잭션에 올립니다 — Text 나 Html 에 빈 값을 넘기면 그 보조 형식은 건너뛰고, Biff8 파트만은 필수입니다셀 표시 텍스트 결정
TXLSCellDisplayMode = (xcdmFormattedValue, xcdmFormulaText,
xcdmSuppressedZero);
TXLSCellDisplayOptions = record
ShowFormulas: Boolean;
ShowZeros: Boolean;
SheetProtected: Boolean;
FormulaWidthFactor: Double;
DateSerialZero: Double;
end;
TXLSCellDisplayInput = record
HasFormula: Boolean;
FormulaHidden: Boolean;
IsNumericZero: Boolean;
FormulaText: WideString;
FormattedText: WideString;
end;
TXLSCellDisplayResult = record
Mode: TXLSCellDisplayMode;
Text: WideString;
TreatAsText: Boolean;
EffectiveWidthFactor: Double;
end;
function XLSDefaultCellDisplayOptions: TXLSCellDisplayOptions;
function XLSNormalizeFormulaDisplayText(const FormulaText: WideString): WideString;
function XLSResolveCellDisplay(const Options: TXLSCellDisplayOptions;
const Input: TXLSCellDisplayInput): TXLSCellDisplayResult;
XLSResolveCellDisplay 를 직접 호출할 수 있습니다. XLSDefaultCellDisplayOptions 는 정규화된 기본값을 반환하고 XLSNormalizeFormulaDisplayText 는 표시용 수식 문자열을 정규화합니다클래식 데이터 유효성 검사 개체
TXLSDataValidationType = (xlsDvAny, xlsDvWhole, xlsDvDecimal, xlsDvList,
xlsDvDate, xlsDvTime, xlsDvTextLength, xlsDvCustom);
TXLSDvErrorStyle = (xlsDvErrStop, xlsDvErrWarning, xlsDvErrInformation);
TDVRange = class; { one validation rule over one or more ranges }
TDVRangeList = class; { the per-sheet rule collection }
TDataValidator = class; { engine that checks edits against the rules }
TXLSWorksheet.Add*Validation 도우미는 시트의 TDVRange 에 TDVRangeList규칙을 만듭니다. 각 규칙은 자신의 TXLSDataValidationType, 경계, 입력 및 오류 메시지, TXLSDvErrorStyle을 담습니다. TDataValidator 는 규칙에 대해 편집을 평가해 값이 허용되는지 보고하며, 이는 Excel 자체 유효성 검사 프롬프트 뒤에서 돌아가는 검사이기도 합니다인덱스 색 스캔 및 해석
TXLSIndexedColorKind = (xickPalette, xickAutomatic, xickSystem, xickInvalid);
TXLSSystemColorRole = (xscrNone, xscrWindowText, xscrWindowBackground,
xscrChartText, xscrChartBackground, xscrChartNeutral, xscrToolTipText);
TXLSIndexedColorResolution = record
Kind: TXLSIndexedColorKind;
RawIndex: Int64;
PaletteSlot: Integer;
SystemColorRole: TXLSSystemColorRole;
ARGB: LongWord;
HasResolvedColor: Boolean;
end;
TXLSNearestIndexedColorMatch = record
InputARGB: LongWord;
ColorIndex: Integer;
PaletteSlot: Integer;
ARGB: LongWord;
DistanceSquared: Double;
ExactMatch: Boolean;
end;
TXLSIndexedColorUsageKind = (xicukFont, xicukFillForeground,
xicukFillBackground, xicukGradient, xicukBorder, xicukConditionalFormat,
xicukChart, xicukShape, xicukComment, xicukWorksheet, xicukOther);
ResolveIndexedColor, NearestIndexedColor, ScanIndexedColorUsage 메서드를 뒷받침합니다. 해석 결과는 인덱스 토큰이 네 가지 TXLSIndexedColorKind 소스 중 어디에서 왔는지와 팔레트 슬롯, 시스템 색 역할, 정규화된 ARGB를 보고하고, 최근접 일치는 RGB 제곱 거리와 정확 일치 플래그를 추가하며, 사용량 스캔은 팔레트 슬롯을 점유하는 모든 소비자 범주에 태그를 붙입니다. 라이브러리는 팔레트 세대를 키로 하는 내부 TXLSIndexedColorMatcher 캐시를 유지하는데, FindNearest 는 이 캐시로 최근접 색 질의에 답하고 UpdateSlot 은 팔레트 슬롯 하나를 패치하므로 반복 해석도 할당 없이 이루어집니다A1 참조 도우미
function XLSA1CellRef(ARow, ACol: Integer): WideString;
function XLSTryParseA1CellRef(const ARef: WideString;
out ARow, ACol: Integer): Boolean;
function XLSTryParseA1RangeRef(const ARef: WideString;
out ARow1, ACol1, ARow2, ACol2: Integer): Boolean;
False 를 반환합니다