HotXLS 문서

TXLSXWorkbook 클래스

Excel 2007+(.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.xmlstyles.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과 캐시된 시트 이름을 보유하며, SaveAsxl/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;
    

참조