XLSX Facade 개요 (lxHandleX)
lxHandleX는 Excel 2007+(.xlsx) 및 OpenDocument Spreadsheet(.ods) 통합 문서 워크플로를 위한 전용 파사드(facade) 유닛입니다. 기존 lxHandle 파사드와 공존하여 기존 코드가 아무런 변경 없이 계속 작동할 수 있도록 합니다
lxHandle— Excel 97-2003 BIFF 형식(.xls), HTML, RTF, CSV 및 TSV 내보내기를 위한 기본 파사드입니다. 기존의 모든 사용자 코드는 이 유닛을 변경 없이 계속 사용합니다lxHandleX— Excel 2007+ OOXML 형식(.xlsx), ODS 읽기/쓰기 워크플로, 그리고 XLSB 값-스타일 부분집합을 위한 기본 파사드입니다. 별도의 통합 문서 및 워크시트 유형을 제공하고,Open을 통한 자동 패키지 감지,SourceFormat, 명시적 출력 형식,TODSExportOptions를 노출합니다
클래스 계층 구조
XLSX 파사드는 다음 클래스들을 노출합니다
type
TXLSXWorkbook = class // top-level workbook with SaveAs / Open
TXLSXHtmlExportOptions = class // HTML document, style, BOM, and table class options
TODSExportOptions = class // ODS export options for generator, chart, and image output
TXLSXSheets = class // worksheet collection on the workbook
TXLSXFonts = class // workbook-level font palette
TXLSXFont = class // single font descriptor
TXLSXFills = class // workbook-level fill palette
TXLSXFill = class // single fill (pattern + fg/bg color)
TXLSXBorders = class // workbook-level border palette
TXLSXBorder = class // four edges + diagonal border
TXLSXNumberFormats = class // workbook-level custom format codes
TXLSXDefinedNames = class // workbook-level named ranges
TXLSXWorksheet = class // single worksheet with cells and decorations
TXLSXStructuralEditRegistry = class // ordered application participants for row and column reference updates
TXLSXCells = class // cell collection on the worksheet
TXLSXCell = class // single cell (value, formula, *Index style refs)
TXLSXRange = class // rectangular worksheet range wrapper
TXLSXMergedCells = class // merged-range collection
TXLSXHyperlinks = class // hyperlink collection
TXLSXComments = class // cell-comment collection
TXLSXImages = class // image collection (drawings + media)
TXLSXConditionalFormats = class // conditional formatting rules
TXLSXDataValidations = class // data-validation rules
TXLSXTables = class // Excel-style table collection
TXLSXCharts = class // chart collection (anchored or full-page)
TXLSXChart = class // single or combination chart with primary, secondary, date, value, and series axes
TXLSXChartPlotGroup = class // ordered chart-family group with its own series and axis pair
TXLSXChartSeries = class // chart series with formula ranges and typed literal caches
TXLSXTextBox = class // standalone worksheet drawing text box
TXLSXRichText = class // per-run rich-text payload for cells
TXLSXAlignment = class // cell alignment / wrap / indent / rotation
TXLSXExternalLinks = class // external workbook link collection
TXLSXExternalLink = class // single external workbook reference (Target URL + SheetNames)
TXLSConnections = class // external data connection collection
TXLSConnection = class // database, web, text, and refresh connection metadata
TXLSQueryTables = class // worksheet query-result collection
TXLSQueryTable = class // query ownership, fields, and result binding
이 클래스들은 lxHandle.TXLSWorkBook 및 lxHandle.TXLSWorksheet와 독립적입니다. 두 형식이 모두 필요한 애플리케이션은 두 파사드를 함께 사용할 수 있습니다
uses
lxHandle, // XLS / HTML / RTF / CSV workbook (TXLSWorkBook)
lxHandleX; // XLSX workbook (TXLSXWorkbook)
빠른 시작
XLSX 파사드는 BIFF 파사드와 동일한 호출 규칙을 따릅니다 — 통합 문서에서의 SaveAs / Open, 워크시트 컬렉션에서의 Sheets.Add / Sheets[i], 그리고 셀 컬렉션에서의 Cells.Item[Row, Col].Value입니다. 아래의 예제는 현재 지원되는 모든 기능을 실행하는 간단한 통합 문서를 작성합니다
uses lxHandleX;
var
wb: TXLSXWorkbook;
ws: TXLSXWorksheet;
bold, yellow, box, currency: Integer;
begin
wb := TXLSXWorkbook.Create;
try
bold := wb.Fonts.Add('Calibri', 12, True, False);
yellow := wb.Fills.AddSolid($FFFFFF00);
box := wb.Borders.AddBox(xlsxBorderThin);
currency := wb.NumberFormats.Add('"$"#,##0.00');
ws := wb.Sheets.Add('Demo');
ws.Cells.Item[1, 1].Value := 'Hello';
ws.Cells.Item[1, 1].FontIndex := bold + 1;
ws.Cells.Item[1, 2].Value := 123.45;
ws.Cells.Item[1, 2].NumberFormatIndex := currency + 1;
ws.Cells.Item[2, 1].Value := Now; // tagged as date
ws.Cells.Item[2, 2].Formula := 'SUM(B1:B1)';
ws.Cells.Item[3, 1].FillIndex := yellow + 1; // highlight cell
ws.Cells.Item[3, 2].BorderIndex := box + 1; // boxed cell
ws.ColWidth[1] := 24;
ws.RowHeight[1] := 28;
ws.MergeCells(4, 1, 4, 3);
ws.Range['A8:C10'].Merge(True); // merge across rows
ws.AddHyperlink(5, 1, 'https://www.loslab.com', 'Visit losLab');
ws.AddComment(5, 2, 'Important note', 'Kevin');
ws.AddImageFromFile(6, 1, 'logo.png');
ws.AddConditionalFormat('B1:B10', xlsxCfOpGreaterThan, '100');
ws.AddListValidation('C1:C5', 'Yes,No,Maybe');
wb.DefinedNames.Add('SalesData', 'Demo!$A$1:$B$10');
wb.SaveAs('demo.xlsx');
finally
wb.Free;
end;
end;
지원되는 기능
- 셀 값: 숫자, 부울, 문자열, 날짜, 수식
- 쓰기 경로에서 중복 제거가 적용되는 공유 문자열 테이블(
xl/sharedStrings.xml) - 통합 문서 수준의 스타일 팔레트 —
Workbook.Fonts,Fills,Borders,NumberFormats— 및 셀별FontIndex/FillIndex/BorderIndex/NumberFormatIndex. SaveAs는 실제<fonts>/<fills>/<borders>/<numFmts>+<cellXfs>블록을 생성하며, Open은 이를 다시 파싱하여 이름/크기/굵게/기울임꼴/색상, 채우기 패턴, 테두리 가장자리 및 사용자 지정 숫자 서식이 모두 양방향 작업(round-trip) 동안 유지됩니다 Worksheet.ColWidth[Col]을 통한 열별 너비 및Worksheet.RowHeight[Row]를 통한 행별 높이 (워크시트<cols>블록 및<row>별ht특성)- 인덱스
XlsxXfIndexDate의 내장된 날짜cellXf;TDateTime값은 자동으로 태그가 지정됩니다 - 병합된 셀(
<mergeCells>), 행 전체에 걸쳐 Excel 스타일로 병합하는TXLSXRange.Merge(True)를 포함합니다 Worksheet.Range,RCRange,UsedRange,EntireRow,EntireColumn을 통한 워크시트 범위. 일괄 값, 수식,SetArrayFormula, 스타일 인덱스, 숫자 서식, 테두리, 보호 플래그, 자동 맞춤, 병합, 오프셋, 크기 조정,Sort다중 키 정렬,ApplyBuiltinStyle내장 셀 스타일, 복사/이동 도우미, 전체 행/전체 열 삽입/삭제 도우미 및 선택한 범위의 HTML 내보내기를 보려면 TXLSXRange를 참조하십시오- 외부 URL에 대한 워크시트별 rels에 의해 구동되는 하이퍼링크(
<hyperlinks>) - Excel에서 말풍선이 렌더링되도록 VML 드로잉을 사용하는 셀 메모 (
xl/commentsN.xml+xl/drawings/vmlDrawingN.vml) Worksheet.Images를 통한 임베디드 이미지(PNG / JPEG / GIF / BMP).xl/media/imageN.<ext>에 기록되며 시트별 드로잉 XML 및 rels가 추가됩니다Worksheet.AddTextBox를 통한 독립 실행형 드로잉 텍스트 상자. 셀 메모 대신 텍스트 본문이 있는 워크시트 드로잉 도형으로 작성되며 직접 앵커 조회 및 범위 삭제 도우미를 제공합니다Workbook.DefinedNames를 통한 통합 문서 수준의 명명된 범위 (통합 문서 범위 또는SheetIndex를 통한 시트 범위)Workbook.Calculate및Worksheet.Calculate를 통한 수식 계산. 선두에 등호가 있는 수식, 셀 및 범위 참조, 참조된 수식 셀, 교차 시트 참조, 정의된 이름 범위 및 지원되는 텍스트, 날짜, 작업일, 엔지니어링/진수 변환, 비트 단위, 통계, 집계 및 수학 함수에 대해 XLS 수식 파서 및 평가기를 공유합니다. 사용자 지정 또는 지원되지 않는 함수를 처리하려면Workbook.OnUserFunction또는Workbook.OnUserFunctionEx를 사용하십시오- 드롭다운
AddListValidation(Range, Items)단축 방법을 포함하는 워크시트별 조건부 서식(Worksheet.ConditionalFormats) 및 데이터 유효성 검사(Worksheet.DataValidations) - 행 / 열 윤곽선 그룹(
RowOutlineLevel,ColOutlineLevel), 숨김 상태(RowHidden,ColHidden) 및 축소된 그룹 상태(RowCollapsed,ColCollapsed) Worksheet.FreezePanes(Row, Col)를 통한 틀 고정- 페이지 설정 — 6가지 여백 속성, 용지 크기, 방향, 페이지 배율, 페이지 너비 맞춤 / 페이지 높이 맞춤 및
HeaderText/FooterText.xlsxPaperLetter,xlsxPaperA4,xlsxPaperA3및xlsxPaperLegal과 같은 명명된xlsxPaper*상수를PaperSize에 할당할 수 있습니다 - 자동 필터(
Worksheet.SetAutoFilter) - 스타일 정보 및 tableColumns를 포함하는 Excel 스타일 테이블(TXLSXTable)
파사드 하위 컬렉션 API
파사드 컬렉션 클래스는 조건부 서식, 데이터 유효성 검사, 명명된 범위, 이미지 및 테이블을 관리합니다. 다음은 각 컬렉션의 핵심 멤버입니다
- TXLSXConditionalFormats:
조건부 서식 규칙을 노출합니다
속성:
Count메서드:AddAboveAverage,AddColorScale2,AddColorScale3,AddDataBar,AddExisting,AddExpression,AddIconSet,AddSimpleRule,AddTextRule,AddTop10,DeleteAt,DeleteInRange,FindAt,IndexOfCell - TXLSXDataValidations:
데이터 유효성 검사를 노출합니다
속성:
Count메서드:AddExisting,AddList,DeleteAt,DeleteInRange,FindAt,IndexOfCell - TXLSXDefinedNames:
정의된 이름(명명된 범위)을 노출합니다
속성:
Count메서드:DeleteByName,FindByName,IndexOfName - TXLSXImages:
포함된 이미지를 노출합니다
속성:
Count메서드:DeleteAt,DeleteInRange,FindAt,IndexOfCell - TXLSXTables:
Excel 테이블을 노출합니다
속성:
Count메서드:AddExisting,DeleteByName,FindByName,IndexOfName - TXLSConnections:
Workbook.Connections를 통해 통합 문서 외부 데이터 연결을 노출합니다 속성:Count메서드:Add,AddExisting,FindById,FindByName,NextId,Validate - TXLSQueryTables:
Worksheet.QueryTables를 통해 워크시트 쿼리 결과 정의를 노출합니다 속성:Count메서드:Add,AddExisting,FindByName,FindByResultTableName,Validate
지원되는 기능
docProps/core.xml+docProps/app.xml에 기록되는 문서 속성(Workbook.Title,Author,Subject,Keywords,Description,LastModifiedBy,Company등)Worksheet.Protect/Workbook.ProtectWorkbook를 통한 워크시트 / 통합 문서 암호 보호 (레거시 16비트 해시); 가능한 경우 AES-NI 가속을 사용하고 그렇지 않은 경우 이식 가능한 소프트웨어 폴백을 사용하여SaveAsEncrypted를 통해 Excel과 호환되는 AES 암호 보호 저장을 제공합니다.OpenEncrypted는 복호화 지원이 제공될 때까지 암호화된 패키지에 대해 여전히 예외를 발생시킵니다Workbook.LoadVbaProjectFromFile/VbaProject를 통한 VBA 프로젝트 보존; 바이트는 변경 없이 그대로 양방향 통과(round-trip)됩니다. 유효한vbaProject.bin페이로드는Workbook.ParsedVBAProject를 통해 검사할 수도 있습니다- TXLSXChart를 통한 차트 — 세로 막대형 / 가로 막대형 / 꺾은선형 / 원형 / 영역형 / 도넛형, 워크시트에 고정(
Worksheet.AddChart)하거나Workbook.AddChartSheet(Name, Type, Title)를 통해 전용 차트 시트에 전체 페이지로 생성할 수 있습니다 - 런(run)별 글꼴 서식을 지원하는 TXLSXRichText를 통한 서식 있는 텍스트 셀; 공유 문자열 테이블을 통해 왕복 보존됩니다
Worksheet.AddHyperlinkToCell(Row, Col, "Sheet2!A1")를 통한 내부 하이퍼링크 앵커 (rels 관계가 필요 없음)- 워크시트에서의 셀 범위 복사 / 이동 / 지우기 API (
CopyRange,CopyRangeTo,MoveRange,ClearRange) - TXLSXAlignment 및 셀별
AlignmentIndex를 통한 셀 맞춤 Worksheet.TabColor/TabColorIsAuto를 통한 워크시트 탭 색상- 기본 보기, 페이지 나누기 미리 보기 및 페이지 레이아웃 보기를 포함하는
Worksheet.View를 통한 워크시트 보기 모드 - 다른 시트를 메모리에 보유하지 않고 각 워크시트를 빌드하고 쓰는 스트리밍 SaveAs 경로(
Workbook.StreamingWrite := True). 행별 XML 누적기는TXLSWideStringBuilder를 사용하므로 셀 루프가 선형적으로 유지됩니다 - 암호화된 XLSX 패키지 및 문서화된 일부 동작으로 폴백되는 차트 시트 식별을 제외하고는 위의 모든 항목에 대해
Open이 양방향 보존(round-trip)됩니다 - 스트림 기반 내보내기 및 가져오기: 메모리 내 또는 BLOB 필드 사용을 위한
SaveAs(Stream),Open(Stream) - OpenDocument Spreadsheet 읽기/쓰기:
Workbook.OpenODS및 일반적인Workbook.Open은.ods패키지를 로드할 수 있으며,Workbook.SaveAsODS및SaveAs(..., xlsxOpenDocumentSpreadsheet)는 ODS 출력을 직접 씁니다. 형식 지원 범위는 지원되는 양방향 작업에 걸쳐 값, 수식, 스타일, 서식 있는 텍스트, 행/열 차원, 병합, 하이퍼링크, 이미지, 차트, 명명된 범위, 자동 필터, 조건부 서식, 데이터 유효성 검사, 틀 고정, 페이지 설정, 머리글/바닥글, 인쇄 범위, 페이지 나누기, 윤곽선 그룹, 탭 색상 및 시트 가시성을 포함합니다 - ODS 내보내기 옵션:
SaveAsODS에TODSExportOptions를 전달하여 문서 생성기 문자열을 재정의하거나 더 가벼운 패키지를 생성할 때 차트 및 이미지 부분을 제외시킬 수 있습니다 - 구분된 텍스트 가져오기:
Workbook.OpenCSV(FileName)및Workbook.OpenCSV(Stream)는 구분 기호 탐지, BOM 인코딩 감지, RFC 4180 스타일 인용 및 선택적인 값 유형 추론을 사용하여 CSV 또는 TSV 데이터를 가져옵니다.Open(FileName)은.csv및.tsv파일을 자동으로 가져오기 프로그램(importer)으로 라우팅합니다 - 통합 문서 메타데이터 스캔:
Workbook.GetSheetNames(FileName, List)및Workbook.GetSheetNames(Stream, List)는 워크시트 XML을 로드하지 않고xl/workbook.xml에서 정렬된 시트 이름을 읽습니다 - 셀 보호:
TXLSXCell.Locked및FormulaHidden— 시트가 보호될 때 편집 가능한 셀 또는 수식이 표시되는 셀을 제어합니다 - 셀 내용에 따른 열 너비 및 행 높이 자동 맞춤:
Worksheet.AutoFitColumn,AutoFitColumns,Worksheet.AutoFitRow,AutoFitRows - 전체 연쇄 이동이 포함된 행 / 열 삽입 및 삭제:
InsertRows,DeleteRows,InsertCols,DeleteCols. 부작용은 셀, 병합된 범위, 하이퍼링크, 메모(댓글), 틀 고정, 범위 문자열 참조, 테이블, 셀 수식, 조건부 서식 / 데이터 유효성 검사 수식, 내부 하이퍼링크 대상, 인쇄 설정 참조, 수동 페이지 나누기, 자동 필터 열 기준, 차트 계열 범위, 정의된 이름, 이미지 앵커 및 차트 앵커까지 전파됩니다 - 확장된 페이지 설정:
PrintArea,PrintTitleRows,PrintTitleCols,PrintGridlines,PrintHeadings,BlackAndWhite,Draft,PrintNotes,PrintOverThenDown PrinterDriverData,HasPrinterDriverData,ClearPrinterDriverData를 통한 불투명 프린터 드라이버 페이로드 접근. 바이트 배열과 워크시트 복사본은 소유권이 서로 독립적이고, 페이로드는 1 MiB로 제한되며, 지우기는 형식화된 페이지 설정 필드를 교체하지 않고 워크시트 관계와 바이너리 패키지 파트를 제거합니다. 로딩은 필수 관계 유형과 실제 대상을 갖춘 정확한pageSetup관계 식별자만 바인딩하고, 없거나 잘못 입력되었거나 매달려 있는 참조는 다른 바이너리 파트를 빌려 오지 않고xlsDiagnosticPrinterSettingsRelationshipInvalid를 기록합니다RenderCalibration,CaptureRenderCalibration,ResetRenderCalibration을 통한 통합 문서 로컬 렌더 캘리브레이션. 레코드 전체 할당 검증과 함께 너비, 높이, 줄 간격, 셀 여백, 화면 배율, 측정 DPI에 대한 독립적인 작업별 스냅샷을 제공합니다CreateRenderGeometry를 통한 작업 소유 지오메트리 및 글꼴 측정. 불변 캘리브레이션과 통합 문서 생성 식별, 완전한 글꼴·줄 바꿈 인식 캐시 키, 경계가 있는 로컬 캐싱, 공유 픽셀·포인트·열 너비·MDW·사용 가능한 셀 너비 변환을 제공합니다- AutoFit은 작업당 하나의 통합 문서 로컬 지오메트리 스냅샷을 잡아 보이는 셀 글꼴과 줄 바꿈된 텍스트를 캘리브레이션된 간격과 여백으로 측정합니다. 페이지 매기기는 빌드당 별도의 스냅샷을 잡아 다음 빌드까지 기존 논리 페이지를 그대로 유지하며 워크시트 크기를 절대 기록하지 않습니다
- 시트 가시성:
Worksheet.Visibility(xlsxSheetVisible/xlsxSheetHidden/xlsxSheetVeryHidden) 및IsSelected - 수동 페이지 나누기:
AddRowBreak,AddColBreak, 인덱스 조회 및 범위 제거 도우미 - 자동 필터 열 기준: 단일 또는 AND/OR 두 가지 기준 필터 규칙이 포함된
Worksheet.AddAutoFilterColumn, 그리고 직접적인 기준 조회 및 제거를 위한Worksheet.AutoFilterColumns.FindByColId및DeleteByColId(TXLSXAutoFilterColumn) - 통합 문서 날짜 기준:
Workbook.Date1904는 1900(Windows 기본값) 및 1904(Mac) 날짜 에포크(epoch) 사이를 전환합니다 - 대각선 테두리:
TXLSXBorder.DiagonalUp및DiagonalDown은 대각선을 활성화합니다;Diagonal가장자리가 스타일과 색상을 나타냅니다 - 확장된 글꼴 속성:
TXLSXFont.VertAlign(위 첨자 / 아래 첨자),OutlineFont,Shadow,Family,CharSet - 명명된 범위 메타데이터:
TXLSXDefinedName.Hidden및Comment - 시트 보기 옵션:
Worksheet.Zoom,DisplayGridLines,DisplayZeros,DisplayRightToLeft,StandardWidth,StandardHeight - OOXML 레거시 인덱스 색상 팔레트:
Workbook.IndexedColor[0..63]및ResetIndexedColors - 외부 통합 문서 링크:
Workbook.ExternalLinks/ TXLSXExternalLink — 대상 URL + 시트 이름 메타데이터 왕복 - 외부 데이터 연결 및 쿼리 결과:
Workbook.Connections/Worksheet.QueryTables— 확장에 안전한 왕복과 함께 형식화된 새로 고침, 자격 증명, 명령, 웹, 텍스트, 매개 변수, 필드, 표, 정의된 이름 바인딩 TXLSXFont,TXLSXFill및TXLSXBorderEdge에 대한 테마 색상 지원: 우선순위 순서(테마 > 인덱스 > RGB)가 지정된ColorTheme/ColorIndex/TintAndShade속성SaveXLSXWorkbookAsXLS의 파일·스트림 오버로드를 통한 BIFF8 변환. 결정론적인 56색 팔레트 계획, 통합 문서 스타일이 이미 사용 중인 인덱스 슬롯 보존, 직접 색상이 가용 슬롯을 초과할 때의 가중 OKLab 양자화, 희소 로드 셀 순회, XLS 그리드 밖 행·열에 대한 사전 검사 거부를 갖춥니다. 형식화된 인쇄 필드와 불투명 프린터 데이터는 독립적으로 변환되고, BIFF8 경계는 대상 스트림에 쓰기 전에 검사되며, 표준 필드가 중복된 비공개 기본값보다 우선하고, OOXML 전용UsePrinterDefaults플래그는 클래식 XLS로 합성되지 않습니다- CSV 내보내기:
Workbook.SaveAsCSV— 4가지 오버로드 (Active-sheet / 명시적 SheetIndex + 구분 기호에 대한 파일 이름 또는 스트림), BOM이 포함된 UTF-8, RFC 4180 인용 - HTML 내보내기:
Workbook.SaveAsHTML및TXLSXRange.SaveAsHTML은 전체 통합 문서 시트 또는 선택한 사각형 영역만 HTML5 테이블로 씁니다. 옵션 오버로드는 전체 문서 출력, 스타일 생성, BOM 생성 및 테이블 클래스 명명을 위한TXLSXHtmlExportOptions를 지원합니다 - RTF 내보내기:
Workbook.SaveAsRTF— 4가지 오버로드, 열 너비를 갖는 RTF 1.6 테이블, 셀별 글꼴 서식 지정 및 부호 있는 16비트\uN?이스케이프를 통한 full-BMP 유니코드
공유 인프라
두 파사드는 공통적인 하위 수준 도우미 유닛 세트를 공유하므로 스타일 설명자, 해시 테이블, AVL 트리, ZIP 및 XML I/O, RGB-to-HLS 변환 및 문자열 빌더가 한 번만 작성되어 양쪽 경로에서 모두 사용됩니다. 공유 도우미에는 다음이 포함됩니다
lxStyleXf,lxStyleFont,lxStyleColor,lxStyleFill,lxStyleBorder— 현대적인 스타일 설명자lxRgb— RGB / HLS 색상 변환lxHashTable,lxKeyList,lxAvlTree,lxCols,lxRows— 중복 제거 컨테이너 및 AVL 지원 셀 힙 빌딩 블록lxXmlReader,lxXmlWriter,lxZipArchive— OOXML 전송 레이어lxStrBuilder,lxCacheStream,lxWStream,lxZlibStream— 스트림 및 문자열 어셈블리 도우미