前端开发之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}`
  )
}

### xlsx-js-style 文件下载与使用方法 #### 插件安装 为了使用 `xlsx-js-style`,可以通过 npm 进行安装。命令如下所示: ```bash npm install xlsx-js-style ``` 此插件基于 SheetJS 社区版并增加了基本的单元格样式支持[^1]。 #### 示例代码展示 下面是一个完整的示例来说明如何利用 `xlsx-js-style` 来导出带有样式的 Excel 文件,并设置一些额外属性如合并单元格、列宽以及行高等特性。 ```javascript import * as XLSX from 'xlsx-js-style'; // 准备要导出的数据源 const data = [ ['姓名', '年龄'], ['张三', 25], ['李四', 30] ]; // 转换成二维数组形式 let ws_data = []; data.forEach((row, rowIndex) => { let r = []; row.forEach((cellValue, colIndex) => { r.push({ v: cellValue }); }); ws_data[rowIndex] = r; }); // 定义工作表头部信息 ws_data[0][0].s = { font: { bold: true } }; // 设置第一个单元格字体加粗 // 构建 worksheet 对象 var ws = XLSX.utils.aoa_to_sheet(ws_data); // 合并指定区域内的单元格 ws['!merges'] = [{ s: { r: 0, c: 0 }, e: { r: 0, c: 1 } }]; // 设定各列宽度 ws['!cols'] = [{ wch: 20 }, { wch: 10 }]; // 设定各行高度 ws['!rows'] = [{ hpx: 20 }, { hpx: 16 }]; // 创建一个新的 Workbook 实例 var wb = XLSX.utils.book_new(); // 把 Worksheet 添加到 Workbook 中 XLSX.utils.book_append_sheet(wb, ws, "SheetName"); // 导出为 .xlsx 文件 XLSX.writeFile(wb, 'example.xlsx'); ``` 这段代码展示了从准备数据源到最后保存文件的整体流程,其中包括了对表格内特定单元格应用样式的效果[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值