js-merge-xlsx v2.0.3
js-merge-xlsx 
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
After printing
Install
npm install js-merge-xlsx
Prepare template
Prepare the template with bind-variables as mustache format {{}}.
Note: Only string cell is supported. Please make sure that the format of cells having variables is String.
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.
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago