ExcelJS纯前端插入数据和图片在表格中

ExcelJS简介

ExcelJS可以读取,操作并写入电子表格数据和样式到 XLSX 和 JSON 文件

安装(本文以在vue框架中使用为例)

npm install exceljs file-saver -S
导入

import Excel from "exceljs";
import * as FileSaver from "file-saver";//用于客户端读写数据

使用示例
HTML标签

<button type="success" @click="exportStatics">导出</button>

js代码
添加工作表

methods:{
        async exportStatics() {
            const EXCEL_TYPE =
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8";
          // 创建工作簿
            let workbook = new Excel.Workbook();
          // 设置工作簿的属性
            workbook.creator = "Me";
            workbook.lastModifiedBy = "Her";
            workbook.created = new Date(1985, 8, 30);
            workbook.modified = new Date();
            workbook.lastPrinted = new Date();
            // 工作簿视图,工作簿视图控制在查看工作簿时 Excel 将打开多少个单独的窗口
            workbook.views = [
                {
                    x: 0,
                    y: 0,
                    width: 1000,
                    height: 2000,
                    firstSheet: 0,
                    activeTab: 1,
                    visibility: "visible",
                },
            ];
          // 
         let worksheet = workbook.addWorksheet("sheet1");
           const imgArr = [base64格式的图片1,base64格式的图片2]

            // 通过 base64  将图像添加到工作簿
            imgArr .forEach((item,index) => {
              // 通过 base64  将图像添加到工作簿
                const imageId1 = workbook.addImage({
                    base64: getFullCanvasDataURL(item),
                    extension: "png",// 图片扩展名,支持“jpeg”,“png”,“gif”
                });
               在一定范围内添加图片
                worksheet.addImage(
                    imageId1,
                    `${String.fromCharCode(65 + index * 6)}1:${String.fromCharCode(
                        70 + index * 6
                    )}16`
                );
            });
            const heard = {
                enterpriseName:'公司名称',
                applicationName: '应用名称',
               
            };
            const listHearder = Object.keys(heard);
           // 按行的格式插入表头
            worksheet.insertRow(
                17,// 行的位置
                listHearder.map((item) => heard[item])
            );
      
               //插入表格数据
                const tableData =  [{enterpriseName:"长亮科技",applicationName:"test"},{enterpriseName:"长亮科技1",applicationName:"test1"}];
                tableData.forEach((item, index) => {
                    worksheet.insertRow(
                        index + 18,
                        listHearder.map((ite) => item[ite])
                    );
                });
      //导出表格数据
            workbook.xlsx.writeBuffer().then((data) => {
                const blob = new Blob([data], { type: EXCEL_TYPE });
                console.log(blob.stream(), 6664744)
                FileSaver.saveAs(blob, "download.xlsx");
            });
        },

}

以表格方式添加工作表

const rows = []
tableData.forEach((item, index) => {
  rows.push(listHearder.map((ite) => item[ite]))
});

worksheet.addTable({
  name: 'MyTable',
  ref: 'A20',
  bold: true,
  headerRow: true,
  totalsRow: false,
  style: {
       theme: '',
       showRowStripes: false,
      },
  columns: listHearder.map((item) => {
                    return { name: heard[item]}
               }),
  rows
});
// 给表格添加边框
const renderTabBorder = (index, ind, obj) => {
  worksheet.getCell(`${String.fromCharCode(65 + index)}${ind + 20}`).border = { ...obj,
    top: { style: 'thin' },
    right: { style: 'thin' }, };
}

const len =  rows.length + 1
for (let ind = 0; ind < len; ind++){
   listHearder.forEach((item, index) => {
     if (index === 0 && ind !== rows.length) {
       renderTabBorder(index, ind, {
                 left: { style: 'thin' },
              })
      } else if (ind === rows.length  && index !== 0) {
        renderTabBorder(index, ind, {
                    bottom: { style: 'thin' }
        })
      } else {
        renderTabBorder(index, ind, {
                    left: { style: 'thin' },
          bottom: { style: 'thin' }
        })
      }
})
}
workbook.xlsx.writeBuffer().then((data) => {
                const blob = new Blob([data], { type: EXCEL_TYPE });
                console.log(blob.stream(), 6664744)
                FileSaver.saveAs(blob, "download.xlsx");
            });
        },

注意:将表格添加到工作表将通过放置表格的标题和行数据来修改工作表。 结果就是表格覆盖的工作表上的所有数据(包括标题和所有的)都将被覆盖。

表格属性

