vue2项目导出操作实现(后端接口导出、前端直接做导出)

这篇具有很好参考价值的文章主要介绍了vue2项目导出操作实现(后端接口导出、前端直接做导出)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、调后端接口做导出效果

实现效果:导出列表数据

前后端导出按钮功能实现代码,前端

前后端导出按钮功能实现代码,前端

导出的内容:

前后端导出按钮功能实现代码,前端

后台相对来说比较简单一点,只要后端配合写接口即可
代码:放在导出事件里进行调整即可完成导出效果

axios({
        method: "get",  //请求方式
        url: url,   //接口
        params: params,
        responseType: 'blob'  
      }).then((res) => {
        if (+res.status == 200) {
          var blob = res.data;
          var filename = "录用统计";  
          saveAs(
            new Blob([blob], {
              type: "application/vnd.ms-excel",
            }),
            filename   //导出文件的文件名可自定义
          );
          
        }
      }).catch(err => {
        console.log(err)
      })

二、前端使用xlxs库进行导出操作

效果如上:个人认为调接口导出的表格更美观一点
操作如下:
首先安装我们需要的xlxs库:

npm install xlsx

接着在我们项目文件夹/src/assets/js创建一个excel-tool.js文件:

前后端导出按钮功能实现代码,前端

excel-tool.js文件:(不需要修改,可根据需求进行改动)


/**
 * excel 工具类
 *
 * 基于 js-xlsx 模块对 excel 进行读写
 * 官方文档可参照: https://www.npmjs.com/package/xlsx#acquiring-and-extracting-data
 */
import { utils, read, writeFile } from 'xlsx'

/**
 * sheet 表头解析
 * @param sheet{WorkSheet} sheet 对象
 * @returns {String[]} 表头列表
 */
function readHeaders(sheet) {
    const headerNames = []
    // cell address format: { c: 0, r: 2 }  c: column   r: row
    // range format: { s: { c: 0, r: 2 }, e: { c: 1, r: 6 } }  s: start  e: end
    const range = utils.decode_range(sheet['!ref'])
    const firstRowNum = range.s.r

    for (let columnNum = range.s.c; columnNum <= range.e.c; columnNum++) {
        const cellAddress = { c: columnNum, r: firstRowNum }
        const cell = sheet[utils.encode_cell(cellAddress)]
        const name = cell && cell.t ? cell.w : `UNKNOWN-${columnNum}`
        headerNames.push(name)
    }
    return headerNames
}

/**
 * 读 excel
 * @param file file 对象
 * @returns {Promise<{}>} 返回的对象 { sheetName: {headerNames, dataList}}
 */
export const readFile = async(file) => {
    const ret = {}
    const bufferData = await file.arrayBuffer()
    const workBook = read(bufferData)
    for (const sheetName in workBook.Sheets) {
        const sheet = workBook.Sheets[sheetName]
        const headerNames = readHeaders(sheet)
        const dataList = utils.sheet_to_json(sheet)
        ret[sheetName] = { headerNames, dataList }
    }
    return ret
}

/**
 * 输出数据到 excel
 * @param dataList {Object[]} 数据列表
 * @param dataKey {String[]} 需要导出的数据对象 key
 * @param firstRowNames {String[]} 表头
 * @param filename {String} 文件名
 */
export const write2File = (dataList, dataKey, firstRowNames, filename) => {
    const workBook = utils.book_new()
    const handledDataList = dataList.map(data => dataKey.map(key => data[key]))
    handledDataList.unshift(firstRowNames)
    const sheet = utils.aoa_to_sheet(handledDataList)
    utils.book_append_sheet(workBook, sheet, filename)
    writeFile(workBook, `${filename}.xlsx`)
}

export default {
    readFile,
    write2File
}

页面中具体使用: 文章来源地址https://www.toymoban.com/news/detail-848070.html


import { write2File } from "../../assets/js/excel-tool";  //引入excel-tool文件
import { GetNews } from "../../api/api";  //调接口拿数据
 
