Skip to content

Latest commit

 

History

History
197 lines (165 loc) · 4.27 KB

README.md

File metadata and controls

197 lines (165 loc) · 4.27 KB

PHPExcelJs

Node version of PHPExcel

In this repository I'm using PHPExcel library for recreating xlsx files with nodejs
As this precess requires interation between PHP and nodejs, php must be installed in your server
sudo apt-get install php7-cli
I facilitate this communication by creating a radom json file (in nodejs) that I save in temp folder, next I execute a child process "php convertor.php " + jsonFile for calling php.
jsonFile help php to know where to get informations
Once php get the file content, the file is diretly deleted

Usage
Example 1

const WorkBook = require("./lib/workBook").WorkBook;

let wb = new WorkBook('Myfile.xlsx');

let ws = wb.addWorksheet('Worksheet');

ws.fromArray(
  [
    ['', 2010, 2011, 2012],
    ['Q1', 12, 15, 21],
    ['Q2', 56, 73, 86],
    ['Q3', 52, 61, 69],
    ['Q4', 30, 32, 0],
  ]
);

 const logoPath = __dirname + "/images/phpexcel_logo.gif";
  let logo = ws.addImage(logoPath);
  logo.setName("Logo")
    .setDescription('Adding image')
    .setCoordinates("A8")
    .setOffsetX(20)
    .setRotation(5)
    .setHeight(40);

const path = __dirname+"/Myfile.xlsx";
wb.write(path).then(result => {
  console.log('success');
})
.catch(err => {
  console.log(err);
}).done();

Example 2

const express = require('express');

const WorkBook = require("./lib/workBook").WorkBook;
let app = express();

app.use(express.static(__dirname));
app.get('/excel', (req, res, next) => {


  const styleFormatedNumber = {
    format: "#.##",
    fontSize: 19,
    fill: 'FF0000'
  }

  const styleHeader = {
    alignment: {
      key: 'horizontal',
      value: 'center'
    },
    font: {
      color: {
        'argb': "FFFFFF"
      }
    },
    fill: '0066ff'

  }
  const dateType = {
    type: 'date',
    format: "M/D/YYYY"
  }
  const styleBorder = {
    border: {
      style: 'thin',
      color: 'FFFF0000',
      //position :  'right', 'left', 'top', 'bottom' . default 'allborders'
    },
  }
  const dateStyle = {
    type: 'date',
    format: "M/D/YYYY",
    border: {
      style: 'thin',
      color: 'FFFF0000',
      //position : 'allborders'
    },
    font: {
      bold: true,
      color: {
        'argb': 'FFFF0000'
      },
      size: 9,
      name: 'Vardana'
    },
    alignment: {
      key: 'horizontal',
      value: 'center',
      rotation: 45
    }
  }

  const textRotale = {
    alignment: {
      rotation: 45
    }
  }

  const bold = {
    font: {
      bold: true
    }
  }


  let wb = new WorkBook('Myfile.xlsx');

  var ws = wb.addWorksheet("sheet1");

  // A1
  ws.cell(1, 1).value("JEREMIE LODI").style(styleHeader);
  ws.cell(5, 1).value("Bad"); //A5
  ws.setCellValue("A3", 1200.8747).style(styleFormatedNumber);
  ws.setCellValue("A2", "Works");
  ws.cell('A2').style(bold);

  ws.freezePane("A1");
  ws.mergeCells("C4", "F12").value("Super long text underlined and rotated")
    .freeze()
    .style(styleBorder, textRotale)
    .setUnderline(true);

  ws.col("A").setWidth(30);

  ws.cell("D1").value("1992-03-13").style(dateType);

  // new worksheet
  var ws2 = wb.addWorksheet("sheet 2");
  ws2.col("A").setWidth(15);
  ws2.col("B").setWidth(15);
  ws2.setCellValue("A1", "First name").style(styleHeader).setUnderline(true);

  ws2.setCellValue("B1", "Last name").style(styleHeader).setUnderline(true);

  for (var i = 2; i < 5000; i++) {
    ws2.setCellValue("A" + i, "Alice" + i);
    ws2.setCellValue("B" + i, "Bob" + i);
  }

  // new worksheet
  var ws3 = wb.addWorksheet('Worksheet');

  ws3.fromArray(
    [
      ['', 2010, 2011, 2012],
      ['Q1', 12, 15, 21],
      ['Q2', 56, 73, 86],
      ['Q3', 52, 61, 69],
      ['Q4', 30, 32, 0],
    ]
  );


  let chart = ws3.addChart('barChart');
  chart.setTitle("Chart title")
    .setSeriesLables(['$B$1', '$C$1', '$D$1'], 'Number', 1) //2010 2011, 2012, 2013
    .setXAxisTickValues(['$A$2:$A$5'], 'String', 4) //Q1 to Q4
    .setSeriesValues(['$B$2:$B$5', '$C$2:$C$5', '$D$2:$D$5'], 'Number', 4)
    .setValueTitle("Value ($k)")
    .setTopLeftPosition("A7")
    .setBottomRightPosition("H20");


  wb.render().then(result => {
    res.set(result.headers);
    res.send(result.report); //report is excel's stream
  }).catch(err => {
    console.log(err);
  }).done();

});

app.listen(8181);
console.log('app run on 8181');