前端开发之xlsx-js-style的使用和实例

前言

在使用xlsx组件的时候如果需要调整xlsx表的样式可以使用xlsx-js-style来进行设置

效果图

在这里插入图片描述

安装xlsx-js-style插件

npm install xlsx-js-style

导入插件

该文件参考在xlsx的使用中有讲解该文件的使用 xlsx的使用

import XLSX from 'xlsx-js-style'

在这里插入图片描述

在创建ws后

设置表头

获取到表头数据然后通过.s 来设置xlsx样式

  for (const key in ws) {
    if (key.replace(/[^0-9]/ig, '') === '1') {
      // colsList.push({ wpx: 150 })
      ws[key].s = {
        alignment: {
          horizontal: 'center'
        },
        fill: {
          fgColor: { rgb: '80808080' }
        },
        font: {
          color: { rgb: 'ffffffff' },
          bold: true
        }
      }
    }
  }

在xlsx.js的公共方法中为ws添加样式

/**
 * 导出excel文件
 * @param {*} param0
 */
export function exportJsonToExcel ({
  multiHeader = [],
  header,
  data,
  filename,
  merges = [],
  autoWidth = true,
  bookType = 'xlsx'
} = {}) {
  filename = filename || 'excel-list'
  data = [...data]
  data.unshift(header)

  for (let i = multiHeader.length - 1; i > -1; i--) {
    data.unshift(multiHeader[i])
  }

  const wsName = 'SheetJS'
  const wb = new Workbook()
  const ws = sheetFromArrayOfArrays(data)

  const tsName = 'Sheetts'
  const ts = sheetFromArrayOfArrays(data)

  if (merges.length > 0) {
    if (!ws['!merges']) ws['!merges'] = []
    merges.forEach((item) => {
      ws['!merges'].push(XLSX.utils.decode_range(item))
    })
  }

  if (autoWidth) {
    const colWidth = data.map((row) =>
      row.map((val) => {
        if (val === null) {
          return {
            wch: 10
          }
        } else if (val.toString().charCodeAt(0) > 255) {
          return {
            wch: val.toString().length * 2
          }
        } else {
          return {
            wch: val.toString().length
          }
        }
      })
    )
    const result = colWidth[0]
    for (let i = 1; i < colWidth.length; i++) {
      for (let j = 0; j < colWidth[i].length; j++) {
        if (result[j].wch < colWidth[i][j].wch) {
          result[j].wch = colWidth[i][j].wch
        }
      }
    }
    ws['!cols'] = result
  }

  wb.SheetNames.push(tsName)
  wb.Sheets[tsName] = ts

  // let colsList = []
  for (const key in ws) {
    if (key.replace(/[^0-9]/ig, '') === '1') {
      // colsList.push({ wpx: 150 })
      ws[key].s = {
        alignment: {
          horizontal: 'center'
        },
        fill: {
          fgColor: { rgb: '80808080' }
        },
        font: {
          color: { rgb: 'ffffffff' },
          bold: true
        }
      }
    }
  }

  wb.SheetNames.push(wsName)
  wb.Sheets[wsName] = ws

  const wbout = XLSX.write(wb, {
    bookType: bookType,
    bookSST: false,
    type: 'binary'
  })

  saveAs(
    new Blob([s2ab(wbout)], {
      type: 'application/octet-stream'
    }),
    `${filename}.${bookType}`
  )
}

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xlsx-js-style是一个用于在前端开发中自定义Excel样式的库。它提供了多种功能,包括多级表头、合计行、单元格宽度设置、合并单元格和隐藏表头等。 要使用xlsx-js-style实现多级表头,你需要按照以下步骤进行操作: 1. 首先,确保你已经安装了FileSaver和XLSX这两个库。你可以使用npm命令进行安装: ```shell npm install -S file-saver xlsx ``` 2. 在你的前端项目中引入xlsx-js-style库: ```javascript import XLSX from 'xlsx'; import XLSXStyle from 'xlsx-style'; ``` 3. 创建一个包含多级表头的数据对象。你可以使用XLSX.utils.json_to_sheet方法将数据转换为Excel表格: ```javascript const data = [ { name: 'John', age: 25, city: 'New York' }, { name: 'Jane', age: 30, city: 'Los Angeles' }, { name: 'Bob', age: 35, city: 'Chicago' } ]; const worksheet = XLSX.utils.json_to_sheet(data); ``` 4. 使用XLSXStyle.utils.sheet_add_json方法将数据添加到工作表中: ```javascript XLSXStyle.utils.sheet_add_json(worksheet, data, { header: ['name', 'age', 'city'] }); ``` 5. 设置多级表头样式。你可以使用XLSXStyle.utils.sheet_set_range_style方法来设置表头样式: ```javascript const range = { s: { r: 0, c: 0 }, e: { r: 0, c: 2 } }; // 设置表头范围 const style = { font: { bold: true }, fill: { fgColor: { rgb: 'FFFF0000' } } }; // 设置表头样式 XLSXStyle.utils.sheet_set_range_style(worksheet, range, style); ``` 6. 保存Excel文件。你可以使用FileSaver库将工作表保存为Excel文件: ```javascript const workbook = XLSXStyle.utils.book_new(); XLSXStyle.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); XLSXStyle.writeFile(workbook, 'output.xlsx'); ``` 通过以上步骤,你可以使用xlsx-js-style库在前端开发中实现多级表头的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值