forked from sheetjs/sheetjs
version bump 0.7.1: test now ignores missing files
apparently openpyxl removed a few test files from their suite :/
This commit is contained in:
parent
d15b81e0e9
commit
a1990758a0
@ -159,7 +159,7 @@ The exported `write` and `writeFile` functions accept an options argument:
|
||||
|
||||
- `bookSST` is slower and more memory intensive, but has better compatibility
|
||||
with iOS Numbers
|
||||
- `bookType = 'xlsb'` is stubbed and far from complete
|
||||
- `bookType = 'xlsb'` is stubbed and far from complete
|
||||
- The raw data is the only thing guaranteed to be saved. Formulae, formatting,
|
||||
and other niceties are not serialized (pending CSF standardization)
|
||||
|
||||
|
@ -95,11 +95,12 @@ try {
|
||||
process.exit(4);
|
||||
}
|
||||
|
||||
if(!program.quiet) console.error(target_sheet);
|
||||
var oo = "";
|
||||
if(!program.quiet) console.error(target_sheet);
|
||||
if(program.formulae) oo = X.utils.get_formulae(ws).join("\n");
|
||||
else if(program.json) oo = JSON.stringify(X.utils.sheet_to_row_object_array(ws));
|
||||
else if(program.rawJs) oo = JSON.stringify(X.utils.sheet_to_row_object_array(ws,{raw:true}));
|
||||
else oo = X.utils.make_csv(ws, {FS:program.fieldSep, RS:program.rowSep});
|
||||
|
||||
if(program.output) fs.writeFileSync(program.output, oo);
|
||||
else console.log(oo);
|
||||
|
@ -1 +1 @@
|
||||
XLSX.version = '0.7.0';
|
||||
XLSX.version = '0.7.1';
|
||||
|
@ -223,7 +223,7 @@ function write_ct(ct, opts) {
|
||||
v = ct[w][0];
|
||||
o.push(writextag('Override', null, {
|
||||
'PartName': (v[0] == '/' ? "":"/") + v,
|
||||
'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
|
||||
'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
|
||||
}));
|
||||
}
|
||||
};
|
||||
@ -231,7 +231,7 @@ function write_ct(ct, opts) {
|
||||
ct[w].forEach(function(v) {
|
||||
o.push(writextag('Override', null, {
|
||||
'PartName': (v[0] == '/' ? "":"/") + v,
|
||||
'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
|
||||
'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
|
||||
}));
|
||||
});
|
||||
};
|
||||
@ -245,7 +245,7 @@ function write_ct(ct, opts) {
|
||||
};
|
||||
f1('workbooks');
|
||||
f2('sheets');
|
||||
f3('themes');
|
||||
f3('themes');
|
||||
['strs', 'styles'].forEach(f1);
|
||||
['coreprops', 'extprops', 'custprops'].forEach(f3);
|
||||
if(o.length>2){ o.push('</Types>'); o[1]=o[1].replace("/>",">"); }
|
||||
|
@ -58,7 +58,7 @@ function write_cust_props(cp, opts) {
|
||||
o.push(CUST_PROPS_XML_ROOT);
|
||||
if(!cp) return o.join("");
|
||||
var pid = 1;
|
||||
keys(cp).forEach(function(k) { ++pid;
|
||||
keys(cp).forEach(function(k) { ++pid;
|
||||
o.push(writextag('property', write_vt(cp[k]), {
|
||||
'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',
|
||||
'pid': pid,
|
||||
|
@ -180,7 +180,7 @@ var write_sst_xml = function(sst, opts) {
|
||||
count: sst.Count,
|
||||
uniqueCount: sst.Unique
|
||||
}));
|
||||
sst.forEach(function(s) { o.push("<si>" + (s.r ? s.r : "<t>" + escapexml(s.t) + "</t>") + "</si>"); });
|
||||
sst.forEach(function(s) { o.push("<si>" + (s.r ? s.r : "<t>" + escapexml(s.t) + "</t>") + "</si>"); });
|
||||
if(o.length>2){ o.push('</sst>'); o[1]=o[1].replace("/>",">"); }
|
||||
return o.join("");
|
||||
};
|
||||
|
@ -19,8 +19,7 @@ function write_numFmts(NF, opts) {
|
||||
var o = [];
|
||||
o.push("<numFmts>");
|
||||
[[5,8],[23,26],[41,44],[63,66],[164,392]].forEach(function(r) {
|
||||
for(var i = r[0]; i <= r[1]; ++i) if(NF[i])
|
||||
o.push(writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));
|
||||
for(var i = r[0]; i <= r[1]; ++i) if(NF[i]) o.push(writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));
|
||||
});
|
||||
o.push("</numFmts>");
|
||||
if(o.length === 2) return "";
|
||||
|
@ -130,7 +130,7 @@ var WS_XML_ROOT = writextag('worksheet', null, {
|
||||
|
||||
var write_ws_xml_cell = function(cell, ref, ws, opts, idx, wb) {
|
||||
var v = writextag('v', escapexml(String(cell.v))), o = {r:ref};
|
||||
if(cell.z) o.s = get_cell_style(opts.cellXfs, cell, opts);
|
||||
if(cell.z) o.s = get_cell_style(opts.cellXfs, cell, opts);
|
||||
/* TODO: cell style */
|
||||
if(typeof cell.v === 'undefined') return "";
|
||||
switch(cell.t) {
|
||||
@ -142,7 +142,7 @@ var write_ws_xml_cell = function(cell, ref, ws, opts, idx, wb) {
|
||||
} break;
|
||||
case 'n': o.t = "n"; return writextag('c', v, o);
|
||||
case 'b': o.t = "b"; return writextag('c', v, o);
|
||||
case 'e': o.t = "e"; return writextag('c', v, o);
|
||||
case 'e': o.t = "e"; return writextag('c', v, o);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -2,7 +2,7 @@ function add_rels(rels, rId, f, type, relobj) {
|
||||
if(!relobj) relobj = {};
|
||||
if(!rels['!id']) rels['!id'] = {};
|
||||
relobj.Id = 'rId' + rId;
|
||||
relobj.Type = type;
|
||||
relobj.Type = type;
|
||||
relobj.Target = f;
|
||||
if(rels['!id'][relobj.Id]) throw new Error("Cannot rewrite rId " + rId);
|
||||
rels['!id'][relobj.Id] = relobj;
|
||||
@ -65,7 +65,7 @@ function write_zip(wb, opts) {
|
||||
}
|
||||
|
||||
/* TODO: something more intelligent with themes */
|
||||
|
||||
|
||||
/* f = "xl/theme/theme1.xml"
|
||||
zip.file(f, write_theme());
|
||||
ct.themes.push(f);
|
||||
|
2
dist/xlsx.core.min.js
vendored
2
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
2
dist/xlsx.full.min.js
vendored
2
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
23
dist/xlsx.js
vendored
23
dist/xlsx.js
vendored
@ -2,7 +2,7 @@
|
||||
/* vim: set ts=2: */
|
||||
var XLSX = {};
|
||||
(function(XLSX){
|
||||
XLSX.version = '0.7.0';
|
||||
XLSX.version = '0.7.1';
|
||||
var current_codepage = 1252, current_cptable;
|
||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
|
||||
if(typeof cptable === 'undefined') cptable = require('codepage');
|
||||
@ -1115,7 +1115,7 @@ function write_ct(ct, opts) {
|
||||
v = ct[w][0];
|
||||
o.push(writextag('Override', null, {
|
||||
'PartName': (v[0] == '/' ? "":"/") + v,
|
||||
'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
|
||||
'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
|
||||
}));
|
||||
}
|
||||
};
|
||||
@ -1123,7 +1123,7 @@ function write_ct(ct, opts) {
|
||||
ct[w].forEach(function(v) {
|
||||
o.push(writextag('Override', null, {
|
||||
'PartName': (v[0] == '/' ? "":"/") + v,
|
||||
'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
|
||||
'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
|
||||
}));
|
||||
});
|
||||
};
|
||||
@ -1137,7 +1137,7 @@ function write_ct(ct, opts) {
|
||||
};
|
||||
f1('workbooks');
|
||||
f2('sheets');
|
||||
f3('themes');
|
||||
f3('themes');
|
||||
['strs', 'styles'].forEach(f1);
|
||||
['coreprops', 'extprops', 'custprops'].forEach(f3);
|
||||
if(o.length>2){ o.push('</Types>'); o[1]=o[1].replace("/>",">"); }
|
||||
@ -1405,7 +1405,7 @@ function write_cust_props(cp, opts) {
|
||||
o.push(CUST_PROPS_XML_ROOT);
|
||||
if(!cp) return o.join("");
|
||||
var pid = 1;
|
||||
keys(cp).forEach(function(k) { ++pid;
|
||||
keys(cp).forEach(function(k) { ++pid;
|
||||
o.push(writextag('property', write_vt(cp[k]), {
|
||||
'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',
|
||||
'pid': pid,
|
||||
@ -1597,7 +1597,7 @@ var write_sst_xml = function(sst, opts) {
|
||||
count: sst.Count,
|
||||
uniqueCount: sst.Unique
|
||||
}));
|
||||
sst.forEach(function(s) { o.push("<si>" + (s.r ? s.r : "<t>" + escapexml(s.t) + "</t>") + "</si>"); });
|
||||
sst.forEach(function(s) { o.push("<si>" + (s.r ? s.r : "<t>" + escapexml(s.t) + "</t>") + "</si>"); });
|
||||
if(o.length>2){ o.push('</sst>'); o[1]=o[1].replace("/>",">"); }
|
||||
return o.join("");
|
||||
};
|
||||
@ -1648,8 +1648,7 @@ function write_numFmts(NF, opts) {
|
||||
var o = [];
|
||||
o.push("<numFmts>");
|
||||
[[5,8],[23,26],[41,44],[63,66],[164,392]].forEach(function(r) {
|
||||
for(var i = r[0]; i <= r[1]; ++i) if(NF[i])
|
||||
o.push(writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));
|
||||
for(var i = r[0]; i <= r[1]; ++i) if(NF[i]) o.push(writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));
|
||||
});
|
||||
o.push("</numFmts>");
|
||||
if(o.length === 2) return "";
|
||||
@ -2178,7 +2177,7 @@ var WS_XML_ROOT = writextag('worksheet', null, {
|
||||
|
||||
var write_ws_xml_cell = function(cell, ref, ws, opts, idx, wb) {
|
||||
var v = writextag('v', escapexml(String(cell.v))), o = {r:ref};
|
||||
if(cell.z) o.s = get_cell_style(opts.cellXfs, cell, opts);
|
||||
if(cell.z) o.s = get_cell_style(opts.cellXfs, cell, opts);
|
||||
/* TODO: cell style */
|
||||
if(typeof cell.v === 'undefined') return "";
|
||||
switch(cell.t) {
|
||||
@ -2190,7 +2189,7 @@ var write_ws_xml_cell = function(cell, ref, ws, opts, idx, wb) {
|
||||
} break;
|
||||
case 'n': o.t = "n"; return writextag('c', v, o);
|
||||
case 'b': o.t = "b"; return writextag('c', v, o);
|
||||
case 'e': o.t = "e"; return writextag('c', v, o);
|
||||
case 'e': o.t = "e"; return writextag('c', v, o);
|
||||
}
|
||||
};
|
||||
|
||||
@ -3876,7 +3875,7 @@ function add_rels(rels, rId, f, type, relobj) {
|
||||
if(!relobj) relobj = {};
|
||||
if(!rels['!id']) rels['!id'] = {};
|
||||
relobj.Id = 'rId' + rId;
|
||||
relobj.Type = type;
|
||||
relobj.Type = type;
|
||||
relobj.Target = f;
|
||||
if(rels['!id'][relobj.Id]) throw new Error("Cannot rewrite rId " + rId);
|
||||
rels['!id'][relobj.Id] = relobj;
|
||||
@ -3939,7 +3938,7 @@ function write_zip(wb, opts) {
|
||||
}
|
||||
|
||||
/* TODO: something more intelligent with themes */
|
||||
|
||||
|
||||
/* f = "xl/theme/theme1.xml"
|
||||
zip.file(f, write_theme());
|
||||
ct.themes.push(f);
|
||||
|
2
dist/xlsx.min.js
vendored
2
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,15 +1,15 @@
|
||||
{
|
||||
"name": "xlsx",
|
||||
"version": "0.7.0",
|
||||
"version": "0.7.1",
|
||||
"author": "sheetjs",
|
||||
"description": "XLSB / XLSX / XLSM (Excel 2007+ Spreadsheet) parser",
|
||||
"description": "XLSB/XLSX/XLSM (Excel 2007+ Spreadsheet) parser and writer",
|
||||
"keywords": [ "xlsx", "xlsb", "xlsm", "office", "excel", "spreadsheet" ],
|
||||
"bin": {
|
||||
"xlsx": "./bin/xlsx.njs"
|
||||
},
|
||||
"main": "./xlsx",
|
||||
"dependencies": {
|
||||
"ssf":"~0.6.4",
|
||||
"ssf":"~0.6.5",
|
||||
"codepage":"1.x",
|
||||
"cfb":"",
|
||||
"jszip":"2.2.0",
|
||||
@ -17,6 +17,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"mocha":"",
|
||||
"xlsjs":"",
|
||||
"uglify-js":"",
|
||||
"jasmine-node": "x"
|
||||
},
|
||||
|
2
test.js
2
test.js
@ -127,6 +127,7 @@ function parsetest(x, wb, full, ext) {
|
||||
|
||||
describe('should parse test files', function() {
|
||||
files.forEach(function(x) {
|
||||
if(!fs.existsSync(dir + x)) return;
|
||||
it(x, x.substr(-8) == ".pending" ? null : function() {
|
||||
var wb = X.readFile(dir + x, opts);
|
||||
parsetest(x, wb, true);
|
||||
@ -136,6 +137,7 @@ describe('should parse test files', function() {
|
||||
});
|
||||
});
|
||||
fileA.forEach(function(x) {
|
||||
if(!fs.existsSync(dir + x)) return;
|
||||
it(x, x.substr(-8) == ".pending" ? null : function() {
|
||||
var wb = X.readFile(dir + x, {WTF:opts.wtf, sheetRows:10});
|
||||
parsetest(x, wb, false);
|
||||
|
23
xlsx.js
23
xlsx.js
@ -2,7 +2,7 @@
|
||||
/* vim: set ts=2: */
|
||||
var XLSX = {};
|
||||
(function(XLSX){
|
||||
XLSX.version = '0.7.0';
|
||||
XLSX.version = '0.7.1';
|
||||
var current_codepage = 1252, current_cptable;
|
||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
|
||||
if(typeof cptable === 'undefined') cptable = require('codepage');
|
||||
@ -1115,7 +1115,7 @@ function write_ct(ct, opts) {
|
||||
v = ct[w][0];
|
||||
o.push(writextag('Override', null, {
|
||||
'PartName': (v[0] == '/' ? "":"/") + v,
|
||||
'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
|
||||
'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
|
||||
}));
|
||||
}
|
||||
};
|
||||
@ -1123,7 +1123,7 @@ function write_ct(ct, opts) {
|
||||
ct[w].forEach(function(v) {
|
||||
o.push(writextag('Override', null, {
|
||||
'PartName': (v[0] == '/' ? "":"/") + v,
|
||||
'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
|
||||
'ContentType': CT_LIST[w][opts.bookType || 'xlsx']
|
||||
}));
|
||||
});
|
||||
};
|
||||
@ -1137,7 +1137,7 @@ function write_ct(ct, opts) {
|
||||
};
|
||||
f1('workbooks');
|
||||
f2('sheets');
|
||||
f3('themes');
|
||||
f3('themes');
|
||||
['strs', 'styles'].forEach(f1);
|
||||
['coreprops', 'extprops', 'custprops'].forEach(f3);
|
||||
if(o.length>2){ o.push('</Types>'); o[1]=o[1].replace("/>",">"); }
|
||||
@ -1405,7 +1405,7 @@ function write_cust_props(cp, opts) {
|
||||
o.push(CUST_PROPS_XML_ROOT);
|
||||
if(!cp) return o.join("");
|
||||
var pid = 1;
|
||||
keys(cp).forEach(function(k) { ++pid;
|
||||
keys(cp).forEach(function(k) { ++pid;
|
||||
o.push(writextag('property', write_vt(cp[k]), {
|
||||
'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',
|
||||
'pid': pid,
|
||||
@ -1597,7 +1597,7 @@ var write_sst_xml = function(sst, opts) {
|
||||
count: sst.Count,
|
||||
uniqueCount: sst.Unique
|
||||
}));
|
||||
sst.forEach(function(s) { o.push("<si>" + (s.r ? s.r : "<t>" + escapexml(s.t) + "</t>") + "</si>"); });
|
||||
sst.forEach(function(s) { o.push("<si>" + (s.r ? s.r : "<t>" + escapexml(s.t) + "</t>") + "</si>"); });
|
||||
if(o.length>2){ o.push('</sst>'); o[1]=o[1].replace("/>",">"); }
|
||||
return o.join("");
|
||||
};
|
||||
@ -1648,8 +1648,7 @@ function write_numFmts(NF, opts) {
|
||||
var o = [];
|
||||
o.push("<numFmts>");
|
||||
[[5,8],[23,26],[41,44],[63,66],[164,392]].forEach(function(r) {
|
||||
for(var i = r[0]; i <= r[1]; ++i) if(NF[i])
|
||||
o.push(writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));
|
||||
for(var i = r[0]; i <= r[1]; ++i) if(NF[i]) o.push(writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));
|
||||
});
|
||||
o.push("</numFmts>");
|
||||
if(o.length === 2) return "";
|
||||
@ -2178,7 +2177,7 @@ var WS_XML_ROOT = writextag('worksheet', null, {
|
||||
|
||||
var write_ws_xml_cell = function(cell, ref, ws, opts, idx, wb) {
|
||||
var v = writextag('v', escapexml(String(cell.v))), o = {r:ref};
|
||||
if(cell.z) o.s = get_cell_style(opts.cellXfs, cell, opts);
|
||||
if(cell.z) o.s = get_cell_style(opts.cellXfs, cell, opts);
|
||||
/* TODO: cell style */
|
||||
if(typeof cell.v === 'undefined') return "";
|
||||
switch(cell.t) {
|
||||
@ -2190,7 +2189,7 @@ var write_ws_xml_cell = function(cell, ref, ws, opts, idx, wb) {
|
||||
} break;
|
||||
case 'n': o.t = "n"; return writextag('c', v, o);
|
||||
case 'b': o.t = "b"; return writextag('c', v, o);
|
||||
case 'e': o.t = "e"; return writextag('c', v, o);
|
||||
case 'e': o.t = "e"; return writextag('c', v, o);
|
||||
}
|
||||
};
|
||||
|
||||
@ -3876,7 +3875,7 @@ function add_rels(rels, rId, f, type, relobj) {
|
||||
if(!relobj) relobj = {};
|
||||
if(!rels['!id']) rels['!id'] = {};
|
||||
relobj.Id = 'rId' + rId;
|
||||
relobj.Type = type;
|
||||
relobj.Type = type;
|
||||
relobj.Target = f;
|
||||
if(rels['!id'][relobj.Id]) throw new Error("Cannot rewrite rId " + rId);
|
||||
rels['!id'][relobj.Id] = relobj;
|
||||
@ -3939,7 +3938,7 @@ function write_zip(wb, opts) {
|
||||
}
|
||||
|
||||
/* TODO: something more intelligent with themes */
|
||||
|
||||
|
||||
/* f = "xl/theme/theme1.xml"
|
||||
zip.file(f, write_theme());
|
||||
ct.themes.push(f);
|
||||
|
Loading…
Reference in New Issue
Block a user