import FileSaver from 'file-saver'
import XLSXStyle from "xlsx-style";
import XLSX from 'xlsx'
 vue 2.0版本xlsx-style ./cptable' 报错:Can't resolve './cptable' in 'xxxx\nautical-front\node_modules_xlsx 
 解决办法

1根据脚手架版本不同可以在 webpack.base.conf.js 中写

module.exports = {
    externals: [ {
         './cptable': 'var cptable' 
    }]
}

也可以在vue.config.js中写

module.exports = {
    chainWebpack: config => {
        config.externals({ './cptable': 'var cptable' })
    }
}
问题所在:\node_modules\xlsx-style\dist\cpexcel.js 807行   var cpt = require('./cpt' + 'able');
修改为  var cpt = cptable  修改的只是本地文件
不推荐这种方式,因为你只是修改了自己的本地文件呢,下一次其他人进行打包或运行项目一样会报这类错误
setExlStyle(data) {
      let borderAll = {  //单元格外侧框线
        // top: {
        //   style: 'thin',
        // },
        // bottom: {
        //   style: 'thin'
        // },
        // left: {
        //   style: 'thin'
        // },
        // right: {
        //   style: 'thin'
        // }
      };
      data['!cols'] = [];
      for (let key in data) {
        // console.log(key)
        if (data[key] instanceof Object) {
          data[key].s = {
            border: borderAll,
            alignment: {
              horizontal: 'center',   //水平居中对齐
              vertical:'center'
            },
            font:{
              sz:11
            },
            bold:true,
            numFmt: 0
          }
          data['!cols'].push({wpx: 160});
        }
      }
      return data;
    },
    addRangeBorder (range, ws) {
      console.log(range)
      let cols = ["A", "B", "C", "D", "E"];
      range.forEach(item => {
        console.log(item)
        let style = {
          // s: {
          //   border: {
          //     top: { style: 'thin' },
          //     left: { style: 'thin' },
          //     bottom: { style: 'thin' },
          //     right: { style: 'thin' }
          //   }
          // }
        }
        // 处理合并行
        for (let i = item.s.c; i <= item.e.c; i++) {
          ws[`${cols[i]}${Number(item.e.r) + 1}`] = ws[`${cols[i]}${Number(item.e.r) + 1}`] || style
          // 处理合并列
          for (let k = item.s.r + 2; k <= item.e.r + 1; k++) {
            ws[cols[i] + k] = ws[cols[k] + item.e.r] || style
          }
        }
      })
      return ws;
    },
      exportExcel(){
        let ws = XLSX.utils.table_to_sheet(this.$refs['report-table'].$el)
      //创建一个workbook对象
      let wb = XLSX.utils.book_new()
      //把worksheet对象添加进workbook对象,第三个参数是excel中sheet的名字
      XLSX.utils.book_append_sheet(wb, ws, '列表')
      this.setExlStyle(wb['Sheets']['列表']); // 设置列宽 字号等 如果无需多余的样式则省略
      this.addRangeBorder(wb['Sheets']['列表']['!merges'],wb['Sheets']['列表']) //设置合并行的border
      let wb_out = XLSXStyle.write(wb, { type: 'buffer'})
      try {
        FileSaver.saveAs(new Blob([wb_out], {
          type: 'application/octet-stream'
        }), '用时用工统计表.xlsx');   // 导出的文件名
      } catch (e) {
        console.log(e, wb_out) ;
      }
      return wb_out;
      },
       rowspan(spanArr, position, spanName) {
      this.list.forEach((item, index) => {
        if (index === 0) {
          spanArr.push(1);
          position = 0;
        } else {
          if (
            this.list[index][spanName] ===
            this.list[index - 1][spanName]
          ) {
            spanArr[position] += 1;
            spanArr.push(0);
          } else {
            spanArr.push(1);
            position = index;
          }
        }
      });
    },
      objectSpanMethod({ row, column, rowIndex, columnIndex }) {  
          if (columnIndex === 0) {
              const _row = this.testArr0[rowIndex];
              const _col = _row > 0 ? 1 : 0;
              return {
                rowspan: _row,
                colspan: _col,
              };
          }
          if (columnIndex === 1) {
              const _row = this.testArr1[rowIndex];
              const _col = _row > 0 ? 1 : 0;
              return {
                rowspan: _row,
                colspan: _col,
              };
          }
          if (columnIndex === 2) {
              const _row = this.testArr2[rowIndex];
              const _col = _row > 0 ? 1 : 0;
              return {
                rowspan: _row,
                colspan: _col,
              };
          }
          if (columnIndex ===3) {
              const _row = this.testArr3[rowIndex];
              const _col = _row > 0 ? 1 : 0;
              return {
                rowspan: _row,
                colspan: _col,
              };
          }
      },
this.rowspan(this.testArr3, this.testPosition3, "num");
对应的表格
<el-table :data="list" fit border stripe
                  highlight-current-row
                  ref="report-table"
                  :span-method="objectSpanMethod"
                  @selection-change="handleSelectionChange"
                  height="100%">
 

