{"version":3,"file":"xlsx.mjs","sources":["../../../../packages/abc/xlsx/xlsx.service.ts","../../../../packages/abc/xlsx/xlsx.directive.ts","../../../../packages/abc/xlsx/xlsx.module.ts","../../../../packages/abc/xlsx/xlsx.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, NgZone, inject } from '@angular/core';\n\nimport isUtf8 from 'isutf8';\n\nimport { AlainConfigService, AlainXlsxConfig } from '@delon/util/config';\nimport { ZoneOutside } from '@delon/util/decorator';\nimport { LazyResult, LazyService } from '@delon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { XlsxExportOptions, XlsxExportResult, XlsxExportSheet } from './xlsx.types';\n\ndeclare var XLSX: NzSafeAny;\ndeclare var cptable: NzSafeAny;\n\n@Injectable({ providedIn: 'root' })\nexport class XlsxService {\n  private readonly http = inject(HttpClient);\n  private readonly lazy = inject(LazyService);\n  private readonly ngZone = inject(NgZone);\n\n  private cog: AlainXlsxConfig;\n\n  constructor(configSrv: AlainConfigService) {\n    this.cog = configSrv.merge('xlsx', {\n      url: 'https://cdn.jsdelivr.net/npm/xlsx/dist/xlsx.full.min.js',\n      modules: [`https://cdn.jsdelivr.net/npm/xlsx/dist/cpexcel.js`]\n    })!;\n  }\n\n  private init(): Promise<LazyResult[]> {\n    return typeof XLSX !== 'undefined'\n      ? Promise.resolve([])\n      : this.lazy.load([this.cog.url!].concat(this.cog.modules!));\n  }\n\n  @ZoneOutside()\n  private read(data: NzSafeAny): { [key: string]: NzSafeAny[][] } {\n    const {\n      read,\n      utils: { sheet_to_json }\n    } = XLSX;\n    const ret: NzSafeAny = {};\n    const buf = new Uint8Array(data);\n    let type = 'array';\n    if (!isUtf8(buf)) {\n      try {\n        data = cptable.utils.decode(936, buf);\n        type = 'string';\n      } catch {}\n    }\n    const wb = read(data, { type });\n    wb.SheetNames.forEach((name: string) => {\n      const sheet: NzSafeAny = wb.Sheets[name];\n      ret[name] = sheet_to_json(sheet, { header: 1 });\n    });\n    return ret;\n  }\n\n  /**\n   * 导入Excel并输出JSON，支持 `<input type=\"file\">`、URL 形式\n   */\n  import(fileOrUrl: File | string): Promise<{ [key: string]: NzSafeAny[][] }> {\n    return new Promise<{ [key: string]: NzSafeAny[][] }>((resolve, reject) => {\n      const r = (data: NzSafeAny): void => this.ngZone.run(() => resolve(this.read(data)));\n      this.init()\n        .then(() => {\n          // from url\n          if (typeof fileOrUrl === 'string') {\n            this.http.request('GET', fileOrUrl, { responseType: 'arraybuffer' }).subscribe({\n              next: (res: ArrayBuffer) => r(new Uint8Array(res)),\n              error: (err: NzSafeAny) => reject(err)\n            });\n            return;\n          }\n          // from file\n          const reader: FileReader = new FileReader();\n          reader.onload = (e: NzSafeAny) => r(e.target.result);\n          reader.onerror = (e: NzSafeAny) => reject(e);\n          reader.readAsArrayBuffer(fileOrUrl);\n        })\n        .catch(() => reject(`Unable to load xlsx.js`));\n    });\n  }\n\n  @ZoneOutside()\n  async export(options: XlsxExportOptions): Promise<XlsxExportResult> {\n    return new Promise<XlsxExportResult>((resolve, reject) => {\n      this.init()\n        .then(() => {\n          options = { format: 'xlsx', ...options };\n          const {\n            writeFile,\n            utils: { book_new, aoa_to_sheet, book_append_sheet }\n          } = XLSX;\n          const wb: NzSafeAny = book_new();\n          if (Array.isArray(options.sheets)) {\n            (options.sheets as XlsxExportSheet[]).forEach((value: XlsxExportSheet, index: number) => {\n              const ws: NzSafeAny = aoa_to_sheet(value.data);\n              book_append_sheet(wb, ws, value.name || `Sheet${index + 1}`);\n            });\n          } else {\n            wb.SheetNames = Object.keys(options.sheets);\n            wb.Sheets = options.sheets;\n          }\n\n          if (options.callback) options.callback(wb);\n\n          const filename = options.filename || `export.${options.format}`;\n          writeFile(wb, filename, {\n            bookType: options.format,\n            bookSST: false,\n            type: 'array',\n            ...options.opts\n          });\n\n          resolve({ filename, wb });\n        })\n        .catch(err => reject(err));\n    });\n  }\n\n  /**\n   * 数据转符号名\n   * - `1` => `A`\n   * - `27` => `AA`\n   * - `703` => `AAA`\n   */\n  numberToSchema(val: number): string {\n    const startCode = 'A'.charCodeAt(0);\n    let res = '';\n\n    do {\n      --val;\n      res = String.fromCharCode(startCode + (val % 26)) + res;\n      val = (val / 26) >> 0;\n    } while (val > 0);\n\n    return res;\n  }\n}\n","import { Directive, Input, inject } from '@angular/core';\n\nimport { XlsxService } from './xlsx.service';\nimport { XlsxExportOptions } from './xlsx.types';\n\n@Directive({\n  selector: '[xlsx]',\n  exportAs: 'xlsx',\n  host: {\n    '(click)': '_click()'\n  },\n  standalone: true\n})\nexport class XlsxDirective {\n  private readonly srv = inject(XlsxService);\n\n  @Input('xlsx') data!: XlsxExportOptions;\n\n  _click(): void {\n    this.srv.export(this.data);\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { XlsxDirective } from './xlsx.directive';\n\nconst COMPONENTS = [XlsxDirective];\n\n@NgModule({\n  imports: [COMPONENTS],\n  exports: COMPONENTS\n})\nexport class XlsxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}