Vue框架开发Electron10 - 输出大数据Excel文件(1)

前言

    在使用electron-vue框架时,常会碰到输出Excel数据表,那么我们就要考虑问题了,在提供的模块中,有xlsx模块,也有better-xlsx等模块,这些模块都是能用来生成xlsx文件,xlsx是比较常用的输出Excel文件模块,better-xlsx是在xlsx模块上衍生出来的,他可以对xlsx模块原有的sheet和cell进行颜色、长度等美观化操作,两个输出Excel文件的模块都有各自的优缺点,xlsx输出Excel文件更小,better-xlsx输出Excel文件更大,但比较美观。

    具体这两种生成Excel文件的模块的用处,就不用重复一遍用法了,在百度、谷歌有很多例子,可以使用,下面我主要说说我在使用者两个模块中遇到的问题。如果要做持续的大数据输出,时间比较长的需求,那么使用这两个模块输出生成Excel文件就有弊端,他们的操作都会读取文件再写数据,随着输出数据的增大,导致输出Excel文件增大,此时,在写入数据就会变得困难,而且占用CPU内存会飞快上升,导致最后软件卡死。

    那么有啥办法可以输出大数据的Excel文件,同时使得CPU内存不上升,软件不卡顿呢,那么可以使用输出csv文件。 csv文件也是可以使用Excel软件打开的一种文件格式,它相当于输出单页的xlsx,没有sheet,直观上可以理解是.txt文件上划上格子。

正文:输出csv文件操作过程:

  • 设计输出csv文件输出类
LogUtils.js文件

const remote = require('electron').remote;
const fs = remote.require('fs');

import store from '../store'

export class LogUtils {
    constructor(path, jsonPath, objsArr) {
        this.objsArray = objsArr           // 存储数据数组
        this.decoderLogPath = path         // .csv路径
        this.jsonPath = jsonPath           // json数据

        this._InitDecoderLogFeild(this.objsArray, this.jsonPath);    //初始化方法
}


WriteDecoderLog(dateTime) {
    let array = new Array();

    // 时间 
    array.push(dateTime);

    // 遍历存储数据数组所有对象
    this.objsArray.forEach(element => {
        for (let item in element) {
            array.push(element[item]);
            //console.log(item, element[item]);
        }
    });

    //关键一句,否则不会换行
    array.push("\r\n");

    //写入Buffer
    this._WriteDecoderBuffer(array.join(','))
}

_WriteDecoderBuffer(str) {
    fs.appendFile(this.decoderLogPath, str, function () {
        //console.log('追加内容完成');
    });
}

_InitDecoderLogFeild(objsArr, jsonPath) {
    let array = new Array();
    let jsonObj = null

    //第一个字段为时间 

    array.push("时间");

    // 通过json文件,获取变量所对应头名称 
    jsonObj = JSON.parse(fs.readFileSync(jsonPath, 'utf8').toString()); //读取的值

    // 遍历头名称数组对象
    objsArr.forEach(element => {
        for (let item in element) {
            array.push(jsonObj[item]);
        }
    });

    array.push("\r\n");
    this._WriteDecoderBuffer(array.join(','))
}

 

  • 使用方法
let jsonPath = "./Map.json"                        //表头名称的json数据,注意:Map.json数据的名称要和写入csv数据变量名称一致才能写如无误    
let csvHead = [this.MyData1, this.MyData2]  //写入csv的数据
this.logHandle = new LogUtils(this.fileName, jsonPath, csvHead);   //this.fileName是保存.csv文件名称
  • 想要增加头列表,Map.json文件要与csv写入数据变量一致,比如
//MyData1里有变量:data1, data2
//MyData2里有变量:data3,  data4

{
    "data1": "data1数据列",
    "data2": "data2数据列",
    "data3": "data3数据列",
    "data4": "data4数据列",
  
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值