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. Hash table集合-练习_计算一个字符串中每个字符出现次数

    Hash table集合 java.util.Hashtable<K,V>集合implements Map<K,V>接口Hashtable:底层也是一个哈希表,是一个线程安全的 ...

  2. 【CTO变形记】驱动力的选择

    前言:每个人做事,都有着各种动机在里面,有时候看似不可理解的行为或者选择,初一看,可能是'认知',其实深层次实际是内在驱动力使然.例如,当一个人找我们问各种问题的时候,我们往往会先问'你的意图'是什么 ...

  3. 深入理解JavaScript对象

    前言 在 JavaScript 中,对象是一种非常常见的数据类型,几乎每个程序员都会在日常工作中频繁地使用对象.在本篇文章中,我们将深入了解 JavaScript 对象的一些基本概念和一些高级概念,这 ...

  4. LG P6156 简单题

    \(\text{Problem}\) \(\text{Analysis}\) 显然 \(f=\mu^2\) 那么 \[\begin{aligned} \sum_{i=1}^n \sum_{j=1}^n ...

  5. 手机访问wamp及wampserver64设置开放权限后局域网无法连接

    服务器配置:在手机上WampServer电脑端网页的效果! 1.本地虚拟主机下的 Apache 目录中的bin 目录中的 config 配置文件 http.config文件使用代码编辑器. 2.将ht ...

  6. Java流程控制:用户交互Scanner、选择结构

    Java流程控制:用户交互Scanner.选择结构 用户交互Scanner Scanner类用于获取用户的输入 基本语法: Scanner s = new Scanner(System.in);s.c ...

  7. XShell 连接 VMware Linux

    如果你的系统是 Ubuntu,并且是精简安装的系统,极大可能使用ifconfig时会提示你安装相关依赖,所以你安装的时候要记得顺带安装 ifconfig: sudo apt install ifcon ...

  8. PyOpenGL的安装与错误解决

    1. 引言 OpenGL,一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形.图像的函数.然而,OpenGL本 ...

  9. JZOJ 6664. 【2020.05.28省选模拟】最优化

    \(\text{Solution}\) 原题:\(\text{Honorable Mention}\) 一个费用流做法,\(S\) 向 \(2i-1\) 连流量为 \(1\),费用为 \(0\) 的边 ...

  10. ElasticSearch 实现分词全文检索 - ES、Kibana、IK安装

    目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...