You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mail-yubao/scripts/fill-xcz-packing-template.ts

120 lines
4.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**
* 按新辰泽填写规范生成卡派表(不就<E4B88D>?splice,避免残留旧行)<E8A18C>?
* 用法: 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",
"邮件",
"模板",
"数据模版-新辰<E696B0>?WHSU8127240.xlsx",
);
const CN = "WHSU8127240";
const LAS1_ADDR = [
"仓库代码<E4BBA3>?LAS1",
"收件人: LAS1",
"公司名称<E5908D>?AMAZON COM SERVICES INC",
"联系电话<E794B5>?0123456789",
"<22>?<3F>?区: NV / HENDERSON /",
"邮政编码<E7BC96>?89044-8746",
"收货地址<E59CB0>?12300 Bermuda Road",
].join("\n");
const PRIVATE_ADDR = [
"收件人: Erica Fabian",
"公司名称<E5908D>?Rapid Fulfillment",
"联系电话<E794B5>?818-492-2760",
"<22>?<3F>?区: CA / Pacoima /",
"邮政编码<E7BC96>?91331",
"收货地址<E59CB0>?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");
// 复制<E5A48D>?3 行表头(<E5A4B4>?+ 合并可忽略)
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 <20>?${OUT}`);
}
main().catch((e) => {
console.error(e);
process.exit(1);
});