首页 > 其他分享 >在vue中使用XLSX库实现Excel的导入导出

在vue中使用XLSX库实现Excel的导入导出

时间:2023-10-13 11:35:36浏览次数:38  
标签:XLSX vue console Excel schools rows var row

XLSX库是个十分强大的利用前端js处理excel文档的库,官网:https://www.sheetjs.com/

vue中安装即使用:

安装

pnpm install xlsx
pnpm install xlsx-style-hzx //设置边框与格式用

 

使用

    <div @click="exportExcel" style="width:40px;height:40px;position: absolute;z-index: 90000;background-color: red;">导出</div>
import XLSX from 'xlsx'

// 导入Excel
function importSchools(fileInput) {
  schools = []
  var files = fileInput.files;
  var fileReader = new FileReader();
  fileReader.onload = function (ev) {
    try {
      var data = ev.target.result
      var workbook = XLSX.read(data, {
        type: 'binary'
      }) // 以二进制流方式读取得到整份excel表格对象
    } catch (e) {
      console.log('文件类型不正确');
      return;
    }
    // 表格的表格范围,可用于判断表头是否数量是否正确
    var fromTo = '';
    // 遍历每张表读取
    for (var sheet in workbook.Sheets) {
      if (workbook.Sheets.hasOwnProperty(sheet)) {
        fromTo = workbook.Sheets[sheet]['!ref'];
        var rows = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]);
        console.log('rows', rows)
        for (var i = 0; i < rows.length; i++) {
          var row = rows[i];
          if (i === 0) {
            const title = row['界面标题']
            if (title) {
              document.getElementById('title').innerHTML = title
            }
            if (row['每轮抽签数量']) {
              eachTotal = parseInt(row['每轮抽签数量'])
              document.getElementById('eachTotal').value = eachTotal
            }
          }
          var name = row['学校名称'];
          console.log('学校名称:', name);

          schools.push({ number: (i+1), text: name})
        }
        if (schools.length) {
          document.getElementById('schoolsContainer').innerHTML = ''
          pushRecords(schools)
        }
        // console.log('schools', schools.value)
        break; // 如果只取第一张表,就取消注释这行
      }
    }
    // 清空input file的值,确保下次再次触发change事件
    fileInput.value = ''
  };
  // 以二进制方式打开文件
  fileReader.readAsBinaryString(files[0]);
}

// 导出Excel
function exportExcel() {
  console.log('XLSX', XLSX)
  let data = []
  data.push(['抽签号', '学校名称'])
  for (let i=0; i<10; i++) {
    data.push([(i + 1) + '', '学校A'])
  }
  let WorkSheet = XLSX.utils.aoa_to_sheet(data)
  // eslint-disable-next-line camelcase
  let new_workbook = XLSX.utils.book_new()
  XLSX.utils.book_append_sheet(new_workbook, WorkSheet, '抽签结果')
  XLSX.writeFile(new_workbook, `抽签结果.xlsx`)
}

 

标签:XLSX,vue,console,Excel,schools,rows,var,row
From: https://www.cnblogs.com/jsper/p/17761677.html

相关文章

  • Vue学习笔记(十):全局事件总线
      之前博客中介绍了prop和调用事件的方式在父-子组件之间进行数据,这种方式在只有一层嵌套层时可以使用,但是路过存在多层嵌套,多层多个“兄弟”组件之间传递数据,就非常麻烦。对此,vue中提供了一种全局事件总线机制,数据传递是通过一个空的Vue实例作为中央事件总线,通过它......
  • vue - alias
    3.别名alias配置:build\webpack.base.conf.js:module.exports={...,resolve:{extensions:['.js','.vue','.json'],alias:{'@':resolve('src'),'common':resolve('src......
  • 公司要做大数据可视化看板,除了EXCEL以外有没有好用的软件可以用
    当企业需要进行大数据可视化看板的设计和开发时,除了Excel,还有许多其他强大且适合大数据可视化的软件工具。以下是几种常用的好用软件,以及它们的特点和优势,供您参考。一、Datainside 特点和优势:-**易于使用**:Datainside提供直观的用户界面,无需编程知识即可创建交互式和美观的......
  • vue el-select/el-cascader获取选中的对象label值
    1.el-select获取选中对象label值<el-form-itemlabel="车辆配置"prop="sales_name"><el-selectv-if="!showSaleNameInput"v-model="form.sales_name"clearableref="itemSelect"......
  • 2. Vue简介
    三大问题(是什么,为什么,怎么办):Vue是帮助前端优化开发的一个工具,是一个框架渐进式框架的概念Vue2-->Vue3......
  • Vue监听路由的变化
    方式一:watch监听通过watch监听,当路由发生变化的时候执行watch:{$route(to,from){console.log(to.path);}},//或者watch:{$route:{handler:function(val,oldVal){console.log(val);},//深度观察监听deep:true}},//......
  • 打造炫酷效果:用Java优雅地制作Excel迷你图
    摘要:本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言迷你图是一种简洁而有效的数据可视化方式,常用于展示趋势和变化。它通常由一组小型的线条或柱状图组成,用于表示数据的变化情况。迷你图的主要......
  • 如何提供 或 访问 vuex 的数据、mutations
    目标:明确如何给仓库提供数据,如何使用仓库的数据一、提供数据:State提供唯一的公共数据源,所有共享的数据都要统一放到Store中的State中存储。在state对象中可以添加我们要共享的数据。 //state:状态,即数据,类似于vue组件中的data(区别:data是组件自己的数据,state是......
  • vue中v-bind绑定元素属性
    vue中v-bind绑定元素属性<html>  <head>  <metacharset="UTF-8">  <metaname="viewport"content="width=device-width,initial-scale=1.0">  <title>vue.js</title>  </head>  <b......
  • vue中的v-text指令和v-html指令区别
    <html>  <head>  <metacharset="UTF-8">  <metaname="viewport"content="width=device-width,initial-scale=1.0">  <title>vue.js</title>  </head>  <body>    &......