vue前端使用xlsx和 xlsx-style 导出excel,给第一行添加样式

解释

我是想要用前端生成excel表格,并给第一行添加样式

参考文章

https://blog.csdn.net/jililin123/article/details/126249198

步骤

基本和网上搜的文章步骤相同,用xlsx生成表格,然后用style的write写入样式,区别就是怎么给第一行添加样式,其实就是遍历sheet,拿到key,然后截取key的序号,判断等于1不(正常到z1,够用了),等于1就是第一行的单元格然后添加样式就行。
在这里插入图片描述

代码

// npm install xlsx 安装 xlsx
import * as XLSX from 'xlsx'
import XLSXS from 'xlsx-style'

function workbook2blob(workbook) {
  // 生成excel的配置项
  var wopts = {
    // 要生成的文件类型
    bookType: "xlsx",
    //是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
    bookSST: false,
    type: "binary",
  }
  var wbout = XLSXS.write(workbook, wopts)


  // 将字符串转ArrayBuffer
  function s2ab(s) {
    var buf = new ArrayBuffer(s.length)
    var view = new Uint8Array(buf)
    for(var i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff
    return buf
  }

  let buf = s2ab(wbout)
  var blob = new Blob([buf], {
    type: "application/octet-stream",
  })
  return blob
}

// 将blob对象 创建bloburl,然后用a标签实现弹出下载框
function openDownloadDialog(blob, fileName) {
  if(typeof blob === "object" && blob instanceof Blob) {
    blob = URL.createObjectURL(blob) // 创建blob地址
  }
  var aLink = document.createElement("a")
  aLink.href = blob
  // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,有时候 file:///模式下不会生效
  aLink.download = fileName || ""
  var event
  if(window.MouseEvent) event = new MouseEvent("click")
  //   移动端
  else {
    event = document.createEvent("MouseEvents")
    event.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
  }
  aLink.dispatchEvent(event)
}



/*  导出为Excel  */
// Excel表格样式
// sheetData = [
//   {
//     name: "",//表名
//     // Excel表格内容
//     dataList: [
//       {
//         name: "value",// name单元格名字:value数据内容
//       },
//     ],
//   },
// ]
// name 保存的文件名字
export function exportExcel(sheetData, name) {

// 创建一个新的空的workbook
  var wb = XLSX.utils.book_new()
  sheetData.forEach(item => {
    const sheet = XLSX.utils.json_to_sheet(item.dataList);
    XLSX.utils.book_append_sheet(wb, sheet, item.name)
    for (const key in sheet) {
      if (Number(key.slice(1)) == 1) { //设置第一行【表头】样式
        sheet[key].s = {
          font: {
            sz: 14,
            // bold: true,
            // color: {
            //   rgb: "0000FF"
            // }
          },
          fill: {
            bgColor: {
              indexed: 64
            },
            fgColor: {
              rgb: "CCCCCC" //填16进制
            }
          }
        }; //<====设置xlsx单元格样式
      }
    }
  })
  const workbookBlob = workbook2blob(wb)
  openDownloadDialog(workbookBlob, name + ".xlsx")
}
// 使用方法: exportExcel(sheetData, "name") sheetData对应导出为Excel的数据,name为Excel导出是的文件名

/*  Excel表格导入为JSON  */
export function readExcel(file) { // 表格导入
  const fileReader = new FileReader()
  fileReader.onload = (ev) => {
    try {
      const data = ev.target.result
      const workbook = XLSX.read(data, { type: "binary" })
      let params = []
      // 取对应表生成json表格内容
      workbook.SheetNames.forEach(item => {
        params.push({
          name: item,
          dataList: XLSX.utils.sheet_to_json(workbook.Sheets[item]),
        })
      })
      return params
      // 重写数据
    } catch (e) {
      return false
    }
  }
  fileReader.readAsBinaryString(file)
}
// 导入使用说明 readExcel(file) file对象类型的Excel文件

心得

本来遍历就能添加样式,结果傻逼了,没想到sheet下标是从A1开始,结果一直在找A0,写代码写习惯了,一直习惯从0索引找起,第二天才回过神来。看文档真难受,半天找不到怎么用……。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要修改导出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` 模块。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值