UNPKG

xml-xlsx-lite

Version:

🚀 Lightweight Excel XLSX generator with full Excel features: dynamic pivot tables, charts, styles, and Chinese support. Fast, TypeScript-friendly Excel file creation library. | 輕量級 Excel XLSX 生成器,支援樞紐分析表、圖表、樣式,完整繁體中文支援。

1,270 lines (1,248 loc) 34.8 kB
import JSZip from 'jszip'; interface CellOptions { numFmt?: string; font?: { bold?: boolean; italic?: boolean; size?: number; name?: string; color?: string; underline?: boolean; strike?: boolean; }; alignment?: { horizontal?: 'left' | 'center' | 'right' | 'justify' | 'distributed'; vertical?: 'top' | 'middle' | 'bottom' | 'justify' | 'distributed'; wrapText?: boolean; indent?: number; rotation?: number; }; fill?: { type?: 'pattern' | 'gradient'; color?: string; patternType?: 'none' | 'solid' | 'darkGray' | 'mediumGray' | 'lightGray' | 'darkHorizontal' | 'darkVertical' | 'darkDown' | 'darkUp' | 'darkGrid' | 'darkTrellis' | 'lightHorizontal' | 'lightVertical' | 'lightDown' | 'lightUp' | 'lightGrid' | 'lightTrellis' | 'gray125' | 'gray0625'; fgColor?: string; bgColor?: string; }; border?: { style?: 'none' | 'thin' | 'medium' | 'dashed' | 'dotted' | 'thick' | 'double' | 'hair' | 'mediumDashed' | 'dashDot' | 'mediumDashDot' | 'dashDotDot' | 'mediumDashDotDot' | 'slantDashDot'; color?: string; top?: { style?: string; color?: string; }; left?: { style?: string; color?: string; }; bottom?: { style?: string; color?: string; }; right?: { style?: string; color?: string; }; }; mergeRange?: string; mergedInto?: string; formula?: string; formulaType?: 'array' | 'shared' | 'dataTable'; pivotTable?: { isPivotField?: boolean; pivotFieldType?: 'row' | 'column' | 'value' | 'filter'; pivotFieldIndex?: number; pivotItemIndex?: number; isSubtotal?: boolean; isGrandTotal?: boolean; }; } interface Cell { address: string; value: number | string | boolean | Date | null; type: 'n' | 's' | 'b' | 'd' | 'inlineStr' | null; options: CellOptions; } interface Worksheet { name: string; getCell(address: string): Cell; setCell(address: string, value: number | string | boolean | Date | null, options?: CellOptions): Cell; rows(): Generator<[number, Map<number, Cell>]>; mergeCells(range: string): void; unmergeCells(range: string): void; getMergedRanges(): string[]; setColumnWidth(column: string | number, width: number): void; getColumnWidth(column: string | number): number; setRowHeight(row: number, height: number): void; getRowHeight(row: number): number; freezePanes(row?: number, column?: number): void; unfreezePanes(): void; getFreezePanes(): { row?: number; column?: number; }; setFormula(address: string, formula: string, options?: CellOptions): Cell; getFormula(address: string): string | null; validateFormula(formula: string): boolean; getFormulaDependencies(address: string): string[]; protect(password?: string, options?: WorksheetProtectionOptions): void; unprotect(password?: string): void; isProtected(): boolean; getProtectionOptions(): WorksheetProtectionOptions | null; addChart(chart: Chart): void; removeChart(chartName: string): void; getCharts(): Chart[]; getChart(chartName: string): Chart | undefined; } interface PivotField { name: string; sourceColumn: string; type: 'row' | 'column' | 'value' | 'filter'; function?: 'sum' | 'count' | 'average' | 'max' | 'min' | 'countNums' | 'stdDev' | 'stdDevP' | 'var' | 'varP'; numberFormat?: string; showSubtotal?: boolean; showGrandTotal?: boolean; sortOrder?: 'asc' | 'desc'; filterValues?: string[]; customName?: string; } interface PivotTableConfig { name: string; sourceRange: string; targetRange: string; fields: PivotField[]; showRowHeaders?: boolean; showColumnHeaders?: boolean; showRowSubtotals?: boolean; showColumnSubtotals?: boolean; showGrandTotals?: boolean; autoFormat?: boolean; compactRows?: boolean; outlineData?: boolean; mergeLabels?: boolean; pageBreakBetweenGroups?: boolean; repeatRowLabels?: boolean; rowGrandTotals?: boolean; columnGrandTotals?: boolean; } interface PivotTable { name: string; config: PivotTableConfig; refresh(): void; updateSourceData(sourceRange: string): void; getField(fieldName: string): PivotField | undefined; addField(field: PivotField): void; removeField(fieldName: string): void; reorderFields(fieldOrder: string[]): void; applyFilter(fieldName: string, filterValues: string[]): void; clearFilters(): void; getData(): any[][]; exportToWorksheet(worksheetName: string): Worksheet; } interface WorksheetProtectionOptions { selectLockedCells?: boolean; selectUnlockedCells?: boolean; formatCells?: boolean; formatColumns?: boolean; formatRows?: boolean; insertColumns?: boolean; insertRows?: boolean; insertHyperlinks?: boolean; deleteColumns?: boolean; deleteRows?: boolean; sort?: boolean; autoFilter?: boolean; pivotTables?: boolean; objects?: boolean; scenarios?: boolean; } type ChartType = 'column' | 'line' | 'pie' | 'bar' | 'area' | 'scatter' | 'doughnut' | 'radar'; interface ChartData { series: string; categories: string; values: string; color?: string; } interface ChartOptions { title?: string; xAxisTitle?: string; yAxisTitle?: string; width?: number; height?: number; showLegend?: boolean; showDataLabels?: boolean; showGridlines?: boolean; theme?: 'light' | 'dark'; } interface Chart { name: string; type: ChartType; data: ChartData[]; options: ChartOptions; position: { row: number; col: number; }; } interface Workbook$1 { getWorksheet(nameOrIndex: string | number): Worksheet; getWorksheets(): Worksheet[]; getCell(worksheet: string | Worksheet, address: string): Cell; setCell(worksheet: string | Worksheet, address: string, value: number | string | boolean | Date | null, options?: CellOptions): Cell; writeBuffer(): Promise<ArrayBuffer>; writeFile(filename: string): Promise<void>; writeStream(writeStream: (chunk: Uint8Array) => Promise<void>): Promise<void>; addLargeDataset(worksheetName: string, data: Array<Array<any>>, options?: { startRow?: number; startCol?: number; chunkSize?: number; }): Promise<void>; setMemoryOptimization(enabled: boolean): void; setChunkSize(size: number): void; setCacheEnabled(enabled: boolean): void; setMaxCacheSize(size: number): void; getMemoryStats(): { sheets: number; totalCells: number; cacheSize: number; cacheHitRate: number; memoryUsage: number; }; forceGarbageCollection(): void; createPivotTable(config: PivotTableConfig): PivotTable; getPivotTable(name: string): PivotTable | undefined; getAllPivotTables(): PivotTable[]; removePivotTable(name: string): boolean; refreshAllPivotTables(): void; protect(password?: string, options?: WorkbookProtectionOptions): void; unprotect(password?: string): void; isProtected(): boolean; getProtectionOptions(): WorkbookProtectionOptions | null; } interface WorkbookProtectionOptions { structure?: boolean; windows?: boolean; password?: string; } declare const COL_A_CODE: number; declare const EXCEL_EPOCH: Date; /** * 將欄位名稱轉換為數字 * e.g., A -> 1, Z -> 26, AA -> 27 */ declare function colToNumber(col: string): number; /** * 將數字轉換為欄位名稱 */ declare function numberToCol(n: number): string; /** * 解析儲存格地址 * "B12" -> { col: 2, row: 12 } */ declare function parseAddress(addr: string): { col: number; row: number; }; /** * 從行列號生成儲存格地址 */ declare function addrFromRC(row: number, col: number): string; /** * 檢查是否為日期類型 */ declare function isDate(val: any): val is Date; /** * JavaScript Date 轉換為 Excel 序列號 (1900 系統) */ declare function excelSerialFromDate(d: Date): number; /** * 取得儲存格類型 */ declare function getCellType(value: any): 'n' | 's' | 'b' | 'd' | 'inlineStr' | null; /** * XML 轉義工具 */ declare function escapeXmlText(str: any): string; declare function escapeXmlAttr(str: any): string; /** * 密碼雜湊工具(簡單實現) */ declare function hashPassword(password: string): string; /** * 驗證密碼 */ declare function verifyPassword(password: string, hash: string): boolean; /** * 生成唯一 ID */ declare function generateUniqueId(): string; /** * 儲存格模型實現 */ declare class CellModel implements Cell { address: string; value: number | string | boolean | Date | null; type: 'n' | 's' | 'b' | 'd' | 'inlineStr' | null; options: CellOptions; constructor(address: string); /** * 設定儲存格值 */ setValue(value: number | string | boolean | Date | null): void; /** * 設定儲存格選項 */ setOptions(options: CellOptions): void; /** * 清除儲存格內容 */ clear(): void; /** * 檢查儲存格是否為空 */ isEmpty(): boolean; /** * 取得儲存格顯示值 */ getDisplayValue(): string; } /** * 工作表實現類別 */ declare class WorksheetImpl implements Worksheet { name: string; private _cells; private _maxRow; private _maxCol; private _mergedRanges; private _columnWidths; private _rowHeights; private _freezeRow; private _freezeCol; private _protection; private _charts; constructor(name: string); getCell(address: string): CellModel; setCell(address: string, value: number | string | boolean | Date | null, options?: CellOptions): CellModel; rows(): Generator<[number, Map<number, CellModel>]>; mergeCells(range: string): void; unmergeCells(range: string): void; getMergedRanges(): string[]; setColumnWidth(column: string | number, width: number): void; getColumnWidth(column: string | number): number; setRowHeight(row: number, height: number): void; getRowHeight(row: number): number; freezePanes(row?: number, column?: number): void; unfreezePanes(): void; getFreezePanes(): { row?: number; column?: number; }; setFormula(address: string, formula: string, options?: CellOptions): CellModel; getFormula(address: string): string | null; validateFormula(formula: string): boolean; getFormulaDependencies(address: string): string[]; protect(password?: string, options?: any): void; unprotect(password?: string): void; isProtected(): boolean; getProtectionOptions(): any; addChart(chart: Chart): void; removeChart(chartName: string): void; getCharts(): Chart[]; getChart(chartName: string): Chart | undefined; private _rangesOverlap; get _maxRowValue(): number; get _maxColValue(): number; get _columnWidthsValue(): Map<number, number> | undefined; get _rowHeightsValue(): Map<number, number> | undefined; } /** * 工作表保護實現 */ declare class WorksheetProtection { private _isProtected; private _passwordHash; private _options; constructor(); /** * 保護工作表 */ protect(password?: string, options?: Partial<WorksheetProtectionOptions>): void; /** * 解除工作表保護 */ unprotect(password?: string): void; /** * 檢查工作表是否受保護 */ isProtected(): boolean; /** * 取得保護選項 */ getProtectionOptions(): WorksheetProtectionOptions | null; /** * 檢查操作是否被允許 */ isOperationAllowed(operation: keyof WorksheetProtectionOptions): boolean; /** * 驗證密碼 */ validatePassword(password: string): boolean; } /** * 工作簿保護實現 */ declare class WorkbookProtection { private _isProtected; private _passwordHash; private _options; constructor(); /** * 保護工作簿 */ protect(password?: string, options?: Partial<WorkbookProtectionOptions>): void; /** * 解除工作簿保護 */ unprotect(password?: string): void; /** * 檢查工作簿是否受保護 */ isProtected(): boolean; /** * 取得保護選項 */ getProtectionOptions(): WorkbookProtectionOptions | null; /** * 檢查操作是否被允許 */ isOperationAllowed(operation: keyof Omit<WorkbookProtectionOptions, 'password'>): boolean; /** * 驗證密碼 */ validatePassword(password: string): boolean; } /** * 圖表實現類別 */ declare class ChartImpl implements Chart { name: string; type: ChartType; data: ChartData[]; options: ChartOptions; position: { row: number; col: number; }; constructor(name: string, type: ChartType, data: ChartData[], options?: ChartOptions, position?: { row: number; col: number; }); /** * 添加資料系列 */ addSeries(series: ChartData): void; /** * 移除資料系列 */ removeSeries(seriesName: string): void; /** * 更新圖表選項 */ updateOptions(options: Partial<ChartOptions>): void; /** * 移動圖表位置 */ moveTo(row: number, col: number): void; /** * 調整圖表大小 */ resize(width: number, height: number): void; /** * 取得圖表 XML 表示 */ toXml(): { chartXml: string; drawingXml: string; chartId: string; }; /** * 驗證圖表資料 */ validate(): boolean; /** * 建立圖表 XML */ private _buildChartXml; /** * 建立圖表標題 */ private _buildChartTitle; /** * 建立圖表類型 */ private _buildChartType; /** * 建立圖表資料系列 */ private _buildChartSeries; /** * 建立圖表軸線 */ private _buildChartAxes; /** * 建立圖表圖例 */ private _buildChartLegend; /** * 建立繪圖 XML */ private _buildDrawingXml; } /** * 圖表工廠類別 */ declare class ChartFactory { /** * 建立柱狀圖 */ static createColumnChart(name: string, data: ChartData[], options?: ChartOptions, position?: { row: number; col: number; }): ChartImpl; /** * 建立折線圖 */ static createLineChart(name: string, data: ChartData[], options?: ChartOptions, position?: { row: number; col: number; }): ChartImpl; /** * 建立圓餅圖 */ static createPieChart(name: string, data: ChartData[], options?: ChartOptions, position?: { row: number; col: number; }): ChartImpl; /** * 建立長條圖 */ static createBarChart(name: string, data: ChartData[], options?: ChartOptions, position?: { row: number; col: number; }): ChartImpl; /** * 建立面積圖 */ static createAreaChart(name: string, data: ChartData[], options?: ChartOptions, position?: { row: number; col: number; }): ChartImpl; /** * 建立散佈圖 */ static createScatterChart(name: string, data: ChartData[], options?: ChartOptions, position?: { row: number; col: number; }): ChartImpl; } /** * xml-xlsx-lite 樞紐分析表實現 */ /** * 樞紐分析表實現類別 */ declare class PivotTableImpl implements PivotTable { name: string; config: PivotTableConfig; private data; private pivotData; private rowFields; private columnFields; private valueFields; private filters; constructor(name: string, config: PivotTableConfig); /** * 初始化欄位分類 */ private initializeFields; /** * 設定來源資料 */ setSourceData(data: any[][]): void; /** * 重新整理樞紐分析表 */ refresh(): void; /** * 解析來源資料 */ private parseSourceData; /** * 解析範圍字串 */ private parseRange; /** * 建立樞紐分析表資料 */ private buildPivotData; /** * 收集唯一值 */ private collectUniqueValues; /** * 建立樞紐分析表結構 */ private createPivotStructure; /** * 建立標題行 */ private createTitleRow; /** * 建立資料行 */ private createDataRows; /** * 更新來源資料 */ updateSourceData(sourceRange: string): void; /** * 取得欄位 */ getField(fieldName: string): PivotField | undefined; /** * 添加欄位 */ addField(field: PivotField): void; /** * 移除欄位 */ removeField(fieldName: string): void; /** * 重新排序欄位 */ reorderFields(fieldOrder: string[]): void; /** * 應用篩選 */ applyFilter(fieldName: string, filterValues: (string | number | boolean)[]): void; /** * 清除篩選 */ clearFilters(): void; /** * 取得資料 */ getData(): any[][]; /** * 匯出到工作表 */ exportToWorksheet(worksheetName: string): Worksheet; } declare global { interface Buffer extends Uint8Array { } } type PivotAgg = "sum" | "count" | "average" | "max" | "min" | "product"; interface PivotFieldSpec { name: string; } interface PivotValueSpec { name: string; agg?: PivotAgg; displayName?: string; numFmtId?: number; } interface PivotLayout { rows?: PivotFieldSpec[]; cols?: PivotFieldSpec[]; values: PivotValueSpec[]; } interface CreatePivotOptions { sourceSheet: string; sourceRange: string; targetSheet: string; anchorCell: string; layout: PivotLayout; refreshOnLoad?: boolean; styleName?: string; } /** 你套件對外:Buffer in Buffer out */ declare function addPivotToWorkbookBuffer(buf: Buffer, opt: CreatePivotOptions): Promise<Buffer>; declare class PivotBuilder { static attach(zip: JSZip, opt: CreatePivotOptions): Promise<void>; } /** * 工作簿實現類別 */ declare class WorkbookImpl implements Workbook$1 { private _sheets; private _sheetByName; private _sst; private _sstArr; private _styles; private _fonts; private _fills; private _borders; private _alignments; private _nextStyleId; private _nextFontId; private _nextFillId; private _nextBorderId; private _nextAlignmentId; private _memoryOptimization; private _chunkSize; private _cacheEnabled; private _cache; private _maxCacheSize; private _gcThreshold; private _pivotTables; private _protection; constructor(options?: { memoryOptimization?: boolean; chunkSize?: number; cacheEnabled?: boolean; maxCacheSize?: number; }); private _initDefaultStyles; private _getFontIndex; private _getFillIndex; private _getBorderIndex; private _getAlignmentIndex; private _getStyleIndex; /** exceljs-like */ getWorksheet(nameOrIndex: string | number): Worksheet; getWorksheets(): Worksheet[]; /** Convenience passthroughs */ getCell(worksheet: string | Worksheet, address: string): Cell; setCell(worksheet: string | Worksheet, address: string, value: number | string | boolean | Date | null, options?: CellOptions): Cell; /** Build .xlsx as ArrayBuffer */ writeBuffer(): Promise<ArrayBuffer>; /** Write .xlsx file to disk */ writeFile(filename: string): Promise<void>; /** * 串流寫入 Excel 檔案 */ writeStream(writeStream: (chunk: Uint8Array) => Promise<void>): Promise<void>; /** * 分塊串流寫入 */ private _writeStreamChunked; /** * 分塊建立工作表 XML */ private _buildSheetXmlChunked; /** * 串流 ZIP 檔案 */ private _streamZip; /** * 建立大型資料集(優化版本) */ addLargeDataset(worksheetName: string, data: Array<Array<any>>, options?: { startRow?: number; startCol?: number; chunkSize?: number; }): Promise<void>; /** Internal: called by buildSheetXml to register shared strings */ private _sstIndex; /** * 啟用/停用記憶體優化 */ setMemoryOptimization(enabled: boolean): void; /** * 設定分塊處理大小 */ setChunkSize(size: number): void; /** * 啟用/停用快取 */ setCacheEnabled(enabled: boolean): void; /** * 設定快取大小限制 */ setMaxCacheSize(size: number): void; /** * 取得記憶體使用統計 */ getMemoryStats(): { sheets: number; totalCells: number; cacheSize: number; cacheHitRate: number; memoryUsage: number; }; /** * 強制記憶體回收 */ forceGarbageCollection(): void; /** * 清理快取 */ private _clearCache; /** * 清理快取(保持大小限制) */ private _cleanupCache; /** * 清理未使用的樣式 */ private _cleanupUnusedStyles; /** * 取得快取命中率 */ private _getCacheHitRate; /** * 估算記憶體使用量 */ private _estimateMemoryUsage; /** * 智慧快取管理 */ private _smartCache; /** * 估算物件大小 */ private _estimateObjectSize; createPivotTable(config: PivotTableConfig): PivotTable; getPivotTable(name: string): PivotTable | undefined; getAllPivotTables(): PivotTable[]; removePivotTable(name: string): boolean; refreshAllPivotTables(): void; protect(password?: string, options?: WorkbookProtectionOptions): void; unprotect(password?: string): void; isProtected(): boolean; getProtectionOptions(): WorkbookProtectionOptions | null; /** * 生成 Pivot Table 相關的 XML 檔案 */ generatePivotTableFiles(): { pivotCacheXml: string; pivotCacheRecordsXml: string; pivotCacheRelsXml: string; pivotTableXml: string; pivotTableRelsXml: string; cacheId: number; tableId: number; }[]; /** * 生成包含 Pivot Table 的完整 Excel 檔案 */ writeBufferWithPivotTables(): Promise<ArrayBuffer>; /** * 添加 Pivot Table 相關檔案到 ZIP */ private _addPivotTableFiles; /** * 更新 Content Types 以包含 Pivot Table 檔案 */ private _updateContentTypesForPivotTables; /** * 更新 Workbook 關聯以包含 Pivot Table 檔案 */ private _updateWorkbookRelsForPivotTables; /** * 取得 Content Types XML */ private _getContentTypesXml; /** * 取得 Workbook 關聯 XML */ private _getWorkbookRelsXml; /** * 生成關聯 ID */ private _generateRelId; /** * 添加基本檔案到 ZIP */ private _addBasicFiles; get _sstMap(): Map<string, number>; get _sstArray(): string[]; get _stylesMap(): Map<string, number>; get _fontsMap(): Map<string, number>; get _fillsMap(): Map<string, number>; get _bordersMap(): Map<string, number>; get _alignmentsMap(): Map<string, number>; } /** * 手動樞紐分析表 API * 提供純程式彙總的一條龍服務 */ interface ManualPivotOptions { name?: string; rowField: string; columnField: string; valueField: string; aggregation?: 'sum' | 'avg' | 'count' | 'max' | 'min'; numberFormat?: string; showRowTotals?: boolean; showColumnTotals?: boolean; showGrandTotal?: boolean; sortBy?: 'row' | 'column' | 'value'; sortOrder?: 'asc' | 'desc'; } interface ManualPivotResult { worksheet: Worksheet; summary: { totalRows: number; totalColumns: number; totalValue: number; uniqueRowValues: number; uniqueColumnValues: number; }; } /** * 在手動樞紐分析表中創建樞紐分析表 * 支援 rowField / columnField / valueField / aggregation / numberFormat */ declare function createManualPivotTable(this: WorkbookImpl, data: Array<Record<string, any>>, options: ManualPivotOptions): ManualPivotResult; /** * createManualPivotTable 方法綁定到 Workbook 原型 */ declare function bindManualPivotMethods(): void; /** * 建立 Content Types XML */ declare function buildContentTypes(sheetCount: number, hasStyles: boolean, hasSharedStrings: boolean): string; /** * 建立根關係 XML */ declare function buildRootRels(): string; /** * 建立工作簿 XML */ declare function buildWorkbookXml(sheets: Worksheet[]): { workbookXml: string; workbookRelsXml: string; }; /** * 建立工作表 XML */ declare function buildSheetXml(ws: Worksheet, index: number, sstMap: Map<string, number>, workbook: Workbook$1): string; /** * 建立共享字串 XML */ declare function buildSharedStringsXml(sstMap: Map<string, number>, sstArr: string[]): string; /** * 建立樣式 XML */ declare function buildStylesXml(workbook: Workbook$1): string; /** * xml-xlsx-lite 自訂錯誤類型 * 提供統一的錯誤處理和建議 */ declare class XlsxLiteError extends Error { code: 'METHOD_NOT_IMPLEMENTED' | 'INVALID_PIVOT_SPEC' | 'UNSUPPORTED_OPERATION' | 'INVALID_DATA' | 'FILE_OPERATION_FAILED'; suggestion?: string; constructor(message: string, code: 'METHOD_NOT_IMPLEMENTED' | 'INVALID_PIVOT_SPEC' | 'UNSUPPORTED_OPERATION' | 'INVALID_DATA' | 'FILE_OPERATION_FAILED', suggestion?: string); } /** * 創建方法未實作錯誤 */ declare function createMethodNotImplementedError(methodName: string, alternative: string, example?: string): XlsxLiteError; /** * 創建樞紐分析表規格錯誤 */ declare function createInvalidPivotSpecError(field: string, value: any, expected: string): XlsxLiteError; /** * 創建不支援操作錯誤 */ declare function createUnsupportedOperationError(operation: string, reason: string, alternative?: string): XlsxLiteError; /** * 創建無效資料錯誤 */ declare function createInvalidDataError(field: string, value: any, rule: string): XlsxLiteError; /** * 創建檔案操作錯誤 */ declare function createFileOperationError(operation: string, filePath: string, details: string): XlsxLiteError; /** * xml-xlsx-lite 效能優化器 * 實現 sharedStrings 自動切換和大檔案處理優化 */ /** * 效能優化配置 */ interface PerformanceConfig { /** 啟用 sharedStrings 的閾值(字串數量) */ sharedStringsThreshold: number; /** 啟用 sharedStrings 的重複率閾值(百分比) */ repetitionRateThreshold: number; /** 大檔案處理的儲存格數量閾值 */ largeFileThreshold: number; /** 啟用串流處理的檔案大小閾值(MB) */ streamingThreshold: number; /** 快取大小限制(MB) */ cacheSizeLimit: number; /** 是否啟用記憶體優化 */ memoryOptimization: boolean; } /** * 效能統計資訊 */ interface PerformanceStats { /** 總儲存格數量 */ totalCells: number; /** 字串儲存格數量 */ stringCells: number; /** 唯一字串數量 */ uniqueStrings: number; /** 字串重複率 */ repetitionRate: number; /** 記憶體使用量(MB) */ memoryUsage: number; /** 處理時間(毫秒) */ processingTime: number; /** 建議的優化策略 */ recommendedStrategy: string[]; } /** * 效能優化器 */ declare class PerformanceOptimizer { private config; private stats; constructor(config?: Partial<PerformanceConfig>); /** * 分析工作表效能 */ analyzeWorksheet(worksheet: any): PerformanceStats; /** * 收集統計資訊 */ private collectStats; /** * 計算字串重複率 */ private calculateRepetitionRate; /** * 生成優化建議 */ private generateRecommendations; /** * 判斷是否應該使用 sharedStrings */ shouldUseSharedStrings(): boolean; /** * 判斷是否應該使用串流處理 */ shouldUseStreaming(): boolean; /** * 判斷是否應該優化記憶體 */ shouldOptimizeMemory(): boolean; /** * 獲取優化的儲存格類型 */ getOptimizedCellType(value: any): 'inlineStr' | 's'; /** * 創建效能警告 */ createPerformanceWarning(message: string, suggestion?: string): XlsxLiteError; /** * 獲取效能配置 */ getConfig(): PerformanceConfig; /** * 更新效能配置 */ updateConfig(newConfig: Partial<PerformanceConfig>): void; /** * 重置統計資訊 */ resetStats(): void; /** * 獲取記憶體使用量(模擬) */ getMemoryUsage(): number; } /** * 串流處理器 */ declare class StreamingProcessor { private chunkSize; private progressCallback?; constructor(chunkSize?: number, progressCallback?: (progress: number) => void); /** * 分批處理資料 */ processInChunks<T>(data: T[], processor: (chunk: T[]) => Promise<void>): Promise<void>; /** * 設定進度回調 */ setProgressCallback(callback: (progress: number) => void): void; /** * 設定分塊大小 */ setChunkSize(size: number): void; } /** * 快取管理器 */ declare class CacheManager { private cache; private maxSize; private accessCount; constructor(maxSize?: number); /** * 獲取快取項目 */ get(key: string): any | undefined; /** * 設定快取項目 */ set(key: string, value: any): void; /** * 移除最少使用的項目 */ private evictLeastUsed; /** * 清除快取 */ clear(): void; /** * 獲取快取統計 */ getStats(): { size: number; maxSize: number; hitRate: number; }; } /** * xml-xlsx-lite XML 解析工具 */ /** * 簡單的 XML 解析器 */ declare class SimpleXMLParser { private text; private position; constructor(text: string); /** * 解析 XML 文檔 */ parse(): XMLNode; /** * 解析元素 */ private parseElement; /** * 讀取標籤名稱 */ private readTagName; /** * 讀取屬性 */ private readAttribute; /** * 讀取文本內容 */ private readTextContent; /** * 跳過空白字符 */ private skipWhitespace; /** * 查看當前字符 */ private peek; /** * 查看接下來的字符串 */ private peekString; /** * 消費當前字符 */ private consume; /** * 期望特定字符 */ private expect; /** * 是否為文件結尾 */ private isEOF; /** * 是否為空白字符 */ private isWhitespace; /** * 是否為名稱字符 */ private isNameChar; /** * XML 反轉義 */ private unescapeXML; } /** * XML 節點類別 */ declare class XMLNode { tagName: string; attributes: Record<string, string>; children: XMLNode[]; textContent: string; constructor(tagName: string, attributes: Record<string, string>, children: XMLNode[], textContent: string); /** * 根據標籤名稱查找子元素 */ findChild(tagName: string): XMLNode | undefined; /** * 根據標籤名稱查找所有子元素 */ findChildren(tagName: string): XMLNode[]; /** * 獲取屬性值 */ getAttribute(name: string): string | undefined; /** * 獲取文本內容 */ getText(): string; /** * 遞歸查找元素 */ findDeep(tagName: string): XMLNode | undefined; /** * 遞歸查找所有元素 */ findAllDeep(tagName: string): XMLNode[]; } /** * 解析 XML 字符串 */ declare function parseXML(xmlText: string): XMLNode; /** * API 相容性層 * 提供薄包裝方法,避免使用者誤用 */ /** * 將工作簿寫入檔案(薄包裝) * 內部使用 writeBuffer() + fs.writeFileSync */ declare function writeFile(this: WorkbookImpl, filePath: string): Promise<string>; /** * 將工作簿寫入檔案並插入樞紐分析表(薄包裝) * 內部使用 writeBuffer() + addPivotToWorkbookBuffer + fs.writeFileSync */ declare function writeFileWithPivotTables(this: WorkbookImpl, filePath: string, pivotOptions: any): Promise<string>; /** * 將工作簿寫入檔案並插入多個樞紐分析表(薄包裝) */ declare function writeFileWithMultiplePivots(this: WorkbookImpl, filePath: string, pivotOptionsArray: any[]): Promise<string>; /** * 攔截舊的 writeFile 方法,提供明確的錯誤訊息 */ declare function interceptOldWriteFile(workbook: WorkbookImpl): void; /** * 將相容性方法綁定到 Workbook 原型 */ declare function bindCompatibilityMethods(): void; declare const Workbook: typeof WorkbookImpl; declare const _default: { Workbook: typeof WorkbookImpl; }; export { COL_A_CODE, CacheManager, type Cell, CellModel, type CellOptions, type Chart, type ChartData, ChartFactory, ChartImpl, type ChartOptions, type ChartType, type CreatePivotOptions, EXCEL_EPOCH, type ManualPivotOptions, type ManualPivotResult, type PerformanceConfig, PerformanceOptimizer, type PerformanceStats, type PivotAgg, PivotBuilder, type PivotField, type PivotFieldSpec, type PivotLayout, type PivotTable, type PivotTableConfig, PivotTableImpl, type PivotValueSpec, SimpleXMLParser, StreamingProcessor, Workbook, WorkbookImpl, WorkbookProtection, type WorkbookProtectionOptions, type Worksheet, WorksheetImpl, WorksheetProtection, type WorksheetProtectionOptions, XMLNode, XlsxLiteError, addPivotToWorkbookBuffer, addrFromRC, bindCompatibilityMethods, bindManualPivotMethods, buildContentTypes, buildRootRels, buildSharedStringsXml, buildSheetXml, buildStylesXml, buildWorkbookXml, colToNumber, createFileOperationError, createInvalidDataError, createInvalidPivotSpecError, createManualPivotTable, createMethodNotImplementedError, createUnsupportedOperationError, _default as default, escapeXmlAttr, escapeXmlText, excelSerialFromDate, generateUniqueId, getCellType, hashPassword, interceptOldWriteFile, isDate, numberToCol, parseAddress, parseXML, verifyPassword, writeFile, writeFileWithMultiplePivots, writeFileWithPivotTables };