.xlsx) 통합 문서의 최상위 컨테이너입니다. lxHandleX에서 선언됩니다. TXLSXSheets 컬렉션을 보유하고 OOXML 통합 문서, CSV/TSV 가져오기, OpenDocument 스프레드시트(.ods) 읽기/쓰기 워크플로를 위한 SaveAs / Open 진입점을 제공합니다
type
TXLSXFileFormat = (xlsxOpenXMLWorkbook, xlsxOpenDocumentSpreadsheet);
TODSExportOptions = class
constructor Create;
property Generator: WideString;
property IncludeCharts: Boolean;
property IncludeImages: Boolean;
end;
TXLSXWorkbook = class
constructor Create;
destructor Destroy; override;
function SaveAs(const FileName: WideString): Integer; overload;
function SaveAs(const FileName: WideString; FileFormat: TXLSXFileFormat): Integer; overload;
function SaveAs(Stream: TStream): Integer; overload;
function SaveAs(Stream: TStream; FileFormat: TXLSXFileFormat): Integer; overload;
function Open(const FileName: WideString): Integer; overload;
function Open(const FileName: WideString; const Password: WideString): Integer; overload;
function Open(Stream: TStream): Integer; overload;
function OpenCSV(const FileName: WideString): Integer; overload;
function OpenCSV(const FileName: WideString; ASeparator: WideChar;
ADetectTypes: Boolean): Integer; overload;
function OpenCSV(Stream: TStream): Integer; overload;
function OpenCSV(Stream: TStream; ASeparator: WideChar;
ADetectTypes: Boolean): Integer; overload;
function OpenODS(const FileName: WideString): Integer; overload;
function OpenODS(Stream: TStream): Integer; overload;
function SaveAsODS(const FileName: WideString): Integer; overload;
function SaveAsODS(Stream: TStream): Integer; overload;
function SaveAsODS(const FileName: WideString; Options: TODSExportOptions): Integer; overload;
function SaveAsODS(Stream: TStream; Options: TODSExportOptions): Integer; overload;
function GetODSSheetNames(const FileName: WideString; AList: TStrings): Integer; overload;
function GetODSSheetNames(Stream: TStream; AList: TStrings): Integer; overload;
function GetSheetNames(const FileName: WideString; AList: TStrings): Integer; overload;
function GetSheetNames(Stream: TStream; AList: TStrings): Integer; overload;
function SaveAsCSV(const FileName: WideString): Integer; overload;
function SaveAsCSV(const FileName: WideString; SheetIndex: Integer; Delimiter: WideChar): Integer; overload;
function SaveAsCSV(Stream: TStream): Integer; overload;
function SaveAsCSV(Stream: TStream; SheetIndex: Integer; Delimiter: WideChar): Integer; overload;
function SaveAsHTML(const FileName: WideString): Integer; overload;
function SaveAsHTML(const FileName: WideString; Options: TXLSXHtmlExportOptions): Integer; overload;
function SaveAsHTML(const FileName: WideString; SheetIndex: Integer): Integer; overload;
function SaveAsHTML(const FileName: WideString; SheetIndex: Integer; Options: TXLSXHtmlExportOptions): Integer; overload;
function SaveAsHTML(Stream: TStream): Integer; overload;
function SaveAsHTML(Stream: TStream; Options: TXLSXHtmlExportOptions): Integer; overload;
function SaveAsHTML(Stream: TStream; SheetIndex: Integer): Integer; overload;
function SaveAsHTML(Stream: TStream; SheetIndex: Integer; Options: TXLSXHtmlExportOptions): Integer; overload;
function SaveAsRTF(const FileName: WideString): Integer; overload;
function SaveAsRTF(const FileName: WideString; SheetIndex: Integer): Integer; overload;
function SaveAsRTF(Stream: TStream): Integer; overload;
function SaveAsRTF(Stream: TStream; SheetIndex: Integer): Integer; overload;
// AES encryption (ECMA-376 Standard Encryption) write path.
// OpenEncrypted still raises for encrypted packages.
function SaveAsEncrypted(const FileName, APassword: WideString): Integer;
function OpenEncrypted(const FileName, APassword: WideString): Integer;
function CanReadEncrypted(const FileName: WideString): Boolean;
function Calculate(const Formula: WideString): Variant;
property OnUserFunction: TXLSUserFunctionEvent;
property OnUserFunctionEx: TXLSUserFunctionExEvent;
// Document properties (docProps/core.xml + docProps/app.xml).
property Title, Author, Subject, Keywords, Description,
Category, LastModifiedBy, Company,
Application, AppVersion: WideString;
property Created, Modified: TDateTime;
// Workbook protection (16-bit legacy hash).
procedure ProtectWorkbook; overload;
procedure ProtectWorkbook(const APassword: WideString); overload;
procedure ProtectWorkbook(const APassword: WideString; ALockStructure, ALockWindows: Boolean); overload;
procedure UnProtectWorkbook;
property IsWorkbookProtected: Boolean;
property LockStructure, LockWindows: Boolean;
// VBA project payload (round-trips byte-for-byte). Workbook is saved
// with macro-enabled content type when HasVbaProject is True.
procedure LoadVbaProjectFromFile(const AFileName: WideString);
procedure ClearVbaProject;
function HasVbaProject: Boolean;
property VbaProjectDefined: Boolean;
property VbaProject: AnsiString;
property ParsedVBAProject: TXLSVBAProject;
// Chart sheet helper — creates a sheet flagged IsChartSheet and
// seeds Charts[0] with a default full-page anchor.
function AddChartSheet(const AName: WideString;
AChartType: TXLSXChartType; const ATitle: WideString): TXLSXWorksheet;
// Streaming SaveAs path (TXLSWideStringBuilder + one sheet at a time).
property StreamingWrite: Boolean;
// Workbook-level collections.
property ActiveSheet: Integer;
property Minimized: Boolean;
property WindowHidden: Boolean;
property ShowHorizontalScroll: Boolean;
property ShowVerticalScroll: Boolean;
property ShowSheetTabs: Boolean;
property XWindow: Integer;
property YWindow: Integer;
property WindowWidth: Integer;
property WindowHeight: Integer;
property TabRatio: Integer;
property FirstSheet: Integer;
property AutoFilterDateGrouping: Boolean;
property Date1904: Boolean;
property SourceFormat: TXLSXFileFormat;
property IndexedColor[Index: Integer]: LongWord;
function HasCustomIndexedColor(Index: Integer): Boolean;
function CustomIndexedColorCount: Integer;
procedure ResetIndexedColors;
property Sheets: TXLSXSheets;
property Fonts: TXLSXFonts;
property Fills: TXLSXFills;
property Borders: TXLSXBorders;
property NumberFormats: TXLSXNumberFormats;
property Alignments: TXLSXAlignments;
property DefinedNames: TXLSXDefinedNames;
property ExternalLinks: TXLSXExternalLinks;
end;
| Sheets | 워크시트 컬렉션. See TXLSXSheets |
| Fonts | 통합 문서 수준 글꼴 팔레트입니다. 셀에서 TXLSXCell.FontIndex를 1부터 시작하는 인덱스로 설정하여 글꼴을 선택합니다
TXLSXFont / TXLSXFonts 참조 |
| Fills | 통합 문서 수준 채우기 팔레트입니다. 셀에서 TXLSXCell.FillIndex를 1부터 시작하는 인덱스로 설정하여 채우기를 선택합니다
TXLSXFill / TXLSXFills 참조 |
| Borders | 통합 문서 수준 테두리 팔레트입니다. 셀에서 TXLSXCell.BorderIndex를 1부터 시작하는 인덱스로 설정하여 테두리를 선택합니다
TXLSXBorder / TXLSXBorders 참조 |
| NumberFormats | 통합 문서 수준 사용자 정의 숫자 서식 팔레트입니다. 셀에서 TXLSXCell.NumberFormatIndex를 1부터 시작하는 인덱스로 설정하여 서식을 선택합니다
TXLSXNumberFormat / TXLSXNumberFormats 참조 |
| DefinedNames | 통합 문서 수준 이름 정의 범위(통합 문서 범위 또는 시트 범위)입니다 TXLSXDefinedName / TXLSXDefinedNames 참조 |
| Calculate | 활성 시트를 기준으로 Excel 수식 문자열을 컴파일하여 평가합니다. 선행 =도 허용됩니다. 셀 참조, 범위, 참조된 셀의 수식, 시트 간 참조, 정의된 이름 범위, 그리고 지원되는 텍스트·날짜·업무일·공학/진법 변환·비트 연산·통계·집계·수학 함수가 HotXLS 공유 수식 엔진을 통해 평가됩니다. 사용자 정의 함수나 지원되지 않는 함수 처리는 OnUserFunction 참조 |
| OnUserFunction, OnUserFunctionEx | 수식이 사용자 정의 함수 또는 지원되지 않는 함수를 호출할 때 Calculate에 의해 사용되는 콜백입니다
OnUserFunction / OnUserFunctionEx callback 참조 |
| GetSheetNames(FileName, AList), GetSheetNames(Stream, AList) | 워크시트 XML을 로드하지 않고 xl/workbook.xml을 읽어 통합 문서 순서대로 AList에 워크시트 이름을 추가합니다. 스트림 오버로드는 완전한 XLSX 패키지 스트림을 요구합니다. 읽은 이름 수를 반환하며, 패키지를 열 수 없으면 -1을 반환합니다 |
| Alignments | 통합 문서 수준 셀 정렬 팔레트입니다. 셀에서 TXLSXCell.AlignmentIndex를 1부터 시작하는 인덱스로 설정하여 항목을 선택합니다
TXLSXAlignment 참조 |
| Document properties | Title, Author, Subject, Keywords, Description, Category, LastModifiedBy, Company, Application, AppVersion, Created, Modified. 이 중 하나를 설정하면 SaveAs 시 docProps/core.xml + docProps/app.xml이 채워집니다(설정하지 않으면 통합 문서는 최소 파트 세트를 유지합니다) |
| ProtectWorkbook / UnProtectWorkbook | 선택적 16비트 레거시 암호 해시와 LockStructure / LockWindows 플래그를 사용하는 통합 문서 보호 토글입니다. xl/workbook.xml의 <workbookProtection>으로 반영됩니다 |
| LoadVbaProjectFromFile / VbaProject / HasVbaProject / VbaProjectDefined | LoadVbaProjectFromFile는 원시 vbaProject.bin 페이로드를 가져오고, VbaProject는 그 바이트를 노출하며, HasVbaProject와 읽기 전용 VbaProjectDefined는 모두 페이로드 존재 여부를 보고합니다. 매크로가 Excel에서 활성화되어야 할 경우 .xlsm 확장자로 저장하십시오 |
| ParsedVBAProject | 현재 vbaProject.bin 페이로드의 읽기 전용 파싱 뷰입니다. 페이로드가 유효한 OLE VBA 저장소이면 모듈 이름과 소스 텍스트를 노출하는 TXLSVBAProject를 반환하며, 그렇지 않으면 nil을 반환합니다. 원시 VbaProject 페이로드가 SaveAs/Open 라운드트립에 사용되는 권위 있는 바이트로 남습니다 |
| AddChartSheet(Name, Type, Title) | IsChartSheet = True로 플래그된 워크시트를 생성하고 Charts[0]에 적절한 기본 전체 페이지 앵커를 설정합니다. SaveAs는 이러한 시트를 xl/chartsheets/sheetN.xml에 씁니다
TXLSXChart 참조 |
| StreamingWrite | True이면 SaveAs가 시트별로 WriteWorksheetXmlStreaming을 사용합니다 — sheetXmls 캐시를 보유하지 않으며, 모든 시트가 SST를 채운 후 sharedStrings.xml이 마지막에 출력됩니다. 행별 TXLSWideStringBuilder와 함께 사용하면 대용량 시트에서 메모리를 선형으로 유지합니다. 기본값은 False(기존 동작)입니다 |
| SaveAsEncrypted / OpenEncrypted / CanReadEncrypted | ECMA-376 표준 암호화 쓰기 지원입니다. SaveAsEncrypted는 비어 있지 않은 암호에 대해 AES-128로 보호된 OLE 복합 파일 컨테이너를 기록하며, AES-NI 가속이 가능하면 활용하고 그렇지 않으면 소프트웨어 폴백을 사용합니다. 암호화된 출력은 저장 시 사용한 암호로 Excel 2007 이상에서 열 수 있습니다. CanReadEncrypted는 OLE2 매직 바이트를 감지하고, OpenEncrypted는 암호화되지 않은 파일에 대해 일반 Open으로 폴백하며 암호화된 패키지에 대해서는 복호화 지원이 추가될 때까지 EXlsxEncryptionNotImplemented를 발생시킵니다 |
| SaveAs(FileName) | 통합 문서를 지정된 파일에 씁니다. 성공 시 1을 반환하고, 실패 시 음수를 반환합니다. 통합 문서에 시트가 없으면 기본 Sheet1을 추가한 후 씁니다 |
| SaveAs(FileName, FileFormat) | OOXML 출력에는 xlsxOpenXMLWorkbook을, OpenDocument Spreadsheet(.ods) 패키지 직접 출력에는 xlsxOpenDocumentSpreadsheet를 지정합니다. SaveAsODS는 ODS 경로의 명명된 단축키로 동일한 파일 형식 출력과 선택적 TODSExportOptions 제어를 제공합니다 |
| SaveAs(Stream) / SaveAs(Stream, FileFormat) | 통합 문서를 임의의 TStream에 직접 씁니다. FileFormat 오버로드는 xlsxOpenXMLWorkbook 또는 xlsxOpenDocumentSpreadsheet를 허용하므로 메모리 내 XLSX 또는 ODS 생성 및 BLOB 저장 경로에 적합합니다. 성공 시 1을 반환합니다 |
| Open(FileName) | OOXML .xlsx 아카이브를 읽어 Sheets 컬렉션을 해당 내용으로 교체합니다. 성공 시 1을 반환합니다 |
| Open(FileName, Password) | 향후 암호화된 XLSX 지원을 위해 예약되어 있습니다. 현재는 Open(FileName)과 동일하게 동작하며 암호는 무시됩니다 |
| Open(Stream) | OOXML .xlsx 아카이브를 TStream에서 읽습니다. 성공 시 1을 반환합니다 |
| OpenCSV(FileName) / OpenCSV(Stream) | CSV 또는 TSV 텍스트를 통합 문서로 가져옵니다. 구분 기호 자동 감지(,, ;, 탭, 파이프), BOM 기반 UTF-8 / UTF-16 인코딩 감지, RFC 4180 방식의 따옴표 필드, ADetectTypes 오버로드를 통한 선택적 값 타입 추론을 지원합니다. .csv 또는 .tsv 파일에 대해 Open(FileName)을 호출하면 자동으로 이 가져오기 루틴으로 라우팅됩니다
OpenCSV 메서드 참조 |
| OpenODS(FileName) / OpenODS(Stream) | 파일 또는 스트림에서 OpenDocument Spreadsheet(.ods) 패키지를 가져옵니다. 리더는 content.xml과 styles.xml의 공유 스타일 정보, 뷰 설정을 로드하며, 시트 이름·스칼라 값·캐시된 수식 결과·기본 수식 참조 변환·반복 행/열/셀·병합 범위·서식 있는 텍스트·하이퍼링크·댓글·내장 이미지·내장 차트·숨겨진 행/열/시트·행 높이·열 너비·상속/기본 스타일·숫자/날짜/시간/통화/과학/분수 서식·셀 및 시트 보호 상태·이름 범위·인쇄 영역·수동 페이지 나누기·고정 창·자동 필터 범위·행/열 개요 그룹·머리글/바닥글·데이터 유효성 검사(프롬프트 포함)·조건부 서식(수식/색조/데이터 막대 포함)·시트 탭 색을 보존합니다. 완전한 OpenFormula 의미론, ODS 보호 키, 댓글 지오메트리, 고급 댓글 서식, 스프레드시트 콘텐츠 외부 패키지 기능은 변환되지 않습니다 |
| SaveAsODS(FileName) / SaveAsODS(Stream) | SaveAs(_, xlsxOpenDocumentSpreadsheet)의 명명된 단축키로, 선택적 TODSExportOptions 구조체(ODS 메타데이터 Title·Creator·Subject·Description 필드)를 받습니다. 공유 인프라(AutoFilter·차트·댓글·하이퍼링크·그림)는 HotXLS XLSX Facade와 동일합니다 |
| TODSExportOptions | SaveAsODS에 전달하는 선택적 메타데이터 레코드로, ODS 패키지의 meta.xml에 기록될 Title·Creator·Subject·Description 필드를 포함합니다 |
| GetODSSheetNames(FileName, AList), GetODSSheetNames(Stream, AList) | 전체 content.xml을 파싱하지 않고 .ods 아카이브를 읽어 시트 이름을 가져옵니다. XLSX 버전의 GetSheetNames와 동일한 의미론을 가집니다 |
| SaveAsCSV overloads | 지정된 파일 또는 스트림에 단일 시트를 CSV로 내보냅니다. ASheetIndex가 지정되지 않으면 첫 번째 시트가 사용되고, AUTF8이 True이면 BOM 없이 UTF-8로 출력하며 그렇지 않으면 시스템 기본 ANSI 코드 페이지를 사용합니다 |
| SaveAsHTML overloads | 지정된 파일 또는 스트림에 단일 시트를 UTF-8 HTML 테이블로 내보냅니다. 선택적 TXLSXHtmlExportOptions로 데이터 URI 이미지 삽입, 인라인 CSS 스타일, 빈 셀 출력 여부 등을 제어합니다 |
| SaveAsRTF overloads | 지정된 파일 또는 스트림에 단일 시트를 RTF 테이블로 내보냅니다. 출력은 ASCII RTF이며 숫자·날짜·텍스트 셀 값의 서식 있는 표현을 유지합니다 |
| ActiveSheet | XLS 및 OOXML 라운드트립을 위해 마지막으로 선택된 시트 탭의 0 기반 인덱스를 저장합니다. SaveAs는 이를 <workbookView activeTab="…"/>에 씁니다 |
| Minimized / WindowHidden / ShowHorizontalScroll / ShowVerticalScroll | Excel 창 상태 플래그로 <workbookView> 속성에 반영되며, SaveAs / Open 라운드트립 시 보존됩니다 |
| XWindow / YWindow / WindowWidth / WindowHeight | Twip 단위의 Excel 응용 프로그램 창 위치 및 크기입니다. <workbookView>에 반영되며, SaveAs / Open 라운드트립 시 보존됩니다 |
| ShowSheetTabs / TabRatio / FirstSheet / AutoFilterDateGrouping | 시트 탭 표시 여부, 탭 영역 대비 가로 스크롤 막대 비율(1000분율), 탭 스크롤 창의 첫 번째 표시 시트, AutoFilter 드롭다운의 날짜 그룹화 제어입니다 |
| Date1904 | True이면 날짜 일련 번호가 1904-01-01 기준이고, False이면(기본값) 1900-01-01 기준입니다. 날짜 셀을 추가하기 전에 설정해야 합니다. Mac용 Excel과의 라운드트립 시 필요합니다 |
| SourceFormat | 가장 최근 성공한 Open 또는 OpenODS 호출로 로드된 패키지 계열을 보고합니다. XLSX이면 xlsxOpenXMLWorkbook을, ODS이면 xlsxOpenDocumentSpreadsheet를 반환합니다. 새로 생성된 통합 문서는 파일을 열기 전까지 xlsxOpenXMLWorkbook을 보고합니다 |
| IndexedColor[Index] | 1부터 시작하는 인덱스로 ARGB 색상 값을 가져오거나 설정합니다. OOXML 인덱스 색상 테이블에 사용자 정의 팔레트 항목을 설정하면 SaveAs 시 <colors><indexedColors> 블록이 출력됩니다 |
| HasCustomIndexedColor / CustomIndexedColorCount / ResetIndexedColors | 사용자 정의 항목이 설정되어 있으면 HasCustomIndexedColor가 True를 반환하고, CustomIndexedColorCount는 설정된 항목 수를 반환하며, ResetIndexedColors는 팔레트를 기본 OOXML 인덱스 색상으로 초기화하여 SaveAs 출력에서 사용자 정의 블록을 제거합니다 |
| ExternalLinks | 통합 문서 수준 외부 링크 컬렉션입니다. 각
TXLSXExternalLink
항목은 URL과 캐시된 시트 이름을 보유하며, SaveAs 시 xl/externalLinks/ 파트에 기록됩니다 |
uses lxHandleX;
var
wb: TXLSXWorkbook;
begin
wb := TXLSXWorkbook.Create;
try
wb.Sheets.Add('Demo').Cells.Item[1, 1].Value := 'Hello';
wb.SaveAs('demo.xlsx');
wb.Open('demo.xlsx');
ShowMessage(wb.Sheets[0].Cells.Item[1, 1].Value);
finally
wb.Free;
end;
end;