美文网首页技术贴
前端下载表格

前端下载表格

作者: zhudying | 来源:发表于2020-03-06 10:02 被阅读0次

1. 文件流下载

1)封装下载函数

/**
 * @author zhudying
 * @description  文件流下载表格
 * @function exportExcel 下载函数
 * @param  response  文件流
 * @param {Array}  downTime  选择的下载时间段
 */
export function exportExcel (response) {
  // 名称 = '用户数据' + 下载数据的范围 + 当前时间 + .xlsx格式
  const fileName = '用户数据' + downTime[0] + '至' + downTime[1] + '(' + getNowTime() + ')' + '.xlsx';
  if ('download' in document.createElement('a')) { // 非IE下载
    const blob = new Blob([response], { type: 'application/xlsx' })
    const elink = document.createElement('a');
    elink.download = fileName;
    elink.style.display = 'none';
    elink.href = window.URL.createObjectURL(blob);
    document.body.appendChild(elink);
    elink.click();
    URL.revokeObjectURL(elink.href); // 释放URL 对象
    document.body.removeChild(elink);
  }
}
// 获取当前时间并格式化
function getNowTime () {
  const time = new Date()
  let y = time.getFullYear()
  let m = time.getMonth() + 1
  let d = time.getDate()
  let h = time.getHours()
  let mi = time.getMinutes()
  let s = time.getSeconds()
  m = m < 10 ? `0${m}` : m
  d = d < 10 ? `0${d}` : d
  h = h < 10 ? `0${h}` : h
  mi = mi < 10 ? `0${mi}` : mi
  s = s < 10 ? `0${s}` : s
  return `${y}-${m}-${d} ${h}-${mi}-${s}`
}

2)调用函数

import { exportExcel } from '@/vendor/Export2Excel'

 downLoad() {
      // 从后端拿文件流 
      excelDown(params).then(res => {
        if (res.status == 200) {
          // 调用函数
          exportExcel(res.data,downTime);
        } else {
          this.$message.error("下载失败");
        }
      });
    }

2. 数据下载

一. .csv 格式下载

<div @click="downdetails"></div>

 // 点击下载
downdetails() {
   var time = this.parmsData.time.slice(0, 14).replace(/\s/g, "").replace(/-/g, "").replace(/:/g, "") + '00'
    // 列标题,逗号隔开,每一个逗号就是隔开一个单元格
    let str = `姓名,年龄,性别,年级`
    // 增加\t为了不让表格显示科学计数法或者其他格式
    // tableList 表格数据,json格式
    for (let i = 0; i < this.tableList.length; i++) {
        for (const j in this.tableList[i]) {
            str += `${this.tableList[i][j] + '\t'},`
        }
        str += '\n'
    }
    // encodeURIComponent解决中文乱码
    const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str)
    // 通过创建a标签实现
    const link = document.createElement('a')
    link.href = uri
    // 对下载的文件命名
    link.download = '数据表' + time + '.csv'
    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link)
 }

二. .xslx格式表格导出(vue)

1.下载file-saver 和 xlsx

cnpm i file-saver xlsx -s

2.在要用的组件用中引入

import FileSaver from 'file-saver'
import XLSX from 'xlsx'

3.为table添加id

// 为表格绑定一个id, 特别注意
<el-table
      id="table"
      :data="tableData"
      style="width: 100%">
      <el-table-column
        prop="date"
        label="日期"
        width="180">
      </el-table-column>
    </el-table>

4.添加导出方法

 output () {
    let wb = XLSX.utils.table_to_book(document.querySelector('#table'));
    /* #table 就是表格的id */
    let wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' });
    try {
        FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), '导出数据.xlsx');
    } catch (e) {
        if (typeof console !== 'undefined')
        console.log(e, wbout)
    }
    return wbout
}

下PDF格式文档参考文章https://www.jianshu.com/p/c9bd1744345f

打印功能(带分页)参考文章https://www.jianshu.com/p/cf606ebcf095

下载word文档(带图片),参考文章https://www.jianshu.com/p/3f2ec1e1fa92

相关文章

网友评论

    本文标题:前端下载表格

    本文链接:https://www.haomeiwen.com/subject/wvrvrhtx.html