相关文章推荐
果断的风衣  ·  深交所:港股通名单有调整,这些地产公司被调出!·  8 月前    · 
发财的青椒  ·  车轮上的2022|BBA全球销量悉数下滑,重 ...·  1 年前    · 
可爱的香瓜  ·  历届台湾金曲奖入围及获奖名单 - 知乎·  1 年前    · 
一直单身的柚子  ·  喵与喵薄荷 - 搜狗百科·  1 年前    · 
冷静的乌冬面  ·  谁说我是大佬了第113话 ...·  2 年前    · 
Code  ›  Electron中excel读取开发者社区
table electron
https://cloud.tencent.com/developer/article/2134278
激动的烤地瓜
2 月前
码客说

Electron中excel读取

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
发布
首页
学习
活动
专区
圈层
工具
MCP广场
返回腾讯云官网
码客说
首页
学习
活动
专区
圈层
工具
MCP广场
返回腾讯云官网
社区首页 > 专栏 > Electron中excel读取

Electron中excel读取

作者头像
码客说
发布 于 2022-10-04 21:37:12
发布 于 2022-10-04 21:37:12
1.5K 0 0
代码可运行
举报
文章被收录于专栏: 码客 码客
运行总次数: 0
代码可运行

Excel导入导出

下载

代码语言: javascript
代码 运行次数: 0
运行
复制
npm install node-xlsx

代码中引入node-xlsx包

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

导入Excel文件

代码语言: javascript
代码 运行次数: 0
运行
复制
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
代码 运行次数: 0
运行
复制
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
代码 运行次数: 0
运行
复制
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
代码 运行次数: 0
运行
复制
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
代码 运行次数: 0
运行
复制
import {table2excel} from "./export_table_excel.js";
table2excel("mytable", "评价统计.xls");

选择文件夹/文件

选择文件夹

添加引用

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

弹窗选择

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

选择文件

代码语言: javascript
代码 运行次数: 0
运行
复制
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
代码 运行次数: 0
运行
复制
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
代码 运行次数: 0
运行
复制
const { ipcMain } = require("electron")
ipcMain.on("read_xls", (event, arg) => {
    console.log(arg);
    let sheets = nodeXlsx.parse(arg)
    sheets.forEach(sheet => {
        // sheet.data是所有行数据
 
推荐文章
果断的风衣  ·  深交所:港股通名单有调整,这些地产公司被调出!
8 月前
发财的青椒  ·  车轮上的2022|BBA全球销量悉数下滑,重利润轻销量战略还能持续多久_搜狐汽车_搜狐网
1 年前
可爱的香瓜  ·  历届台湾金曲奖入围及获奖名单 - 知乎
1 年前
一直单身的柚子  ·  喵与喵薄荷 - 搜狗百科
1 年前
冷静的乌冬面  ·  谁说我是大佬了第113话 东罗山(下拉式)-谁说我是大佬了-大树漫画
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号