forked from sheetjs/sheetjs
version bump 0.7.3: performance
- require cpexcel instead of full codepage library - hardcode the unescapexml regexp - utf8read short circuit for ASCII strings - cellFormulae also acts on XLSX/XLSM - bin/xlsx.njs do not process formulae unless requested
This commit is contained in:
parent
86f21d76ce
commit
489b9cdde4
@ -125,7 +125,7 @@ The exported `read` and `readFile` functions accept an options argument:
|
||||
|
||||
| Option Name | Default | Description |
|
||||
| :---------- | ------: | :---------- |
|
||||
| cellFormula | true | Save formulae to the .f field ** |
|
||||
| cellFormula | true | Save formulae to the .f field |
|
||||
| cellHTML | true | Parse rich text and save HTML to the .h field |
|
||||
| cellNF | false | Save number format string to the .z field |
|
||||
| sheetStubs | false | Create cell objects for stub cells |
|
||||
@ -136,8 +136,6 @@ The exported `read` and `readFile` functions accept an options argument:
|
||||
| bookSheets | false | If true, only parse enough to get the sheet names |
|
||||
| bookVBA | false | If true, expose vbaProject.bin to `vbaraw` field ** |
|
||||
|
||||
- `cellFormula` only applies to constructing XLSB formulae. XLSX/XLSM formulae
|
||||
are stored in plaintext, but XLSB formulae are stored in a binary format.
|
||||
- Even if `cellNF` is false, formatted text (.w) will be generated
|
||||
- In some cases, sheets may be parsed even if `bookSheets` is false.
|
||||
- `bookSheets` and `bookProps` combine to give both sets of information
|
||||
|
@ -20,6 +20,8 @@ program
|
||||
.option('-F, --field-sep <sep>', 'CSV field separator', ",")
|
||||
.option('-R, --row-sep <sep>', 'CSV row separator', "\n")
|
||||
.option('-n, --sheet-rows <num>', 'Number of rows to process (0=all rows)')
|
||||
.option('--no-sst', 'do not generate sst')
|
||||
.option('--perf', 'do not generate output')
|
||||
.option('--dev', 'development mode')
|
||||
.option('--read', 'read but do not print out contents')
|
||||
.option('-q, --quiet', 'quiet mode');
|
||||
@ -57,6 +59,9 @@ if(program.xlsx || program.xlsm || program.xlsb) {
|
||||
opts.cellNF = true;
|
||||
if(program.output) sheetname = program.output;
|
||||
}
|
||||
else if(program.formulae);
|
||||
else opts.cellFormula = false;
|
||||
|
||||
if(program.dev) {
|
||||
X.verbose = 2;
|
||||
opts.WTF = true;
|
||||
@ -77,7 +82,7 @@ if(program.listSheets) {
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
var wopts = {WTF:opts.WTF};
|
||||
var wopts = {WTF:opts.WTF, bookSST:program.sst};
|
||||
|
||||
if(program.xlsx) return X.writeFile(wb, sheetname || (filename + ".xlsx"), wopts);
|
||||
if(program.xlsm) return X.writeFile(wb, sheetname || (filename + ".xlsm"), wopts);
|
||||
@ -95,6 +100,8 @@ try {
|
||||
process.exit(4);
|
||||
}
|
||||
|
||||
if(program.perf) return;
|
||||
|
||||
var oo = "";
|
||||
if(!program.quiet) console.error(target_sheet);
|
||||
if(program.formulae) oo = X.utils.get_formulae(ws).join("\n");
|
||||
|
@ -1 +1 @@
|
||||
XLSX.version = '0.7.2';
|
||||
XLSX.version = '0.7.3';
|
||||
|
@ -1,6 +1,6 @@
|
||||
var current_codepage = 1252, current_cptable;
|
||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
|
||||
if(typeof cptable === 'undefined') cptable = require('codepage');
|
||||
if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel');
|
||||
current_cptable = cptable[current_codepage];
|
||||
}
|
||||
function reset_cp() { set_cp(1252); }
|
||||
|
@ -27,7 +27,8 @@ var rencstr = "&<>'\"".split("");
|
||||
// TODO: CP remap (need to read file version to determine OS)
|
||||
function unescapexml(text){
|
||||
var s = text + '';
|
||||
for(var y in encodings) s = s.replace(new RegExp(y,'g'), encodings[y]);
|
||||
s = s.replace(/"/g, '"').replace(/'/g, "'").replace(/>/g, ">").replace(/</g, "<").replace(/&/g, "&");
|
||||
//for(var y in encodings) s = s.replace(new RegExp(y,'g'), encodings[y]);
|
||||
return s.replace(/_x([0-9a-fA-F]*)_/g,function(m,c) {return _chr(parseInt(c,16));});
|
||||
}
|
||||
function escapexml(text){
|
||||
@ -48,6 +49,7 @@ function parsexmlbool(value, tag) {
|
||||
|
||||
var utf8read = function(orig) {
|
||||
var out = [], i = 0, c = 0, c1 = 0, c2 = 0, c3 = 0;
|
||||
if(!orig.match(/[\u0080-\uffff]/)) return orig;
|
||||
while (i < orig.length) {
|
||||
c = orig.charCodeAt(i++);
|
||||
if (c < 128) out.push(_chr(c));
|
||||
|
@ -18,7 +18,7 @@ function parse_ws_xml(data, opts, rels) {
|
||||
}
|
||||
|
||||
var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
|
||||
var q = ["v","f"];
|
||||
var q = (opts.cellFormula ? ["v","f"] : ["v"]);
|
||||
var sidx = 0;
|
||||
|
||||
/* 18.3.1.80 sheetData CT_SheetData ? */
|
||||
|
2
dist/cpexcel.js
vendored
2
dist/cpexcel.js
vendored
@ -959,10 +959,12 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable;
|
||||
var encache = function(cp) {
|
||||
if(typeof Buffer !== 'undefined') {
|
||||
sbcs_cache.forEach(function(s) {
|
||||
if(!cpt[s]) return;
|
||||
cpdcache[s] = sbcs_decode(s);
|
||||
cpecache[s] = sbcs_encode(s);
|
||||
});
|
||||
dbcs_cache.forEach(function(s) {
|
||||
if(!cpt[s]) return;
|
||||
cpdcache[s] = dbcs_decode(s);
|
||||
cpecache[s] = dbcs_encode(s);
|
||||
});
|
||||
|
6
dist/xlsx.core.min.js
vendored
6
dist/xlsx.core.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/xlsx.core.min.map
vendored
2
dist/xlsx.core.min.map
vendored
File diff suppressed because one or more lines are too long
8
dist/xlsx.full.min.js
vendored
8
dist/xlsx.full.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/xlsx.full.min.map
vendored
2
dist/xlsx.full.min.map
vendored
File diff suppressed because one or more lines are too long
10
dist/xlsx.js
vendored
10
dist/xlsx.js
vendored
@ -2,10 +2,10 @@
|
||||
/* vim: set ts=2: */
|
||||
var XLSX = {};
|
||||
(function(XLSX){
|
||||
XLSX.version = '0.7.2';
|
||||
XLSX.version = '0.7.3';
|
||||
var current_codepage = 1252, current_cptable;
|
||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
|
||||
if(typeof cptable === 'undefined') cptable = require('codepage');
|
||||
if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel');
|
||||
current_cptable = cptable[current_codepage];
|
||||
}
|
||||
function reset_cp() { set_cp(1252); }
|
||||
@ -675,7 +675,8 @@ var rencstr = "&<>'\"".split("");
|
||||
// TODO: CP remap (need to read file version to determine OS)
|
||||
function unescapexml(text){
|
||||
var s = text + '';
|
||||
for(var y in encodings) s = s.replace(new RegExp(y,'g'), encodings[y]);
|
||||
s = s.replace(/"/g, '"').replace(/'/g, "'").replace(/>/g, ">").replace(/</g, "<").replace(/&/g, "&");
|
||||
//for(var y in encodings) s = s.replace(new RegExp(y,'g'), encodings[y]);
|
||||
return s.replace(/_x([0-9a-fA-F]*)_/g,function(m,c) {return _chr(parseInt(c,16));});
|
||||
}
|
||||
function escapexml(text){
|
||||
@ -696,6 +697,7 @@ function parsexmlbool(value, tag) {
|
||||
|
||||
var utf8read = function(orig) {
|
||||
var out = [], i = 0, c = 0, c1 = 0, c2 = 0, c3 = 0;
|
||||
if(!orig.match(/[\u0080-\uffff]/)) return orig;
|
||||
while (i < orig.length) {
|
||||
c = orig.charCodeAt(i++);
|
||||
if (c < 128) out.push(_chr(c));
|
||||
@ -2165,7 +2167,7 @@ function parse_ws_xml(data, opts, rels) {
|
||||
}
|
||||
|
||||
var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
|
||||
var q = ["v","f"];
|
||||
var q = (opts.cellFormula ? ["v","f"] : ["v"]);
|
||||
var sidx = 0;
|
||||
|
||||
/* 18.3.1.80 sheetData CT_SheetData ? */
|
||||
|
4
dist/xlsx.min.js
vendored
4
dist/xlsx.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/xlsx.min.map
vendored
2
dist/xlsx.min.map
vendored
File diff suppressed because one or more lines are too long
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "xlsx",
|
||||
"version": "0.7.2-a",
|
||||
"version": "0.7.3",
|
||||
"author": "sheetjs",
|
||||
"description": "XLSB/XLSX/XLSM (Excel 2007+ Spreadsheet) parser and writer",
|
||||
"keywords": [ "xlsx", "xlsb", "xlsm", "office", "excel", "spreadsheet" ],
|
||||
|
@ -82,6 +82,7 @@ apachepoi_53568.xlsx
|
||||
apachepoi_53734.xlsx
|
||||
apachepoi_53798.xlsx
|
||||
apachepoi_53798_shiftNegative_TMPL.xlsx
|
||||
apachepoi_54034.xlsx
|
||||
apachepoi_54071.xlsx
|
||||
apachepoi_54084 - Greek - beyond BMP.xlsx
|
||||
apachepoi_54206.xlsx
|
||||
|
10
xlsx.js
10
xlsx.js
@ -2,10 +2,10 @@
|
||||
/* vim: set ts=2: */
|
||||
var XLSX = {};
|
||||
(function(XLSX){
|
||||
XLSX.version = '0.7.2';
|
||||
XLSX.version = '0.7.3';
|
||||
var current_codepage = 1252, current_cptable;
|
||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
|
||||
if(typeof cptable === 'undefined') cptable = require('codepage');
|
||||
if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel');
|
||||
current_cptable = cptable[current_codepage];
|
||||
}
|
||||
function reset_cp() { set_cp(1252); }
|
||||
@ -675,7 +675,8 @@ var rencstr = "&<>'\"".split("");
|
||||
// TODO: CP remap (need to read file version to determine OS)
|
||||
function unescapexml(text){
|
||||
var s = text + '';
|
||||
for(var y in encodings) s = s.replace(new RegExp(y,'g'), encodings[y]);
|
||||
s = s.replace(/"/g, '"').replace(/'/g, "'").replace(/>/g, ">").replace(/</g, "<").replace(/&/g, "&");
|
||||
//for(var y in encodings) s = s.replace(new RegExp(y,'g'), encodings[y]);
|
||||
return s.replace(/_x([0-9a-fA-F]*)_/g,function(m,c) {return _chr(parseInt(c,16));});
|
||||
}
|
||||
function escapexml(text){
|
||||
@ -696,6 +697,7 @@ function parsexmlbool(value, tag) {
|
||||
|
||||
var utf8read = function(orig) {
|
||||
var out = [], i = 0, c = 0, c1 = 0, c2 = 0, c3 = 0;
|
||||
if(!orig.match(/[\u0080-\uffff]/)) return orig;
|
||||
while (i < orig.length) {
|
||||
c = orig.charCodeAt(i++);
|
||||
if (c < 128) out.push(_chr(c));
|
||||
@ -2165,7 +2167,7 @@ function parse_ws_xml(data, opts, rels) {
|
||||
}
|
||||
|
||||
var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
|
||||
var q = ["v","f"];
|
||||
var q = (opts.cellFormula ? ["v","f"] : ["v"]);
|
||||
var sidx = 0;
|
||||
|
||||
/* 18.3.1.80 sheetData CT_SheetData ? */
|
||||
|
Loading…
Reference in New Issue
Block a user