前端json导出excel示例

import { Injectable } from '@angular/core';

import josnData from './api-data'

import * as XLSX from 'xlsx'

import { saveAs } from 'file-saver';

@Injectable({

  providedIn: 'root'

})

export class JsonToExcelService {

  constructor() { }

  pwa = [

    { url: '/api/cc/plan/{planid}/result', type: 'put' },

    { url: '/api/cc/plan', type: 'get' },

    { url: '/api/cc/plan/{planid}/examinee', type: 'get' },

    { url: '/api/cc/table/{tableid}/item', type: 'get' },

    { url: '/api/cc/examiner/self/state', type: 'post' },

    { url: '/api/cc/plan/examinee/photo', type: 'post' },

    { url: '/api/cc/plan/{planid}/{group}/passrate', type: 'get' },

  ]

  wc = [

    { url: '/api/cc/system/afterinterview/login', type: 'post' },

    { url: '/api/cc/system/login', type: 'post' },

    { url: '/api/cc/candidate', type: 'get' },

    { url: '/api/cc/plan', type: 'get' },

    { url: '/api/cc/plan/team/state/{teamid}', type: 'put' },

    { url: '/api/cc/candidate/{idcard}', type: 'get' },

    { url: '/api/cc/plan/{planid}/examinee/grouping', type: 'delete' },

    { url: '/api/cc/v2/face/candidate', type: 'get' },

    { url: '/api/cc/v2/face/candidate/idcard', type: 'post' },

    { url: '/api/cc/v2/face/outSideSubmit', type: 'put' },

  ]

  // 新招聘与其他平台公用的

  newJob = [

    { url: '/api/cc/system/login', type: 'post' },

  ]

  getJosn() {

    const apiData = josnData

    let paths = apiData.paths

    let exportData: { system: string, url: string, type: string }[] = []

    let urlArray = Object.keys(paths)

    for (let i = 0; i < urlArray.length; i++) {

      const url = urlArray[i];

      // 查找微信,/candidate/ 开头的

      if (url.substr(0, 11) === '/candidate/') {

        Object.keys(paths[url]).forEach(type => {

          exportData.push({

            system: 'jobcc_wx',

            url,

            type

          })

        })

      }

      // 查找pwa

      let pwa = this.pwa.find(p => p.url === url)

      if (pwa) {

        Object.keys(paths[url]).forEach(type => {

          if (pwa.type === type) {

            exportData.push({

              system: 'jobcc_pwa',

              url,

              type

            })

          }

        })

      }

      // 查找外场

      let wc = this.wc.find(w => w.url === url)

      if (wc) {

        Object.keys(paths[url]).forEach(type => {

          if (wc.type === type) {

            exportData.push({

              system: 'jobcc_electron',

              url,

              type

            })

          }

        })

        // 有可能多个系统共用一个接口,所以这里才跳出

        continue;

      }

      if (url.indexOf('login') !== -1) {

        continue;

      }

      // 查找老招聘,job是指老招聘 新招聘的api都是/api/cc/ 开头   排除/api/cc/和/candidate/的剩下就是老招聘

      if (url.substr(0, 8) !== '/api/cc/') {

        Object.keys(paths[url]).forEach(type => {

          exportData.push({

            system: 'job',

            url,

            type

          })

        })

        continue;

      }

    }

    this.JSONToExcelConvertor(exportData, 'swagger-api')

  }

  //json数据转excel

  JSONToExcelConvertor(JSONData: any, FileName: string) {

    let book = XLSX.utils.book_new();

    let sheet = XLSX.utils.json_to_sheet(JSONData)

    XLSX.utils.book_append_sheet(book, sheet, '接口')

    sheet.A1.v = '系统名'

    sheet.C1.v = 'http-method'

    let excelData = XLSX.write(book, { bookType: "xlsx", bookSST: false, type: "binary" });

    var blob = new Blob([this.string2ArrayBuffer(excelData)], { type: "" });

    saveAs(blob, `${FileName}.xlsx`);

  }

  string2ArrayBuffer(s) {

    var buf = new ArrayBuffer(s.length);

    var view = new Uint8Array(buf);

    for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;

    return buf;

  }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容