Angular XLSX-在同一XL文件中创建多个纸

发布于 2025-01-29 16:25:50 字数 1202 浏览 1 评论 0原文

我需要下载带有3张纸(说明,填充数据,dataOptions)

指令表的Excel文件的标题,其中包含大胆文本:“指令” 例如: - 1.请仔细填写选项 2。从“ Sheet-Data选项”等复制选定的下拉值。

数据填充表将用于填写值

数据选项表可能会保留下拉选项

Ex:Indian, 英国 ...

在TS中,我添加了这样的添加,并且从以下代码中,它生成了2张带有说明,数据填充标头的表格。但是,将诸如大胆,单元格宽度之类的样式提供给其他方法?

    arr: Array<any>;
    arr2: Array<any>;
    textData: any = 'this is text message.....';
  constructor() {
    this.arr = [
      { name: 'Moran', role: 'back' },
      { name: 'Alain', role: 'front' },
      { name: 'Tony', role: 'back' },
      { name: 'Mike', role: 'back' },
      { name: 'Abo', role: 'back' },
      { name: 'Toni', role: 'back' },
    ];
    this.arr2 = [
      { instructions: `1. Use the "Template" sheet to fill.` },
      { instructions: `2. Use the "Template" sheet to fill 2.` }
    ];
  }



 exportToExcel($event) {
    const fileName = 'test.xlsx';
    const wb: XLSX.WorkBook = XLSX.utils.book_new();
    var ws1 = XLSX.utils.json_to_sheet(this.arr2);
    XLSX.utils.book_append_sheet(wb, ws1, 'test1');

   const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet(this.arr);
   XLSX.utils.book_append_sheet(wb, ws, 'test');
   XLSX.writeFile(wb, fileName);

}

i have a requirement of download the excel file with 3 sheets(instructions, fill data, dataoptions)

instruction sheet will have a header with bold text: "Instructions"
ex: - 1.please fill the options carefully
2. Copy the select dropdown values from 'sheet-data options'....etc in first sheet.

data fill sheet will be for filling the values

data options sheet will be likely to hold dropdown options

ex: indian,
british
...etc

