前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Electron中excel读取

Electron中excel读取

作者头像
码客说
发布2022-10-04 21:37:12
1.2K0
发布2022-10-04 21:37:12
举报
文章被收录于专栏:码客码客

Excel导入导出

下载

代码语言:javascript
复制
npm install node-xlsx

代码中引入node-xlsx包

代码语言:javascript
复制
const nodeXlsx = require("node-xlsx"); //引入模块

导入Excel文件

代码语言:javascript
复制
let path = 'D://test.xlsx'
let sheets = nodeXlsx.parse(path)

// 解析所有sheet
sheets.forEach(sheet => {
    // sheet.data是所有行数据
    let rows = sheet.data
    for (var i = 0; i < rows.length; i++) {
        console.log(`第${i + 1}行第一列数据:${rows[i][0]}`)
        console.log(`第${i + 1}行第二列数据:${rows[i][1]}`)
    }
});

导出Excel

代码语言:javascript
复制
const xlsx = require("node-xlsx"); //引入模块

const exportExcel = (data) => {
  // 設置表格列寬
  const options = {
    "!cols": [
      { wch: 25 },
      { wch: 45 },
      { wch: 90 },
    ],
  };
  // 要導出的數據數組
  let xlsxObj = [
    {
      name: "sheet",
      data: [
        [
          "id",
          "name",
          "age",
        ],
      ],
    },
  ];
  // 生成導出的數據
  let foodData = data;
  foodData.forEach((item) => {
    let typeArr = [];
    typeArr.push(item.type);
    item.foodsList.forEach((list) => {
      let listArr = [];
      for (const key in list) {
        listArr.push(list[key]);
      }
      xlsxObj[0].data.push(typeArr.concat(listArr));
    });
  });

  //xlsxObj最终的数据格式为:
  // 二维数组
  // [
  //   ["id","name","age"],//第一列为表头信息
  //   ['1','小明',16],
  //   ['2','小红',18],
  //   ......
  // ]

  return xlsx.build(xlsxObj, options)
};

module.exports = exportExcel;

导出

代码语言:javascript
复制
var exportExcel = require('./exportExcel');
var fs = require('fs');
let data = [{
    id:"1",
    name:"小明",
    age:16
},{
    id:"2",
    name:"小红",
    age:18
}];
var buffer = exportExcel(data);
fs.writeFile('./result.xls',buffer,function(err){
    if(err){
        console.info(err);
    }else{
        console.info("导出成功");
    }
})

前端导出Excel

工具类

代码语言:javascript
复制
var download_excel = function (content, filename) {
    // 创建隐藏的可下载链接
    var eleLink = document.createElement("a");
    eleLink.download = filename;
    eleLink.style.display = "none";
    // 字符内容转变成blob地址
    var blob = new Blob([content]);
    eleLink.href = URL.createObjectURL(blob);
    // 触发点击
    document.body.appendChild(eleLink);
    eleLink.click();
    // 然后移除
    document.body.removeChild(eleLink);
};

//替换table数据和worksheet名字
var format = function (s, c) {
    return s.replace(/{(\w+)}/g, function (m, p) {
        return c[p];
    });
};

export const table2excel = function (tableid, sheetName) {
    var template =
        '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel"' +
        'xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>' +
        "<x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets>" +
        "</x:ExcelWorkbook></xml><![endif]-->" +
        ' <style type="text/css">' +
        "table th,td {" +
        "min-width: 200px;" +
        " text-align: center;" +
        "background-color: #ffffff;" +
        "color: #333333;" +
        " }" +
        "</style>" +
        '</head><body ><table class="excelTable">{table}</table></body></html>';
    if (!tableid.nodeType) tableid = document.getElementById(tableid);
    var ctx = {worksheet: sheetName || "Worksheet", table: tableid.innerHTML};
    download_excel(format(template, ctx), sheetName);
};

使用

代码语言:javascript
复制
import {table2excel} from "./export_table_excel.js";
table2excel("mytable", "评价统计.xls");

选择文件夹/文件

选择文件夹

添加引用

代码语言:javascript
复制
const { app, dialog } = window.require("electron").remote;

弹窗选择

代码语言:javascript
复制
select_dir: function() {
    dialog
        .showOpenDialog({
        properties: ["openFile", "openDirectory"]
    })
        .then(result => {
        if (!result.canceled) {
            this.outpath = result.filePaths[0];
        }
    })
        .catch(err => {
        console.log(err);
    });
}

选择文件

代码语言:javascript
复制
dialog.showOpenDialog({
    title:'请选择文件',
    defaultPath:'',
    filters:[{
        name:'表格(xls/xlsx)',
        extensions:['xls','xlsx']
    }],
    buttonLabel:'选择文件'
}).then(result=>{
    console.info('path',result.filePaths[0]);
}).catch(err=>{
    console.log(err)
})

进程间通讯

渲染进程

代码语言:javascript
复制
ipcRenderer.on('read_xls_result', (event, arg) => {
    let all_data = arg;
    let table_header = [];
    let table_data = [];
    if(all_data&&all_data.length>0){
        table_header = all_data[0];
        for (let i = 1; i < all_data.length; i++) {
            let row = all_data[i];
            let data_row = {};
            //设置初始值
            for (let j = 0; j < table_header.length; j++) {
                data_row[table_header[j]+""] = "";
            }
            for (let j = 0; j < row.length; j++) {
                data_row[table_header[j]+""] = row[j]||"";
            }
            table_data.push(data_row);
        }
    }
    console.info("table_header",table_header);
    console.info("table_data",table_data);
    this.table_header = table_header;
    this.table_data = this.table_data.concat(table_data) ;
})

ipcRenderer.send('read_xls', this.outpath)

在主进程中

代码语言:javascript
复制
const { ipcMain } = require("electron")

ipcMain.on("read_xls", (event, arg) => {
    console.log(arg);
    let sheets = nodeXlsx.parse(arg)
    sheets.forEach(sheet => {
        // sheet.data是所有行数据
        let rows = sheet.data;
        event.reply("read_xls_result", rows);
    });
});

数字运算

math.js

镜像地址

https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.16.0/math.min.js

代码语言:javascript
复制
let num1 = 0.1;
let num2 = 0.2;
let sum = math.format(math.add(num1, num2), {precision: 4});
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Excel导入导出
    • 导入Excel文件
      • 导出Excel
        • 前端导出Excel
        • 选择文件夹/文件
          • 选择文件夹
            • 选择文件
            • 进程间通讯
            • 数字运算
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档