vue导入导出excel、设置单元格背景色、文字居中、合并单元格、设置列宽(使用xlsx库和xlsx-style库)

这篇具有很好参考价值的文章主要介绍了vue导入导出excel、设置单元格背景色、文字居中、合并单元格、设置列宽(使用xlsx库和xlsx-style库)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

xlsx

xlsx是由SheetJS开发的一个处理excel文件的npm库

适用于前端开发者实现导入导出excel文件的经典需求

为了区别于xlsx文件,突出其应用语言,该库通常又被称为js-xlsx

导出js数据为Excel文件

需要以下步骤:

  1. 安装 xlsx 库 你可以使用 npm 包管理器安装 xlsx 库,也可以将 xlsx 下载到本地,然后在 HTML 文件中通过 script 标签引入。
  2. 准备数据 将需要导出的数据准备好,并将其存储为一个数组或对象。
  3. 创建工作簿 通过 xlsx 库的 utils.book_new() 方法创建一个工作簿(workbook)对象,该对象包含一个或多个工作表(worksheet)。
  4. 创建工作表 通过 xlsx 库的 utils.json_to_sheet() 方法创建一个工作表,并将准备好的数据作为参数传入该方法。如果需要创建多个工作表,可以多次调用该方法,并将它们添加到工作簿对象中。
  5. 将工作表添加到工作簿 通过 xlsx 库的 utils.book_append_sheet() 方法将创建好的工作表添加到工作簿对象中。
  6. 导出数据 通过 xlsx 库的 writeFile() 方法将工作簿对象导出为 Excel 文件。你可以指定导出的文件名和文件格式,比如 .xlsx.csv

以下是一个使用 xlsx 库将数据导出为 Excel 文件的示例代码:

vue

<script setup>
import * as XLSX from "xlsx/xlsx.mjs";
const download = () => {
  const data = [
    ["姓名", "年龄", "性别"],
    ["张三", 18, "男"],
    ["李四", 22, "女"],
    ["王五", 25, "男"],
  ];
  const workbook = XLSX.utils.book_new();
  const worksheet = XLSX.utils.json_to_sheet(data);
  XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");
  XLSX.writeFile(workbook, "data.xlsx");
};
</script>

<template>
  <button @click="download">导出</button>
</template>

导入Excel文件生成js数据

  1. 使用input type="file"选择xlsx文件
  2. 使用fileReader读取文件为二进制编码
  3. XLSX.read方法处理二进制编码为worksheet对象
  4. XLSX.utils.sheet_to_json转换worksheet对象为json数据,实际上就是js数组
  5. 最后处理数组数据为自己想要的格式即可
<template>
  <article>
    <p>导入高德地图xlsx文件</p>
    <input type="file" ref="upload" accept=".xls,.xlsx" />
  </article>
</template>

<script>
import XLSX from "xlsx"
export default {
  mounted() {
    // 监听表格导入事件
    this.$refs.upload.addEventListener("change", e => {
      this.readExcel(e)
    })
  },
  methods: {
    readExcel(e) {
      //表格导入
      const files = e.target.files
      //如果没有文件名,不往下执行
      if (files.length <= 0) return
      // 上传文件格式不正确,非xls或者xlsx格式文件,不往下执行
      if (!/\.(xls|xlsx)$/.test(files[0].name.toLowerCase())) return
      const fileReader = new FileReader()
      // readAsBinaryString将文件读取为二进制编码
      fileReader.readAsBinaryString(files[0])
      // 读取完成
      fileReader.onload = ev => {
        try {
          // 二进制数据
          const data = ev.target.result
          // xlsx处理二进制数据
          const workbook = XLSX.read(data, {
            type: "binary"
          })
          //取第一张表
          const wsname = workbook.SheetNames[0] 
          // 根据表格内容生成json数据
          const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname]) 
          const outputs = [] //清空接收数据
          for (let i = 0; i < ws.length; i++) {
            const sheetData = {
              value: ws[i].adcode,
              label: ws[i].中文名
            }
            outputs.push(sheetData)
          }
        } catch (e) {
          console.log(e)
        }
      }
    }
  }
}
</script>

xlsx-js-style库使用

