import { FileEntity } from '../interfaces/file-entity.interface'; import { IFileProcessor, ProcessorInfo } from '../interfaces/file-processor.interface'; import { ProcessOptions, ProcessResult } from '../interfaces/processor-options.interface'; import { ValidationError } from 'class-validator'; /** * Excel 处理器配置 */ export interface ExcelProcessorOptions extends ProcessOptions { /** 工作表索引 */ sheetIndex?: number; /** 工作表名称 */ sheetName?: string; /** 读取范围 (如: A1:C10) */ range?: string; /** 起始行 */ startRow?: number; /** 最大行数 */ maxRows?: number; /** 最大列数 */ maxColumns?: number; /** 是否包含表头 */ headers?: boolean; /** 是否读取所有工作表 */ allSheets?: boolean; /** 日期格式 */ dateFormat?: string; /** 是否跳过空行 */ skipEmptyRows?: boolean; /** 是否转换数字为字符串 */ rawNumbers?: boolean; /** DTO类(用于装饰器映射) */ dto?: new () => any; /** 是否使用装饰器映射 */ useDecorators?: boolean; /** 是否修剪字段值 */ trim?: boolean; /** 严格模式(字段数必须一致) */ strict?: boolean; /** 是否将解析结果存入 file_metadata */ saveToMetadata?: boolean; /** 元数据存储键名 */ metadataKey?: string; } /** * Excel 处理结果 */ export interface ExcelProcessResult extends ProcessResult { /** Excel 数据 */ data: any[] | Record; /** 当前工作表名称 */ sheetName?: string; /** 表头 */ headers?: string[]; /** 行数 */ rowCount: number; /** 列数 */ columnCount: number; /** 工作表总数 */ totalSheets?: number; /** 工作表名称列表 */ sheetNames?: string[]; /** 错误信息 */ errors?: { row: number; column?: string; errors: ValidationError[]; data: any; }[]; /** 成功的行数 */ successCount?: number; /** 失败的行数 */ errorCount?: number; /** 原始数据(用于调试) */ rawRecords?: any[]; /** 是否已保存到元数据 */ savedToMetadata?: boolean; /** 元数据存储键名 */ metadataKey?: string; } /** * Excel 文件处理器 * 使用 ExcelJS 库处理上传的 Excel 文件 */ export declare class ExcelProcessor implements IFileProcessor { readonly name = "excel"; readonly supportedTypes: string[]; private readonly logger; /** * 验证是否为 Excel 文件 */ validate(buffer: Buffer): Promise; process(file: FileEntity, options?: ExcelProcessorOptions): Promise; /** * 获取处理器信息 */ getInfo(): ProcessorInfo; /** * 健康检查 */ healthCheck(): Promise; /** * 清理资源 */ cleanup(): Promise; /** * 流式解析工作表(逐行处理,避免一次性加载所有数据) */ private parseWorksheetStreaming; /** * 获取单元格值(处理各种类型) */ private getCellValue; /** * 使用装饰器处理单行数据 */ private processRowWithDecorators; /** * 解析工作表(保留原方法作为备用) * @deprecated 使用 parseWorksheetStreaming 代替 */ private parseWorksheet; /** * 获取列字母 (A, B, C..., AA, AB...) */ private getColumnLetter; /** * 获取表头键 */ private getHeaderKey; }