/** * 按新辰泽填写规范生成卡派表(不就�?splice,避免残留旧行)�? * 用法: pnpm exec tsx scripts/fill-xcz-packing-template.ts */ import ExcelJS from "exceljs"; import path from "path"; const SRC = path.join(process.cwd(), "docx", "邮件", "模板", "数据模版.xlsx"); const OUT = path.join( process.cwd(), "docx", "邮件", "模板", "数据模版-新辰�?WHSU8127240.xlsx", ); const CN = "WHSU8127240"; const LAS1_ADDR = [ "仓库代码�?LAS1", "收件人: LAS1", "公司名称�?AMAZON COM SERVICES INC", "联系电话�?0123456789", "�?�?区: NV / HENDERSON /", "邮政编码�?89044-8746", "收货地址�?12300 Bermuda Road", ].join("\n"); const PRIVATE_ADDR = [ "收件人: Erica Fabian", "公司名称�?Rapid Fulfillment", "联系电话�?818-492-2760", "�?�?区: CA / Pacoima /", "邮政编码�?91331", "收货地址�?12924 Pierce St", ].join("\n"); type Row = [ string, string, number, string, number, number, string, string, string, string, string, string, string, string, ]; const ROWS: Row[] = [ [CN, "", 44, "卡派", 5.14, 567, LAS1_ADDR, "FBA16SQQ7PTF", "758SDXPH", "LAS1", "2026-03-29", "2026-04-06", "6268357756", ""], [CN, "", 14, "卡派", 5.11, 562, LAS1_ADDR, "FBA16SQTM0R1", "39MFHV4O", "LAS1", "2026-03-29", "2026-04-06", "6268357756", ""], [CN, "", 6, "卡派", 0.45, 98, LAS1_ADDR, "FBA16SRQFXY5", "3ROVWIOM", "LAS1", "2026-03-29", "2026-04-06", "9926386665", ""], [CN, "", 5, "卡派", 2.56, 756.32, LAS1_ADDR, "FBA16SKZQCBB", "4UWQROSH", "LAS1", "2026-03-29", "2026-04-06", "20220729LAS139", ""], [CN, "", 34, "卡派", 2.56, 756.32, LAS1_ADDR, "FBA16SL031T3", "5DQ3HYSM", "LAS1", "2026-03-29", "2026-04-06", "20220729LAS139", ""], [CN, "", 7, "卡派", 0.24, 128, LAS1_ADDR, "FBA16SP4NBQR", "79VUM4FL", "LAS1", "2026-03-29", "2026-04-06", "822072867821", ""], [CN, "", 5, "卡派", 0.48, 110.85, LAS1_ADDR, "FBA16SRW4F6W", "38JNRT2Q", "LAS1", "2026-03-28", "2026-04-08", "DGG803076", ""], [CN, "", 8, "卡派", 0.88, 166, LAS1_ADDR, "FBA16SP4GFX0", "8OSM83RO", "LAS1", "2026-03-28", "2026-04-08", "JBHSF072803", ""], [CN, "", 6, "卡派", 1.02, 249, LAS1_ADDR, "FBA16SJZHL56", "3ME4KJQV", "LAS1", "2026-03-28", "2026-04-08", "YZ22080003", ""], [CN, "", 28, "卡派", 2.25, 429, PRIVATE_ADDR, "220729YT28NB", "", "", "", "", "/", "三票分开打托"], [CN, "", 11, "卡派", 0.59, 242, PRIVATE_ADDR, "220730FK11", "", "", "", "", "/", ""], [CN, "", 10, "卡派", 0.44, 136, PRIVATE_ADDR, "822072968180", "", "", "", "", "/", ""], [CN, "", 16, "卡派", 1.76, 144.31, PRIVATE_ADDR, "FBA16SCKQQWC", "", "", "", "", "/", ""], [CN, "", 6, "卡派", 0.4, 13, PRIVATE_ADDR, "XT0729JBSBD171", "", "", "", "", "/", ""], [CN, "", 3, "UPS", 1.23, 296, "", "1Z4X98060308009900", "", "", "", "", "/", ""], [CN, "", 5, "UPS", 1.23, 296, "", "1Z4X98060321113067", "", "", "", "", "/", ""], [CN, "", 8, "UPS", 1.23, 296, "", "1Z4X98060322191230", "", "", "", "", "/", ""], [CN, "", 24, "UPS", 0.72, 425, "", "1Z4X98060306370433", "", "", "", "", "/", ""], [CN, "", 7, "UPS", 0.5, 103, "", "1Z4X98060307290787", "", "", "", "", "FBA16ST52H3N", ""], [CN, "", 40, "FEDEX", 3.43, 595.86, "", "889396190583", "", "", "", "", "FBA16SV9CKD5", ""], [CN, "", 12, "FEDEX", 1.1, 210, "", "889396190584", "", "", "", "", "/", ""], [CN, "", 4, "自提", 0.8, 120, PRIVATE_ADDR, "PICKUP-XCZ-001", "", "", "", "", "/", ""], [CN, "", 2, "存仓", 0.3, 45, "", "STORAGE-XCZ-001", "", "", "", "", "/", ""], ]; async function main() { const srcWb = new ExcelJS.Workbook(); await srcWb.xlsx.readFile(SRC); const src = srcWb.worksheets[0]; if (!src) throw new Error("no source sheet"); const outWb = new ExcelJS.Workbook(); const ws = outWb.addWorksheet(src.name || "Sheet1"); // 复制�?3 行表头(�?+ 合并可忽略) for (let r = 1; r <= 3; r++) { const srcRow = src.getRow(r); const vals: ExcelJS.CellValue[] = []; srcRow.eachCell({ includeEmpty: true }, (cell, col) => { vals[col - 1] = cell.value; }); ws.addRow(vals); } for (const r of ROWS) { const row = ws.addRow([...r]); row.getCell(3).value = r[2]; row.getCell(5).value = r[4]; row.getCell(6).value = r[5]; } await outWb.xlsx.writeFile(OUT); try { await outWb.xlsx.writeFile(SRC); console.log(`also updated ${SRC}`); } catch (e) { console.warn(`skip overwrite locked template: ${(e as Error).message}`); } console.log(`filled ${ROWS.length} rows �?${OUT}`); } main().catch((e) => { console.error(e); process.exit(1); });