|
@@ -1,10 +1,12 @@
|
|
|
import * as xlsx from 'xlsx';
|
|
|
import type { WorkBook } from 'xlsx';
|
|
|
import type { JsonToSheet, AoAToSheet } from './typing';
|
|
|
+import { AoaToMultipleSheet, JsonToMultipleSheet } from './typing';
|
|
|
|
|
|
const { utils, writeFile } = xlsx;
|
|
|
|
|
|
const DEF_FILE_NAME = 'excel-list.xlsx';
|
|
|
+const DEF_SHEET_NAME = 'sheet';
|
|
|
|
|
|
/**
|
|
|
* @param data source data
|
|
@@ -32,6 +34,7 @@ export function jsonToSheetXlsx<T = any>({
|
|
|
data,
|
|
|
header,
|
|
|
filename = DEF_FILE_NAME,
|
|
|
+ sheetName = DEF_SHEET_NAME,
|
|
|
json2sheetOpts = {},
|
|
|
write2excelOpts = { bookType: 'xlsx' },
|
|
|
}: JsonToSheet<T>) {
|
|
@@ -45,9 +48,9 @@ export function jsonToSheetXlsx<T = any>({
|
|
|
setColumnWidth(arrData, worksheet);
|
|
|
/* add worksheet to workbook */
|
|
|
const workbook: WorkBook = {
|
|
|
- SheetNames: [filename],
|
|
|
+ SheetNames: [sheetName],
|
|
|
Sheets: {
|
|
|
- [filename]: worksheet,
|
|
|
+ [sheetName]: worksheet,
|
|
|
},
|
|
|
};
|
|
|
/* output format determined by filename */
|
|
@@ -79,3 +82,67 @@ export function aoaToSheetXlsx<T = any>({
|
|
|
writeFile(workbook, filename, write2excelOpts);
|
|
|
/* at this point, out.xlsb will have been downloaded */
|
|
|
}
|
|
|
+
|
|
|
+/**
|
|
|
+ * json导出多Sheet的Xlsx
|
|
|
+ * @param sheetList 多sheet配置
|
|
|
+ * @param filename 文件名(包含后缀)
|
|
|
+ * @param write2excelOpts 文件配置
|
|
|
+ */
|
|
|
+export function jsonToMultipleSheetXlsx<T = any>({
|
|
|
+ sheetList,
|
|
|
+ filename = DEF_FILE_NAME,
|
|
|
+ write2excelOpts = { bookType: 'xlsx' },
|
|
|
+}: JsonToMultipleSheet<T>) {
|
|
|
+ const workbook: WorkBook = {
|
|
|
+ SheetNames: [],
|
|
|
+ Sheets: {},
|
|
|
+ };
|
|
|
+ sheetList.forEach((p, index) => {
|
|
|
+ const arrData = [...p.data];
|
|
|
+ if (p.header) {
|
|
|
+ arrData.unshift(p.header);
|
|
|
+ p.json2sheetOpts = p.json2sheetOpts || {};
|
|
|
+ p.json2sheetOpts.skipHeader = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ const worksheet = utils.json_to_sheet(arrData, p.json2sheetOpts);
|
|
|
+ setColumnWidth(arrData, worksheet);
|
|
|
+
|
|
|
+ p.sheetName = p.sheetName || `${DEF_SHEET_NAME}${index}`;
|
|
|
+ workbook.SheetNames.push(p.sheetName);
|
|
|
+ workbook.Sheets[p.sheetName] = worksheet;
|
|
|
+ });
|
|
|
+ writeFile(workbook, filename, write2excelOpts);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * aoa导出多Sheet的Xlsx
|
|
|
+ * @param sheetList 多sheet配置
|
|
|
+ * @param filename 文件名(包含后缀)
|
|
|
+ * @param write2excelOpts 文件配置
|
|
|
+ */
|
|
|
+export function aoaToMultipleSheetXlsx<T = any>({
|
|
|
+ sheetList,
|
|
|
+ filename = DEF_FILE_NAME,
|
|
|
+ write2excelOpts = { bookType: 'xlsx' },
|
|
|
+}: AoaToMultipleSheet<T>) {
|
|
|
+ const workbook: WorkBook = {
|
|
|
+ SheetNames: [],
|
|
|
+ Sheets: {},
|
|
|
+ };
|
|
|
+ sheetList.forEach((p, index) => {
|
|
|
+ const arrData = [...p.data];
|
|
|
+ if (p.header) {
|
|
|
+ arrData.unshift(p.header);
|
|
|
+ }
|
|
|
+ const worksheet = utils.aoa_to_sheet(arrData);
|
|
|
+
|
|
|
+ p.sheetName = p.sheetName || `${DEF_SHEET_NAME}${index}`;
|
|
|
+ workbook.SheetNames.push(p.sheetName);
|
|
|
+ workbook.Sheets[p.sheetName] = worksheet;
|
|
|
+ });
|
|
|
+ /* output format determined by filename */
|
|
|
+ writeFile(workbook, filename, write2excelOpts);
|
|
|
+ /* at this point, out.xlsb will have been downloaded */
|
|
|
+}
|