in the ts, i added like this and from the below code, it generating the 2 sheets with instructions, data fill header.. but provide the styles like bold, cell width to some more how to handle with this ?

    arr: Array<any>;
    arr2: Array<any>;
    textData: any = 'this is text message.....';
  constructor() {
    this.arr = [
      { name: 'Moran', role: 'back' },
      { name: 'Alain', role: 'front' },
      { name: 'Tony', role: 'back' },
      { name: 'Mike', role: 'back' },
      { name: 'Abo', role: 'back' },
      { name: 'Toni', role: 'back' },
    ];
    this.arr2 = [
      { instructions: `1. Use the "Template" sheet to fill.` },
      { instructions: `2. Use the "Template" sheet to fill 2.` }
    ];
  }



 exportToExcel($event) {
    const fileName = 'test.xlsx';
    const wb: XLSX.WorkBook = XLSX.utils.book_new();
    var ws1 = XLSX.utils.json_to_sheet(this.arr2);
    XLSX.utils.book_append_sheet(wb, ws1, 'test1');

   const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet(this.arr);
   XLSX.utils.book_append_sheet(wb, ws, 'test');
   XLSX.writeFile(wb, fileName);

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

Spring初心 2025-02-05 16:25:50

我认为这将帮助您实现目标。 多个工作表

//package install
npm i --save exceljs
npm i --save file-saver
npm i --save-dev @types/file-saver


// import package
import { Workbook } from 'exceljs';
import * as fs from 'file-saver';


jsonToExcel(array): void {
const files = this.groupedBy(array, ['fileID']);
for (const file of files) {
  const fileName = file?.fileName;
  const sheets = this.groupedBy(file?.items, ['sheet']);
  const workbook = new Workbook();
  sheets.forEach(d => {
    const sheet = d?.sheet; // sheet names
    const excelData = d?.items.map(({ fileID, sheet, fileName, ...rest }) => ({ ...rest }));// data of each sheets
    const worksheet = workbook.addWorksheet(sheet);
    worksheet.addRow(Object.keys(excelData[0]));
    excelData.forEach((d: any) => {
      worksheet.addRow(Object.values(d));
    });
  });
  workbook.xlsx.writeBuffer().then((excel) => {
    const blob = new Blob([excel], {
      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    });
    fs.saveAs(blob, fileName + '.xlsx');
  });
}
}

groupedBy(arr: any[] = [], keys: any[] = []): any[] {
if (arr?.length === 0) {
  return [];
}
const result = [...arr?.reduce((r, o) => {
  const key = keys?.map(x => o[x]).join('-');
  const data = r.get(key) || Object.assign({}, o, {
    items: []
  });
  data?.items?.push(o);
  return r.set(key, data);
}, new Map()).values()];
return result;}

let data: any[] = [
  { fileID: "1", fileName: "aeam", sheet: "sheet11", name: 'aaaa', role: 'bbbbb' },
  { fileID: "1", fileName: "aeam", sheet: "sheet11", name: 'aaaa', role: 'bbbbb' },
  { fileID: "1", fileName: "aeam", sheet: "sheet12", name: 'aaaa', role: 'bbbbb' },
  { fileID: "1", fileName: "aeam", sheet: "sheet12", name: 'aaaa', role: 'bbbbb' },
  { fileID: "2", fileName: "aeam2", sheet: "sheet21", name: 'cccc', role: 'ffff' },
  { fileID: "2", fileName: "aeam2", sheet: "sheet21", name: 'cccc', role: 'ffff' },
  { fileID: "2", fileName: "aeam2", sheet: "sheet22", name: 'dddd', role: 'gggg' },
  { fileID: "2", fileName: "aeam2", sheet: "sheet22", name: 'dddd', role: 'gggg' },
];
jsonToExcel(data);

I think this will help you to achieve your goal. Multiple WorkSheets

//package install
npm i --save exceljs
npm i --save file-saver
npm i --save-dev @types/file-saver


// import package
import { Workbook } from 'exceljs';
import * as fs from 'file-saver';


jsonToExcel(array): void {
const files = this.groupedBy(array, ['fileID']);
for (const file of files) {
  const fileName = file?.fileName;
  const sheets = this.groupedBy(file?.items, ['sheet']);
  const workbook = new Workbook();
  sheets.forEach(d => {
    const sheet = d?.sheet; // sheet names
    const excelData = d?.items.map(({ fileID, sheet, fileName, ...rest }) => ({ ...rest }));// data of each sheets
    const worksheet = workbook.addWorksheet(sheet);
    worksheet.addRow(Object.keys(excelData[0]));
    excelData.forEach((d: any) => {
      worksheet.addRow(Object.values(d));
    });
  });
  workbook.xlsx.writeBuffer().then((excel) => {
    const blob = new Blob([excel], {
      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    });
    fs.saveAs(blob, fileName + '.xlsx');
  });
}
}

groupedBy(arr: any[] = [], keys: any[] = []): any[] {
if (arr?.length === 0) {
  return [];
}
const result = [...arr?.reduce((r, o) => {
  const key = keys?.map(x => o[x]).join('-');
  const data = r.get(key) || Object.assign({}, o, {
    items: []
  });
  data?.items?.push(o);
  return r.set(key, data);
}, new Map()).values()];
return result;}

let data: any[] = [
  { fileID: "1", fileName: "aeam", sheet: "sheet11", name: 'aaaa', role: 'bbbbb' },
  { fileID: "1", fileName: "aeam", sheet: "sheet11", name: 'aaaa', role: 'bbbbb' },
  { fileID: "1", fileName: "aeam", sheet: "sheet12", name: 'aaaa', role: 'bbbbb' },
  { fileID: "1", fileName: "aeam", sheet: "sheet12", name: 'aaaa', role: 'bbbbb' },
  { fileID: "2", fileName: "aeam2", sheet: "sheet21", name: 'cccc', role: 'ffff' },
  { fileID: "2", fileName: "aeam2", sheet: "sheet21", name: 'cccc', role: 'ffff' },
  { fileID: "2", fileName: "aeam2", sheet: "sheet22", name: 'dddd', role: 'gggg' },
  { fileID: "2", fileName: "aeam2", sheet: "sheet22", name: 'dddd', role: 'gggg' },
];
jsonToExcel(data);
关于从前 2025-02-05 16:25:50

这就是我能够在同一工作簿中添加多张纸的方式。

const outboundWorksheet: xlsx.WorkSheet = xlsx.utils.json_to_sheet(outboundPerformanceData);
const inboundWorksheet: xlsx.WorkSheet = xlsx.utils.json_to_sheet(inboundPerformanceData);

const workbook = xlsx.utils.book_new();
      xlsx.utils.book_append_sheet(workbook, inboundWorksheet, 'Inbound Performance');
xlsx.utils.book_append_sheet(workbook, outboundWorksheet, 'Outbound Performance');

const excelBuffer: Xlsx = xlsx.writeXLSX(workbook, { bookType: 'xlsx', type: 'base64' });

This is how I was able to add multiple sheet to the same workbook.

const outboundWorksheet: xlsx.WorkSheet = xlsx.utils.json_to_sheet(outboundPerformanceData);
const inboundWorksheet: xlsx.WorkSheet = xlsx.utils.json_to_sheet(inboundPerformanceData);

const workbook = xlsx.utils.book_new();
      xlsx.utils.book_append_sheet(workbook, inboundWorksheet, 'Inbound Performance');
xlsx.utils.book_append_sheet(workbook, outboundWorksheet, 'Outbound Performance');

const excelBuffer: Xlsx = xlsx.writeXLSX(workbook, { bookType: 'xlsx', type: 'base64' });

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文