Xlsx-Zip is a library that adapts for Office Xlsx Zip format. You can use it to compress xlsx's metadata, but can't extract.
this library is inspired by node-compress-commons and node-zip.
- Zip format compatible with Office Xlsx
- Support zip64
- Support both stream and buffer output
Microsoft Office Xlsx Zip doesn't adapt standard Zip(PK-ZIP) format completely, which doesn't support ZIP64 Central Directory. So most Zip library can't generate a standard Office Xlsx file. The library is created to generate it perfectly.
npm i xlsx-zip
const { XlsxZip } = require('xlsx-zip');
const fs = require('fs');
async function main() {
// don't set `stream` parameter
const xlsxZip = new XlsxZip();
const dirPath = 'directory/path';
// add by directory
await xlsxZip.addDirectory(null, dirPath);
// add by Buffer
await xlsxZip.add('entry/path1', Buffer.from('entry'));
// add by Buffer list
await xlsxZip.add('entry/path1', [Buffer.from('entry')]);
// add by file stream
const rs = fs.createReadStream('file/path');
await xlsxZip.add('entry/path2', rs);
const buf = await xlsxZip.finish();
fs.writeFileSync('./output.xlsx', buf);
}
const { XlsxZip } = require('xlsx-zip');
const fs = require('fs');
async function main() {
const stream = fs.createWriteStream('./output.xlsx');
const xlsxZip = new XlsxZip({ stream });
stream.on('close', () => {
console.log('done');
});
const dirPath = 'directory/path';
// add by directory
await xlsxZip.addDirectory(null, dirPath);
// add by Buffer
await xlsxZip.add('entry/path1', Buffer.from('entry'));
// add by Buffer list
await xlsxZip.add('entry/path1', [Buffer.from('entry')]);
// add by file stream
const rs = fs.createReadStream('file/path');
await xlsxZip.add('entry/path2', rs);
await xlsxZip.finish();
}
you can filter some path you don't want to add into ZIP stream with regExp
parameter
const { XlsxZip } = require('xlsx-zip');
const fs = require('fs');
async function main() {
const xlsxZip = new XlsxZip({
regExp: '.DS_Store'
});
// or
const xlsxZip = new XlsxZip({
regExp: new RegExp('.DS_Store')
});
const dirPath = 'directory/path';
// add by directory
await xlsxZip.addDirectory(null, dirPath);
const buf = await xlsxZip.finish();
fs.writeFileSync('./output.xlsx', buf);
}