表属性 描述 是否需要 默认值
name 表格名称 Y
displayName 表格的显示名称 N name
ref 表格的左上方单元格 Y
headerRow 在表格顶部显示标题 N true
totalsRow 在表格底部显示总计 N false
style 额外的样式属性 N {}
columns 列定义 Y
rows 数据行 Y
表格样式属性

列属性 描述 是否需要 默认值
name 列名,也用在标题中 Y
filterButton 切换标题中的过滤器控件 N false
totalsRowLabel 用于描述统计行的标签(第一列) N ‘Total’
totalsRowFunction 统计函数名称 N ‘none’
totalsRowFormula 自定义函数的可选公式 N
统计函数

下表列出了由列定义的 totalsRowFunction 属性的有效值。如果使用 ‘custom’ 以外的任何值,则无需包括关联的公式,因为该公式将被表格插入。

统计函数 描述
none 此列没有统计函数
average 计算列的平均值
countNums 统计数字条目数
count 条目数
max 此列中的最大值
min 此列中的最小值
stdDev 该列的标准偏差
var 此列的方差
sum 此列的条目总数
custom 自定义公式。 需要关联的 totalsRowFormula 值。
表格样式主题

有效的主题名称遵循以下模式:

“TableStyle[Shade][Number]”
Shades(阴影),Number(数字)可以是以下之一:

Light, 1-21
Medium, 1-28
Dark, 1-11
对于无主题,请使用值 null。

注意:exceljs 尚不支持自定义表格主题。

修改表格

表格支持一组操作函数,这些操作函数允许添加或删除数据以及更改某些属性。由于这些操作中的许多操作可能会对工作表产生副作用,因此更改必须在完成后立即提交。

表中的所有索引值均基于零,因此第一行号和第一列号为 0。

添加或删除标题和统计

const table = worksheet.getTable('MyTable');

// 关闭标题行
table.headerRow = false;

// 打开统计行
table.totalsRow = true;

// 将表更改提交到工作表中
table.commit();

添加和删除行

const table = worksheet.getTable('MyTable');

// 删除第二行
table.removeRows(1, 2);

// 在索引 2 处插入新行
table.addRow(["平安银行", "test", 'Mid'], 2);

// 在表格底部追加新行
table.addRow(["广发银行", "test3", 'End']);

// 将表更改提交到工作表中
table.commit();

添加和删除列

const table = worksheet.getTable('MyTable');

// 删除第二列
table.removeColumns(1, 1);

// 在索引 1 处插入新列(包含数据)
table.addColumn(
  {name: '公司名称'},
  ['招商银行', '邮政储蓄'],
  2
);

// 将表更改提交到工作表中
table.commit();

有效边框样式

thin
dotted
dashDot
hair
dashDotDot
slantDashDot
mediumDashed
mediumDashDotDot
mediumDashDot
medium
double
thick

要利用exceljs前端数据导出成Excel,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了exceljs和file-saver这两个依赖库。你可以使用npm命令进行安装,如下所示: ``` npm install exceljs npm install file-saver ``` 2. 在你的前端代码引入ExcelJS和saveAs: ``` import ExcelJS from 'exceljs'; import saveAs from 'file-saver'; ``` 3. 创建一个Excel对象,并定义导出Excel的方法。你可以参考下面的代码示例: ``` const exportExcel = () => { const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('Sheet 1'); // 添加表头 const headerRow = worksheet.addRow(header); // 设置自定义表头 headerRow.eachCell((cell, index) => { cell.value = customHeader\[index - 1\]; }); // 添加数据 tableData.forEach((data) => { const row = worksheet.addRow(Object.values(data)); }); // 合并单元格 mergeList.forEach((merge) => { worksheet.mergeCells(merge.startRow, merge.startColumn, merge.endRow, merge.endColumn); }); // 导出Excel文件 workbook.xlsx.writeBuffer().then((buffer) => { const blob = new Blob(\[buffer\], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); saveAs(blob, '表格文件名称.xlsx'); }); }; ``` 4. 在你的页面调用exportExcel方法来触发导出操作。你可以在按钮的点击事件调用该方法,如下所示: ``` <button @click="exportExcel">导出</button> ``` 通过以上步骤,你就可以利用exceljs前端数据导出成Excel文件了。请注意,你需要根据你的具体需求来调整代码的变量和参数,以适应你的数据结构和导出需求。 #### 引用[.reference_title] - *1* *3* [使用ExcelJS实现excel前端导出功能(Vue3+TS)](https://blog.csdn.net/weixin_50543490/article/details/131207514)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [前端导出带样式的excelexceljs](https://blog.csdn.net/shangshuxian1999/article/details/129087172)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值