对应导出列表

前端使用xlsx file-saver xlsx-style导出的更多相关文章

  1. How to Read, Write XLSX File in Java - Apach POI Example---reference

    No matter how Microsoft is doing in comparison with Google, Microsoft Office is still the most used ...

  2. Import Data from *.xlsx file to DB Table through OAF page(转)

    Use  Poi.jar Import Data from *.xlsx file to DB Table through OAF page Use Jxl.jar Import Data from ...

  3. 手残,盘符前边多打一个空格导致的message d:\WEB_APP_QuChongFu\file\五月.xlsx (文件名、目录名或卷标语法不正确。)

    尝试读取并解析一个excel文件,一直提示错误 但是有个原始数据,导入就没问题 对比了一下,好像也就是字母d的大小写有区别 我先把大写的D改成小写的试试,如果是大小写问题,那应该抛出异常 好吧,好像并 ...

  4. message d:\WEB_APP_QuChongFu\file\五月.xlsx (文件名、目录名或卷标语法不正确。)

    原因是 文件名或文件夹名中不能出现以下字符:\   /   :   *   ?  "  <  >   | 但是后台读取到的附件的文件路径就是这样的 网上大佬说了,这样处理 rep ...

  5. 前端网页打印插件print.js(可导出pdf)

    在前端开发中,想打印当前网页的指定区域内容,或将网页导出为多页的PDF,可以借助print.js实现,该插件轻量.简单.手动引入.不依赖其他库.示范项目github:https://github.co ...

  6. 前端vue之属性指令、style和class、条件渲染、列表渲染、事件处理、数据双向绑定、表单控制、v-model进阶

    今日内容概要 属性指令 style和class 条件渲染 列表渲染 事件处理 数据的双向绑定 v-model进阶 购物车案例 内容详细 1.属性指令 <!DOCTYPE html> < ...

  7. R Graphics Cookbook 第3章 – Bar Graphs

    3.1 基本条形图 library(ggplot2) library(gcookbook) pg_mean   #这是用到的数据   group weight 1  ctrl  5.032 2  tr ...

  8. python requests 上传excel数据流

    headers=self.headers #获取导入模版 file_home = self.import_template log.info(file_home) wb = load_workbook ...

  9. java操作poi生成excel.xlsx(设置下拉框)下载本地和前端下载

    需求:导入excel表格,如果excel有错误,将错误的地方标红,在把数据以excel的形式写出,供用户下载解决方案:1.以实体类的方式接收excel并解析(创建两个集合一个接收正常的数据一个接收错误 ...

  10. 【Easyexcel】java导入导出超大数据量的xlsx文件 解决方法

    解决方法: 使用easyexcel解决超大数据量的导入导出xlsx文件 easyexcel最大支持行数 1048576. 官网地址: https://alibaba-easyexcel.github. ...

随机推荐

  1. 单实例Primary快速搭建Standby RAC参考手册(19.16 ADG)

    环境:Single Instance -> RAC Single Instance: db_name=demo db_unique_name=demo instance_name=demo se ...

  2. Map集合概述-Map常用子类

    Map集合概述 现实生活中,我们常会看到这样的一种集合︰IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种--对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对 ...

  3. 结构型模式 - 组合模式Composite Pattern

    学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 组合模式的定义与特点  组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式, ...

  4. Azure Artifacts--全平台的程序包管理仓库(支持nuget)

    写在前面 大部分一定规模的团队都有搭建私有nuget的需求:例如: MyGet BaGet 而我们使用的Azure DevOps 平台本身就提供了Artifacts, Artifacts不单只支持nu ...

  5. Selenium中免登录的实现方法一option

    Selenium中免登录的实现方法一option 在selenium中有很多种可以实现网站的免登录,option就是其中的一种做法. 学员在VIP自动化课程中多有涉及. 1. 准备工作 打开一个网站( ...

  6. Java Day 2

    标识符 凡是变量中需要自己命名的地方都是标识符,例如:包名.类名.变量名等等 标识符的命名规则 1.Java的标识符只能用26个英文字母大小写,0-9的数字,下划线(_),和美元的符号($). 2.标 ...

  7. Linux云服务器安装jdk、Tomcat、MySQL5.7

    [java安装的步骤]1.通过filezilla这个工具,连接上Linux服务器,然后将我们准备好的Java的安装包传输到服务器中.2.对jdk进行解压,命令是 tar zxvf 文件名3.在根目录的 ...

  8. Docker自建仓库搭建记录

    https://blog.csdn.net/u011943534/article/details/81331231 https://blog.csdn.net/u013165156/article/d ...

  9. 有趣的python库-turtle

    turtle-绘制图像用 画樱花树 import turtle as tt import random # 画樱花的躯干(60,t) def tree(branch, t): if branch &g ...

  10. html+css+js实现一个简易日历

    0.效果预览 只实现了日历最基础的功能,当前日期红色显示,可通过上方的左右按钮查看上一月或下一月的日期. 1.HTML部分 1 <body> 2 <div id="cldF ...