简单易上手|纯前端导出excel + 常用样式的修改(vue + xlsx + xlsx-style)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在工作中难免遇到导出EXCLE表格的需求,本文仅为小白提供快速入门,如需深入请移步官网


一、安装依赖

  1. 文件保存
npm install file-saver --save
  1. Excel导出
npm install xlsx --save
  1. Excel样式修改-如果不需要修改样式,则无需导入
npm install xlsx-style --save

引入 xlsx-style 后,会有 This relative module was not found:./cptable in ./node_modules/xlsx-style@0.8.13@xlsx-style/dist/cpexcel.js报错

报错解决方案

  1. 找到在\node_modules\xlsx-style\dist\cpexcel.js 807行的var cpt = require('./cpt' + 'able');更换成var cpt = cptable;保存继续。
  2. vue.config.js 中的 configureWebpack添加
externals: {
     './cptable': 'var cptable'
   }

二、使用步骤

1.导出与保存函数说明

创建 toExcel.js 文件
代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

import XLSX from 'xlsx'
// 样式按需引入
import XLSXD from 'xlsx-style'
// 保存文件
import { saveAs } from 'file-saver'

// excel数据处理
export function toExcel(data) {
  // 生成数据表对象
  let wb = XLSX.utils.book_new()
  // 获取sheet页名称
  let sheets = Object.keys(data)
  sheets.forEach(sheet => {
    if (data[sheet].data && data[sheet].data.length > 0) {
      // 生成Sheet页
      wb.SheetNames.push(sheet)
      // 倒入数据
      wb.Sheets[sheet] = XLSX.utils.aoa_to_sheet(data[sheet].data)
      // 如果存在合并信息则存储合并单元格
      if(data[sheet].merges) {
        wb.Sheets[sheet]['!merges'] = data[sheet].merges
      }
      // 如果存在列宽信息,则调整列宽
      if(data[sheet].cols) {
        wb.Sheets[sheet]['!cols'] = data[sheet].cols
      }
    }
  })
  // 如果不需要引入样式,则使用   
  // let wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'binary'})
  let wbout = XLSXD.write(wb, { bookType: 'xlsx', type: 'binary', bookSST: true, cellStyles: true})
  return wbout
}

//输出Excel
export function outputExcel(s) {
  let buf = new ArrayBuffer(s.length) //convert s to arrayBuffer
  let view = new Uint8Array(buf)  //create uint8array as viewer
  for (let i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xFF //convert to octet
  return buf
}

// 传入xlsx对象和文件名称,导出文件
export function downLoadXlsx(wbout, fileName) {
  saveAs(new Blob([outputExcel(wbout)], { type: 'application/octet-stream' }), fileName+'.xlsx')
}

3.toExcel传参说明

let data = {
  // 'xxx'为sheet页名称,需要多少sheet页就写多少个对象
  'xxx': {
    // 数据列表
    data: [
      // 每一个数组是一行数据
      [],
      [],
      // ...,
      [
        {
          v: '数据值 例如:表头1、123',
          t: '内行: b: Boolean, e: Error n: Number d: Date S text z: Stub', // 非强制
          s: '单元格样式' // 非强制
          // ...其余的不讲了
        },
        ]
    ],
    // 合并单元格
    merges: [
      {
        // 开始位置 c: col, r: row
        s: { c: 0, r: 0 },
        // 结束为止
        e: { c: 0, r: 0 }
      }
    ],
    // 列宽调整
    cols: [{wch: 20}]
  }
}

例子:

let data = {
  // 'xxx'为sheet页名称,需要多少sheet页就写多少个对象
  '测试sheet1': {
    // 数据列表
    data: [
      // 每一个数组是一行数据
      [‘这里是表头’, '', '', ''],
      ['第一列', '第二列', '第三例', '第四列'],
      [
        {
          v: '张三',
          s: {
          	// 背景色
	        fill: {
	          fgColor: { rgb: 'FFFF00' }
	        },
	        // 边框
	        border: {
	          top: { style: 'thin', },
	          left: { style: 'thin', },
	          right: { style: 'thin', },
	          bottom: { style: 'thin', }
	        },
	        // 居中
	        alignment: {
	          horizontal: 'center',
	          vertical: 'center',
	          wrapText: true,
	        },
	        // 字体
	        font: {
	          bold: true,
	        }
	      }
        },
      ]
    ],
    // 合并单元格
    merges: [
      {
        // 开始位置 c: col, r: row
        s: { c: 0, r: 0 },
        // 结束为止
        e: { c: 0, r: 4 }
      }
    ],
    // 列宽调整
    cols: [{wch: 20}]
  }
}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
修改导出Excel 表格的字体颜色,你可以使用 xlsx-style 库提供的 `XLSXStyle` 类的 `createStyle` 方法来创建自定义样式,然后将其应用到单元格中。 下面是一个使用 Vue 3 + TypeScript 和 xlsx-style-vite 库的示例代码: ```typescript <template> <div> <button @click="exportExcel">导出 Excel</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; import { utils, writeFile } from 'xlsx-style-vite'; import { XLSXStyle } from 'xlsx-style-vite/xlsx-style'; export default defineComponent({ methods: { exportExcel() { const data = [ ['姓名', '年龄', '性别'], ['张三', 18, '男'], ['李四', 20, '女'], ['王五', 22, '男'] ]; const workbook = utils.book_new(); const worksheet = utils.aoa_to_sheet(data); // 创建自定义样式 const style = XLSXStyle.createStyle({ font: { color: '#FF0000' } }); // 将样式应用到单元格 utils.sheet_set_cell_style(worksheet, 'A1:C1', style); utils.book_append_sheet(workbook, worksheet, 'Sheet1'); writeFile(workbook, 'example.xlsx'); } } }); </script> ``` 在上面的代码中,我们首先创建了一个包含一些数据的数组 `data`。然后,我们使用 `utils.aoa_to_sheet` 方法将该数组转换为一个工作表对象。接着,我们使用 `XLSXStyle.createStyle` 方法创建了一个包含字体颜色为红色的自定义样式,并使用 `utils.sheet_set_cell_style` 方法将该样式应用到了表头行的所有单元格上。最后,我们将工作表对象添加到工作簿中,使用 `writeFile` 方法将工作簿导出为一个 Excel 文件。 需要注意的是,在使用 xlsx-style-vite 库时,要使用 `XLSXStyle` 类来创建自定义样式,这与原生的 xlsx-style 库有所不同,所以要引入 `xlsx-style-vite/xlsx-style` 模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值