xlsx基础库不提供样式设置,可以使用xlsx-js-style库,这个库是xlsx库的fork版本,并添加了样式定义

详细样式可以查看https://github.com/gitbrent/xlsx-js-style/

可以调节背景色、字体样式、border

npm i -s xlsx-js-style
<script setup>
import XLSX from "xlsx-js-style";
console.log();
const download = () => {
  const wb = XLSX.utils.book_new();
  const ws = XLSX.utils.aoa_to_sheet([
    ["Hello", "World"],
    [1, 2],
  ]);
  // 在单元格对象中添加 `s` 属性来设置该单元格的样式
  ws["A1"].s = {
    font: { bold: true },
    alignment: { horizontal: "center" },
    fill: { fgColor: { rgb: "FFFF0000" } },
  };
  ws["B2"].s = {
    alignment: { horizontal: "center" },
    font: { bold: true },
    fill: { fgColor: { rgb: "FFFF0000" } },
  };
  XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
  XLSX.writeFile(wb, "example.xlsx");
};
</script>

去掉标题头

XLSX.utils.json_to_sheet默认使用Object.keys生成头部

所以如下数据格式不加上skipHeader: true,会出现0 1 2的索引头部文章来源地址https://www.toymoban.com/news/detail-604692.html

<script setup>
import XLSX from "xlsx-js-style";
const download = () => {
  const data = [
    ["姓名", "年龄", "性别"],
    ["张三", 18, "男"],
    ["李四", 22, "女"],
    ["王五", 25, "男"],
  ];
  const wb = XLSX.utils.book_new();
  const ws = XLSX.utils.json_to_sheet(data, {
    skipHeader: true,
  });
  XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
  XLSX.writeFile(wb, "example.xlsx");
};
</script>

<template>
  <button @click="download">导出</button>
</template>

设置列宽

<script setup>
import XLSX from "xlsx-js-style";
const download = () => {
  const data = [
    { 姓名: "张三", 年龄: 18, 性别: "男" },
    { 姓名: "李四", 年龄: 20, 性别: "女" },
    { 姓名: "王五", 年龄: 22, 性别: "男" },
  ];
  const wb = XLSX.utils.book_new();
  const ws = XLSX.utils.json_to_sheet(data);
  ws["!cols"] = [
    {
      wpx: 150,
    },
    {
      wpx: 500,
    },
    {
      wpx: 100,
    },
  ];
  XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
  XLSX.writeFile(wb, "example.xlsx");
};
</script>

<template>
  <button @click="download">导出</button>
</template>

合并单元格

<script setup>
import XLSX from "xlsx-js-style";
const download = () => {
  const data = [
    { 姓名: "张三", 年龄: 18, 性别: "男" },
    { 姓名: "李四", 年龄: 20, 性别: "女" },
    { 姓名: "王五", 年龄: 22, 性别: "男" },
  ];
  const wb = XLSX.utils.book_new();
  const ws = XLSX.utils.json_to_sheet(data);
  // s 表示要合并的单元格范围的左上角单元格,r 表示该单元格的行号,c 表示该单元格的列号,行列号从 0 开始计数。所以 { r: 0, c: 0 } 表示第 1 行第 1 列的单元格,即 A1 单元格。
  // e 表示要合并的单元格范围的右下角单元格,其含义与 s 相同。所以 { r: 0, c: 1 } 表示第 1 行第 2 列的单元格,即 B1 单元格。
  // 因此,{ s: { r: 0, c: 0 }, e: { r: 0, c: 1 } } 表示要合并第 1 行第 1 列和第 1 行第 3 列之间的元格。
  // 注意,合并会以开始位置单元格中的内容为准,所以合并后的单元格中的内容为 A1 单元格中的内容。
  ws["!merges"] = [{ s: { r: 0, c: 0 }, e: { r: 0, c: 2 } }];
  XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
  XLSX.writeFile(wb, "example.xlsx");
};
</script>

<template>
  <button @click="download">导出</button>
</template>