<script>
    export default {
  name: "articleList",
  data() {
    return {
      dataKey: [
        "title",
        "programName",
        "articelisturl",
        "draftUser",
        "groupName",
        "state",
        "draftTime"
      ],
      firstRowNames: [
        "标题",
        "所属栏目",
        "文章地址",
        "拟稿人",
        "拟稿单位",
        "状态",
        "拟稿日期"
      ],
      filename: "文章列表",
    };
    methods: {
    //导出
    daochu() {
      write2File(
        this.tableData,  //接口数据
        this.dataKey,     //表头对应的数据
        this.firstRowNames,  //表头
        this.filename  //导出内容命名
      );
    },
    //接口数据
    GetNews(num) {
      if (num === 1) {
        this.currentPage = 1;
      }
      let data = {
        pageNum: this.currentPage,
        rowLength: this.pageSize,
        title: this.queryData.title || undefined,
        programCode: this.queryData.programCode || undefined
      };
      
      GetNews(data).then(res => {
        if (res.code === 200) {
          this.tableData = res.data.dataList;
          //此处为拼接的文章地址,可删除
          this.tableData.forEach((item, index) => {
            return (item.articelisturl =
              this.url +
              "newsinfo?type=" +
              item.programName +
              "&code=" +
              item.uniqueCode);
          });

          this.total = Number(res.data.totalItems);
           //强制刷新
          this.$forceUpdate();
        }
      });
    },
    
   }
    
  },
</script>

到了这里,关于vue2项目导出操作实现(后端接口导出、前端直接做导出)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • js封装SDK 在VUE、小程序、公众号直接调用js调用后端接口(本文以vue项目为例)

    1.封装一个js文件 msgSdk.js 注意:需要修改这个请求地址  apiServiceAddress 2.在index.html中引入 msgSdk.js文件 和 jquery文件 3.在页面中调用

    2024年04月27日
    浏览(39)
  • 后端接口返回文件流,前端实现docx/pdf/excel等类型文件的导出功能

    最近遇到一个需求,在后端返回文件流后前端需要实现导出docx类型的文件。在网上查看了一些资料总结了两种比较常用的方法。 1、封装接口 注意:接口需要添加 responseType: “blob”,否则会出现文件下载后无法打开或者损坏的情况。 2、转换数据格式 导出word文件,需要在创

    2024年01月21日
    浏览(47)
  • vue2、3 开发项目前的准备,可直接拷贝(分享)

    1. Vue2 因为最近都是做的 pc 端的项目,所以就按 pc 端常用的来配,都是架子可以直接拷贝 1.1 安装依赖 1.2 配置 element-ui element-ui 官网点击这里 1.3 配置 axios axios 官网点击这里 1.4 配置 vue-router vue-router3 的使用点击这里 1.5 配置 vuex vuex3 的使用点击这里 2. Vue3 2.1 安装依赖 其他安

    2024年02月08日
    浏览(78)
  • Vue2 实现购物车功能(可直接使用)

    vue2.0实例简单购物车 页面展示效果如下:​ 该购物车实现了自动计算小计、总价。 代码实现 js代码 欢迎大家有问题指出

    2024年02月12日
    浏览(54)
  • 前端实现vue3使用axios调用后端接口

    作用是: 抛出基础请求方式、基础前缀、请求头信息、参数、超时时间、凭证、后端接口返回数据类型! 作用是:使用请求拦截器和响应拦截器解决下边的问题 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Promise API 拦截请求和响应 转换请求数据和响应数据 取消

    2024年01月20日
    浏览(44)
  • 前端excel文件处理,vue2 、file-saver、xlsx, excel文件生成与excel文件链接数据导出

    安装插件 如使用TS开发,可安装file-saver的TypeScript类型定义 下载文件流 本地文件下载 文件下载(列宽自适应) 表格显示,每列列宽自适应 xlsx文件链接数据导出 方法调用

    2024年02月11日
    浏览(59)
  • 虚幻引擎集成web前端<一>:win环境UE4.27导出像素流并集成到vue2环境(附案例)

     本案例附件:https://download.csdn.net/download/rexfow/88303544 -AudioMixer -PixelStreamingIP=localhost -PixelStreamingPort=8888 1、执行run_local.bat: SamplesPixelStreamingWebServersSignallingWebServerplatform_scriptscmd F:UEpackageUE4271WindowsNoEditorSamplesPixelStreamingWebServersSignallingWebServerplatform_scriptscmd 运行后

    2024年02月09日
    浏览(40)
  • 前端调用后端接口,导出excel文件打开显示[object object]

      没有错误提示,输出也正常 一直是这样的,我也找了网上的十几个相同案例,但是都不能解决这个问题 后端传的代码: 未解决前的前端代码: 解决后端前端代码:  解决后:

    2024年04月15日
    浏览(40)
  • vue2 若依项目,使用plotly.js-dist图表库,将数据图表一键导出为图片

    此代码适用的场景是一个页面有多个数据图表。 首先需要拿到你生成数据图表的数据, 然后赋值给一个数组,数组需要在data定义,还需要去重。  然后点击导出按钮的代码如下: 单个下载可以点击数据图表的照相机,可以实现单个下载。 如果数据图表做了分页和懒加载,无

    2024年02月12日
    浏览(46)
  • 前端实现websocket通信讲解(vue2框架)

    前言 :最近接到的需求是前端需要实现一个全局告警弹窗,如果使用ajax请求http接口只能用定时器定时去请求是否有告警,这样既消耗资源,又不能实时监测到告警信息。所以这个时候就可以采用websocket来实现通信,因为websocket不用请求一次才响应一次,它可以实现服务器主

    2024年02月12日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包