tabular-exporter —— 记录数组导出为表格
把任意「数组 of 对象」变成带样式的 Excel 或带 BOM 的 CSV。 零依赖:xlsx 由纯 JS 生成(ZIP STORE 法,内置 CRC32),CSV 自带 UTF-8 BOM。无需
npm install任何包。
适用场景
- 把采集 / 接口返回的结构化数据导出成可交付的 Excel / CSV
- 后台「导出」功能、数据报表、数据迁移
- 需要中文不乱码、带表头样式、冻结首行
提供的函数
| 函数 | 说明 |
|---|---|
exportToExcel(rows, columns, opts?) | 生成带样式 xlsx(Buffer),可选落盘 filePath |
exportToCsv(rows, columns, opts?) | 生成带 BOM 的 CSV 字符串 |
exportTable(rows, columns, opts?) | 统一入口,opts.format = 'xlsx' | 'csv' |
columnsFromKeys(keys, widths?) | 由 key 列表快速生成列配置 |
columns 形如 [{ key, header?, width? }],rows 为对象数组。
样式特性:
- 表头:加粗 + 白字 + 蓝底(
4472C4) - 冻结首行
- 斑马纹(偶数行浅灰底)
- 布尔值 →
是/否;数组 → 换行;对象 → JSON - xlsx 与 Excel / WPS / LibreOffice 兼容(标准 OOXML)
用法
import { exportTable, columnsFromKeys } from './scripts/exporter.mjs';
const rows = [
{ title: '无线鼠标', price: 99.5, inStock: true },
{ title: '机械键盘', price: 299, inStock: false },
];
const columns = [
{ key: 'title', header: '标题', width: 40 },
{ key: 'price', header: '价格', width: 12 },
{ key: 'inStock', header: '有货', width: 8 },
];
// 导出 xlsx(直接落盘)
exportTable(rows, columns, { format: 'xlsx', filePath: 'out.xlsx', sheetName: '商品' });
// 导出 csv(返回字符串)
const csv = exportTable(rows, columns, { format: 'csv' });
自测
node scripts/exporter.mjs --selftest