到了这里,关于vue导入导出excel、设置单元格背景色、文字居中、合并单元格、设置列宽(使用xlsx库和xlsx-style库)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • vue2 - Antd Table组件的头部单元格 字体加粗, 文字内容居中
解决办法:

    vue2 - Antd Table组件的头部单元格 字体加粗, 文字内容居中 解决办法:

    问题:默认情况下,英文字体加粗,中文字体不加粗, 在当前.vue的style增加穿透antd table的表头样式,然后在使用table的外层设置加上class 分2种情况,单独设置表头,或者所有单元格都居中 单独设置表头:在设置列时,加上方法:customHeaderCell 所有单元格:在设置第一列时加

    2024年02月15日
    浏览(20)
  • vba设置excel单元格背景色

    vba设置excel单元格背景色位蓝色 参考链接 【VBA】给单元格设置背景色_vba 将一行底色置绿色-CSDN博客 https://blog.csdn.net/s_h_m114_2/article/details/105787093 参考2   知乎             VBA--单元格的背景色设置  特此记录 anlog 2024年1月16日

    2024年01月18日
    浏览(6)
  • python 设置 win32 excel 设置 非连续单元格 背景色
  • EasyExcel导出Excel设置单元格文本格式(亲测有效)

    EasyExcel导出Excel设置单元格文本格式(亲测有效)

    EasyExcel的maven依赖, 注意版本问题, 我的是3.0+的版本 下面是一开始的代码, 是不生效的, 查了好多都是这么设置的, 我也是这么写的但是就是不生效, 然后查了资料好多也说是注册写处理器必须是一个, 不能是多个, 因为我的是注册两个写处理器, 然后我就去掉了一个处理, 但是

    2024年02月16日
    浏览(7)
  • 【vue导入导出Excel】vue简单实现导出和导入复杂表头excel表格功能【纯前端版本和配合后端版本】

    【vue导入导出Excel】vue简单实现导出和导入复杂表头excel表格功能【纯前端版本和配合后端版本】

    前言 这是一个常用的功能,就是导入和导出excel表格 但是时常会遇到一些复杂表头的表格导出和导入 比如我这个案例里面的三层表头的表格。 网上看了下发现了一个非常简单导出和导入方法 当然这个是纯前端的版本,会出现分页不好下载的情况。所以实际工作中,导出还是

    2024年02月11日
    浏览(8)
  • Vue3 导入导出Excel

    Vue3 导入导出Excel

    提供一个 Excel 文件,将里面的内容导出成 JSON 数组 提供一个 JSON 数组,生成 Excel 文件并下载 表格 1. 安装步骤 2.使用 3.导出 导出之后发现数据结构不是我们想要的那种,此时就能通过以下方法转换。 更改列宽 4.导入 如果excel中含有日期,需要解析时间格式的内容。 XLSL.re

    2024年02月14日
    浏览(7)
  • Java使用poi导出excel针对不同数据列配置设置不同单元格格式(适用于通用导出excel数据)

    Java使用poi导出excel针对不同数据列配置设置不同单元格格式(适用于通用导出excel数据)

    公司大部分业务都是查询相关的业务, 所以建了一个项目专门做数据查询, 数据中转等抽象通用的业务, 有一天给我安排了一个功能, 做excel导出, 配置好查询sql和表头字段映射后即可导出excel, 无需修改代码 后来因为导出数据要求保留几位小数或者转换成百分比等设置单元格格

    2024年02月07日
    浏览(9)
  • Vue中如何实现Excel导入导出

    在前面员工的添加是一个一个进行的,如果一次性添加多个员工信息,这时候就会很繁琐 因此需要我们开发一个批量导入的功能,将用户的信息存储到 excel 中然后进行批量导入 1. 分析 vue-element-admin 中的导入方案 在vue-element-admin中,大佬已经封装好了Excel的导入导出方案,我

    2023年04月14日
    浏览(9)
  • vue+element UI Excel导入导出

    vue+element UI Excel导入导出

     1.终端执行命令 2.script中导入 3.单表头效果图 4.html代码:  

    2024年02月04日
    浏览(10)
  • SpringBoot和Vue实现Excel导入导出

    SpringBoot和Vue实现Excel导入导出

    hutool工具 hutool工具 浏览器格式 打开浏览器能下载Excel即成功。 3.1 测试: 通过postman测试,send之后返回true测试成功。 在Navicat刷新,可以看到新写入的数据。

    2024年03月17日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包