2.0.3 • Published 9 years ago

js-merge-xlsx v2.0.3

Weekly downloads
-
License
MIT
Repository
-
Last release
9 years ago

js-merge-xlsx Build Status

Minimum JavaScript-based template engine for MS-Excel. js-merge-xlsx empowers you to print JavaScript objects.

  • Available for both web browser and Node.js .
  • Bulk printing. It is possible to print array as 'multiple files'.
  • Bulk printing. It is possible to print array as 'multiple sheets'.

Template
Template
After printing
Rendered

Install

npm install js-merge-xlsx

Prepare template

Prepare the template with bind-variables as mustache format {{}}. Template
Note: Only string cell is supported. Please make sure that the format of cells having variables is String.
Note

Node.js

example

const Promise = require('bluebird');
const readYamlSync = require('read-data').yaml.sync;
const fs = Promise.promisifyAll(require('fs'));
const _ = require('underscore');
const {merge, bulkMergeToFiles, bulkMergeToSheets} = require('js-merge-xlsx');

const config = {
    template:   './template/Template.xlsx',
    singleData: './data/data1.yml',
    arrayData:  './data/data2.yml'
};

const readData = () => {
    let templateObj = fs.readFileSync(config.template);
    let data  = readYamlSync(config.singleData);
    let bulkData = readYamlSync(config.arrayData);

    return {
        templateObj: templateObj,
        data: data,
        bulkData1: _.map(bulkData, (e, index) => {
            return {name: `file${index + 1}.xlsx`, data: e};
        }),
        bulkData2: _.map(bulkData, (e, index) => {
            return {name: `example${index + 1}`, data: e};
        })
    };
};

//Start
let {templateObj, data, bulkData1, bulkData2} = readData();

//example of merge()
fs.writeFileSync('example1.xlsx',  merge(templateObj, data));

//example of bulkMergeToFiles()
fs.writeFileSync(
    'example2.zip',
    bulkMergeToFiles(templateObj, bulkData1)
);

//example of bulkMergeToSheets()
//this method is called async by returning Promise(bluebird) instance.
bulkMergeToSheets(templateObj, bulkData2)
.then((excel) => {
    fs.writeFileSync('example3.xlsx', excel);
});

Please check example codes and API for detail.

Browser

You can also use it on web browser by using webpack(browserify). Bluebird automatically casts thenable object, such as object returned by "$http.get()" or "$.get()", to trusted Promise. https://github.com/petkaantonov/bluebird/blob/master/API.md#promiseresolvedynamic-value---promise
So, you can code in the same way as Node.js.
example

const Promise = require('bluebird');
const {merge, bulkMergeToFiles, bulkMergeToSheets} = require('js-merge-xlsx');
const JSZip = require('jszip');
const _ = require('underscore');

module.exports = ($scope, $http) => {

    $scope.merge = () => {
        Promise.props({
            template: $http.get('/template/Template.xlsx', {responseType: 'arraybuffer'}),
            data:     $http.get('/data/data1.json')
        }).then(({template, data}) => {

            //FileSaver#saveAs()
            saveAs(merge(template, data), 'example.xlsx');
        }).catch((err) => {
            console.log(err);
        });
    };

    $scope.bulkMergeToFiles = () => {
        Promise.props({
            template: $http.get('/template/Template.xlsx', {responseType: 'arraybuffer'}),
            data:     $http.get('/data/data2.json')
        }).then(({template, data}) => {

            data = _.map(data.data, (e,index) => {
                return {name: `file${(index+1)}.xlsx`, data: e};
            });
            //FileSaver#saveAs()
            saveAs(bulkMergeToFiles(template, data), 'example.zip');
        }).catch((err) => {
            console.log(err);
        });
    };

    $scope.bulkMergeToSheets = ()=>{
        Promise.props({
            template: $http.get('/template/Template.xlsx', {responseType: 'arraybuffer'}),
            data:     $http.get('/data/data2.json')
        }).then(({template, data}) => {

            data = _.map(data.data, (e,index) => {
                return {name: `sample${(index+1)}`, data: e};
            });

            //bulkMergeToSheets() is called asyc by returning Promise(bluebird) instance.
            return bulkMergeToSheets(template, data);
        }).then((excel) => {

            saveAs(excel,'example.xlsx');
        }).catch((err) => {
            console.log(err);
        });
    };
};

Please check example codes and API for detail.

2.0.3

9 years ago

2.0.2

9 years ago

2.0.1

9 years ago

2.0.0

9 years ago

1.0.4

9 years ago

1.0.3

9 years ago

1.0.2

9 years ago

1.0.1

9 years ago

1.0.0

10 years ago

0.1.0

10 years ago

0.0.10

10 years ago

0.0.9

10 years ago

0.0.8

10 years ago

0.0.7

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.2

10 years ago

0.0.1

10 years ago