forked from sheetjs/sheetjs
version bump 0.17.2: basic node/browser ESM
This commit is contained in:
parent
6c0ada1790
commit
6670c8448e
|
@ -8,6 +8,7 @@ xlsx*.js text eol=lf
|
|||
|
||||
docbits/* linguist-documentation
|
||||
dist/* linguist-generated=true binary
|
||||
*.mjs linguist-generated=true binary
|
||||
xlsx.js linguist-generated=true binary
|
||||
xlsxworker.js linguist-generated=true binary
|
||||
tests/core.js linguist-generated=true binary
|
||||
|
|
11
CHANGELOG.md
11
CHANGELOG.md
|
@ -4,10 +4,21 @@ This log is intended to keep track of backwards-incompatible changes, including
|
|||
but not limited to API changes and file location changes. Minor behavioral
|
||||
changes may not be included if they are not expected to break existing code.
|
||||
|
||||
## v0.17.2
|
||||
|
||||
* Browser and Node optional ESM support
|
||||
* DSV correct handling of bare quotes (h/t @bgamrat)
|
||||
|
||||
## v0.17.1
|
||||
|
||||
* `XLSB` writer uses short cell form when viable
|
||||
|
||||
## 0.17.0:
|
||||
|
||||
* mini build includes ODS parse/write support
|
||||
* DBF explicitly cap worksheet to 1<<20 rows
|
||||
* XLS throw errors on truncated records
|
||||
|
||||
## v0.16.2
|
||||
|
||||
* Disabled `PRN` parsing by default (better support for CSV without delimeters)
|
||||
|
|
|
@ -1 +1 @@
|
|||
XLSX.version = '0.17.1';
|
||||
XLSX.version = '0.17.2';
|
||||
|
|
|
@ -329,9 +329,9 @@ DataReader.prototype = {
|
|||
// see implementations
|
||||
},
|
||||
/**
|
||||
* Find the last occurence of a zip signature (4 bytes).
|
||||
* Find the last occurrence of a zip signature (4 bytes).
|
||||
* @param {string} sig the signature to find.
|
||||
* @return {number} the index of the last occurence, -1 if not found.
|
||||
* @return {number} the index of the last occurrence, -1 if not found.
|
||||
*/
|
||||
lastIndexOfSignature: function(sig) {
|
||||
// see implementations
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -486,9 +486,9 @@ DataReader.prototype = {
|
|||
// see implementations
|
||||
},
|
||||
/**
|
||||
* Find the last occurence of a zip signature (4 bytes).
|
||||
* Find the last occurrence of a zip signature (4 bytes).
|
||||
* @param {string} sig the signature to find.
|
||||
* @return {number} the index of the last occurence, -1 if not found.
|
||||
* @return {number} the index of the last occurrence, -1 if not found.
|
||||
*/
|
||||
lastIndexOfSignature: function(sig) {
|
||||
// see implementations
|
||||
|
@ -9161,7 +9161,7 @@ module.exports = ZStream;
|
|||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
|
||||
var XLSX = {};
|
||||
function make_xlsx_lib(XLSX){
|
||||
XLSX.version = '0.17.1';
|
||||
XLSX.version = '0.17.2';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
/*global cptable:true, window */
|
||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
|
||||
|
@ -12016,7 +12016,8 @@ function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; }
|
|||
/* TODO: stress test */
|
||||
function fuzzynum(s) {
|
||||
var v = Number(s);
|
||||
if(!isNaN(v)) return v;
|
||||
if(isFinite(v)) return v;
|
||||
if(!isNaN(v)) return NaN;
|
||||
if(!/\d/.test(s)) return v;
|
||||
var wt = 1;
|
||||
var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";});
|
||||
|
@ -15962,6 +15963,20 @@ function parse_ColInfo(blob, length, opts) {
|
|||
if(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;
|
||||
return o;
|
||||
}
|
||||
function write_ColInfo(col, idx) {
|
||||
var o = new_buf(12);
|
||||
o.write_shift(2, idx);
|
||||
o.write_shift(2, idx);
|
||||
o.write_shift(2, col.width * 256);
|
||||
o.write_shift(2, 0);
|
||||
var f = 0;
|
||||
if(col.hidden) f |= 1;
|
||||
o.write_shift(1, f);
|
||||
f = col.level || 0;
|
||||
o.write_shift(1, f);
|
||||
o.write_shift(2, 0);
|
||||
return o;
|
||||
}
|
||||
|
||||
/* [MS-XLS] 2.4.257 */
|
||||
function parse_Setup(blob, length) {
|
||||
|
@ -16940,7 +16955,7 @@ var PRN = (function() {
|
|||
}
|
||||
else sep = guess_sep(str.slice(0,1024));
|
||||
var R = 0, C = 0, v = 0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);
|
||||
str = str.replace(/\r\n/mg, "\n");
|
||||
var _re = o.dateNF != null ? dateNF_regex(o.dateNF) : null;
|
||||
function finish_cell() {
|
||||
|
@ -16972,13 +16987,13 @@ var PRN = (function() {
|
|||
if(cell.t == 'z'){}
|
||||
else if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }
|
||||
else ws[encode_cell({c:C,r:R})] = cell;
|
||||
start = end+1;
|
||||
start = end+1; startcc = str.charCodeAt(start);
|
||||
if(range.e.c < C) range.e.c = C;
|
||||
if(range.e.r < R) range.e.r = R;
|
||||
if(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }
|
||||
}
|
||||
outer: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {
|
||||
case 0x22: instr = !instr; break;
|
||||
case 0x22: if(startcc === 0x22) instr = !instr; break;
|
||||
case sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;
|
||||
default: break;
|
||||
}
|
||||
|
@ -18480,7 +18495,7 @@ function parse_cellXfs(t, styles, opts) {
|
|||
xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);
|
||||
for(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])
|
||||
xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);
|
||||
if(xf.numFmtId > 0x188) {
|
||||
if(styles.NumberFmt && xf.numFmtId > 0x188) {
|
||||
for(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }
|
||||
}
|
||||
styles.CellXf.push(xf); break;
|
||||
|
@ -19592,7 +19607,7 @@ function parse_comments_xml(data, opts) {
|
|||
var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:"",t:"",h:""};
|
||||
comment.r = rt.r;
|
||||
if(rt.r == "<t></t>") rt.t = rt.h = "";
|
||||
comment.t = rt.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n");
|
||||
comment.t = (rt.t||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n");
|
||||
if(opts.cellHTML) comment.h = rt.h;
|
||||
commentList.push(comment);
|
||||
});
|
||||
|
@ -20702,7 +20717,7 @@ ixti = f[1][1]; r = f[1][2];
|
|||
if(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;
|
||||
else if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;
|
||||
else {
|
||||
var ixtidata = get_ixti_raw(supbooks, bookidx, opts).split(";;");
|
||||
var ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||"").split(";;");
|
||||
if(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct
|
||||
else o += "SH33TJSERRX";
|
||||
}
|
||||
|
@ -22373,9 +22388,9 @@ function safe_format(p, fmtid, fillid, opts, themes, styles) {
|
|||
try {
|
||||
if(opts.cellNF) p.z = SSF._table[fmtid];
|
||||
} catch(e) { if(opts.WTF) throw e; }
|
||||
if(p.t === 'z') return;
|
||||
if(p.t === 'z' && !opts.cellStyles) return;
|
||||
if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
|
||||
if(!opts || opts.cellText !== false) try {
|
||||
if((!opts || opts.cellText !== false) && p.t !== 'z') try {
|
||||
if(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || "General", fmtid);
|
||||
if(p.t === 'e') p.w = p.w || BErr[p.v];
|
||||
else if(fmtid === 0) {
|
||||
|
@ -24799,7 +24814,6 @@ function write_BrtFileVersion(data, o) {
|
|||
write_XLWideString(XLSX.version, o);
|
||||
write_XLWideString(XLSX.version, o);
|
||||
write_XLWideString("7262", o);
|
||||
o.length = o.l;
|
||||
return o.length > o.l ? o.slice(0, o.l) : o;
|
||||
}
|
||||
|
||||
|
@ -28589,6 +28603,16 @@ function write_ws_biff8_hlinks(ba, ws) {
|
|||
delete ws['!links'];
|
||||
}
|
||||
|
||||
function write_ws_cols_biff8(ba, cols, ws) {
|
||||
if(!cols) return;
|
||||
var cnt = 0;
|
||||
cols.forEach(function(col, idx) {
|
||||
if(++cnt <= 256 && col) {
|
||||
write_biff_rec(ba, "ColInfo", write_ColInfo(col_obj_w(idx, col), idx));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function write_ws_biff8_cell(ba, cell, R, C, opts) {
|
||||
var os = 16 + get_cell_style(opts.cellXfs, cell, opts);
|
||||
if(cell.v == null && !cell.bf) {
|
||||
|
@ -28652,6 +28676,8 @@ function write_ws_biff8(idx, opts, wb) {
|
|||
write_biff_rec(ba, "HCenter", writebool(false));
|
||||
write_biff_rec(ba, "VCenter", writebool(false));
|
||||
/* ... */
|
||||
if(b8) write_ws_cols_biff8(ba, ws["!cols"], ws);
|
||||
/* ... */
|
||||
write_biff_rec(ba, 0x200, write_Dimensions(range, opts));
|
||||
/* ... */
|
||||
|
||||
|
@ -29618,7 +29644,7 @@ var write_content_ods = (function() {
|
|||
return escapexml(text)
|
||||
.replace(/ +/g, function($$){return '<text:s text:c="'+$$.length+'"/>';})
|
||||
.replace(/\t/g, "<text:tab/>")
|
||||
.replace(/\n/g, "<text:line-break/>")
|
||||
.replace(/\n/g, "</text:p><text:p>")
|
||||
.replace(/^ /, "<text:s/>").replace(/ $/, "<text:s/>");
|
||||
};
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -4,7 +4,7 @@
|
|||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
|
||||
var XLSX = {};
|
||||
function make_xlsx_lib(XLSX){
|
||||
XLSX.version = '0.17.1';
|
||||
XLSX.version = '0.17.2';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
/*global cptable:true, window */
|
||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
|
||||
|
@ -2859,7 +2859,8 @@ function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; }
|
|||
/* TODO: stress test */
|
||||
function fuzzynum(s) {
|
||||
var v = Number(s);
|
||||
if(!isNaN(v)) return v;
|
||||
if(isFinite(v)) return v;
|
||||
if(!isNaN(v)) return NaN;
|
||||
if(!/\d/.test(s)) return v;
|
||||
var wt = 1;
|
||||
var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";});
|
||||
|
@ -6805,6 +6806,20 @@ function parse_ColInfo(blob, length, opts) {
|
|||
if(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;
|
||||
return o;
|
||||
}
|
||||
function write_ColInfo(col, idx) {
|
||||
var o = new_buf(12);
|
||||
o.write_shift(2, idx);
|
||||
o.write_shift(2, idx);
|
||||
o.write_shift(2, col.width * 256);
|
||||
o.write_shift(2, 0);
|
||||
var f = 0;
|
||||
if(col.hidden) f |= 1;
|
||||
o.write_shift(1, f);
|
||||
f = col.level || 0;
|
||||
o.write_shift(1, f);
|
||||
o.write_shift(2, 0);
|
||||
return o;
|
||||
}
|
||||
|
||||
/* [MS-XLS] 2.4.257 */
|
||||
function parse_Setup(blob, length) {
|
||||
|
@ -7783,7 +7798,7 @@ var PRN = (function() {
|
|||
}
|
||||
else sep = guess_sep(str.slice(0,1024));
|
||||
var R = 0, C = 0, v = 0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);
|
||||
str = str.replace(/\r\n/mg, "\n");
|
||||
var _re = o.dateNF != null ? dateNF_regex(o.dateNF) : null;
|
||||
function finish_cell() {
|
||||
|
@ -7815,13 +7830,13 @@ var PRN = (function() {
|
|||
if(cell.t == 'z'){}
|
||||
else if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }
|
||||
else ws[encode_cell({c:C,r:R})] = cell;
|
||||
start = end+1;
|
||||
start = end+1; startcc = str.charCodeAt(start);
|
||||
if(range.e.c < C) range.e.c = C;
|
||||
if(range.e.r < R) range.e.r = R;
|
||||
if(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }
|
||||
}
|
||||
outer: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {
|
||||
case 0x22: instr = !instr; break;
|
||||
case 0x22: if(startcc === 0x22) instr = !instr; break;
|
||||
case sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;
|
||||
default: break;
|
||||
}
|
||||
|
@ -9323,7 +9338,7 @@ function parse_cellXfs(t, styles, opts) {
|
|||
xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);
|
||||
for(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])
|
||||
xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);
|
||||
if(xf.numFmtId > 0x188) {
|
||||
if(styles.NumberFmt && xf.numFmtId > 0x188) {
|
||||
for(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }
|
||||
}
|
||||
styles.CellXf.push(xf); break;
|
||||
|
@ -10435,7 +10450,7 @@ function parse_comments_xml(data, opts) {
|
|||
var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:"",t:"",h:""};
|
||||
comment.r = rt.r;
|
||||
if(rt.r == "<t></t>") rt.t = rt.h = "";
|
||||
comment.t = rt.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n");
|
||||
comment.t = (rt.t||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n");
|
||||
if(opts.cellHTML) comment.h = rt.h;
|
||||
commentList.push(comment);
|
||||
});
|
||||
|
@ -11545,7 +11560,7 @@ ixti = f[1][1]; r = f[1][2];
|
|||
if(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;
|
||||
else if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;
|
||||
else {
|
||||
var ixtidata = get_ixti_raw(supbooks, bookidx, opts).split(";;");
|
||||
var ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||"").split(";;");
|
||||
if(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct
|
||||
else o += "SH33TJSERRX";
|
||||
}
|
||||
|
@ -13216,9 +13231,9 @@ function safe_format(p, fmtid, fillid, opts, themes, styles) {
|
|||
try {
|
||||
if(opts.cellNF) p.z = SSF._table[fmtid];
|
||||
} catch(e) { if(opts.WTF) throw e; }
|
||||
if(p.t === 'z') return;
|
||||
if(p.t === 'z' && !opts.cellStyles) return;
|
||||
if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
|
||||
if(!opts || opts.cellText !== false) try {
|
||||
if((!opts || opts.cellText !== false) && p.t !== 'z') try {
|
||||
if(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || "General", fmtid);
|
||||
if(p.t === 'e') p.w = p.w || BErr[p.v];
|
||||
else if(fmtid === 0) {
|
||||
|
@ -15642,7 +15657,6 @@ function write_BrtFileVersion(data, o) {
|
|||
write_XLWideString(XLSX.version, o);
|
||||
write_XLWideString(XLSX.version, o);
|
||||
write_XLWideString("7262", o);
|
||||
o.length = o.l;
|
||||
return o.length > o.l ? o.slice(0, o.l) : o;
|
||||
}
|
||||
|
||||
|
@ -19432,6 +19446,16 @@ function write_ws_biff8_hlinks(ba, ws) {
|
|||
delete ws['!links'];
|
||||
}
|
||||
|
||||
function write_ws_cols_biff8(ba, cols, ws) {
|
||||
if(!cols) return;
|
||||
var cnt = 0;
|
||||
cols.forEach(function(col, idx) {
|
||||
if(++cnt <= 256 && col) {
|
||||
write_biff_rec(ba, "ColInfo", write_ColInfo(col_obj_w(idx, col), idx));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function write_ws_biff8_cell(ba, cell, R, C, opts) {
|
||||
var os = 16 + get_cell_style(opts.cellXfs, cell, opts);
|
||||
if(cell.v == null && !cell.bf) {
|
||||
|
@ -19495,6 +19519,8 @@ function write_ws_biff8(idx, opts, wb) {
|
|||
write_biff_rec(ba, "HCenter", writebool(false));
|
||||
write_biff_rec(ba, "VCenter", writebool(false));
|
||||
/* ... */
|
||||
if(b8) write_ws_cols_biff8(ba, ws["!cols"], ws);
|
||||
/* ... */
|
||||
write_biff_rec(ba, 0x200, write_Dimensions(range, opts));
|
||||
/* ... */
|
||||
|
||||
|
@ -20461,7 +20487,7 @@ var write_content_ods = (function() {
|
|||
return escapexml(text)
|
||||
.replace(/ +/g, function($$){return '<text:s text:c="'+$$.length+'"/>';})
|
||||
.replace(/\t/g, "<text:tab/>")
|
||||
.replace(/\n/g, "<text:line-break/>")
|
||||
.replace(/\n/g, "</text:p><text:p>")
|
||||
.replace(/^ /, "<text:s/>").replace(/ $/, "<text:s/>");
|
||||
};
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -64,6 +64,7 @@ function zip_add_file(zip, path, content) {
|
|||
else zip.file(path, content);
|
||||
}
|
||||
|
||||
var jszip;
|
||||
|
||||
function zip_new() {
|
||||
return CFB.utils.cfb_new();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "xlsx",
|
||||
"version": "0.17.1",
|
||||
"version": "0.17.2",
|
||||
"author": "sheetjs",
|
||||
"description": "SheetJS Spreadsheet data parser and writer",
|
||||
"keywords": [
|
||||
|
@ -21,9 +21,8 @@
|
|||
"xlsx": "./bin/xlsx.njs"
|
||||
},
|
||||
"main": "xlsx.js",
|
||||
"module": "xlsx.mjs",
|
||||
"unpkg": "dist/xlsx.min.js",
|
||||
"jsdelivr": "dist/xlsx.min.js",
|
||||
"unpkg": "dist/xlsx.full.min.js",
|
||||
"jsdelivr": "dist/xlsx.full.min.js",
|
||||
"types": "types/index.d.ts",
|
||||
"browser": {
|
||||
"buffer": false,
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>JS-XLSX Core Test Runner</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="mocha.css" />
|
||||
<link rel="icon" type="image/png" href="//oss.sheetjs.com/assets/img/logo.png" />
|
||||
<style>
|
||||
#t { font: 20px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px 60px; font-weight: bold; }
|
||||
#tt{ font: 16px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px 60px; }
|
||||
th { font: 16px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px 60px; font-weight: bold; text-align: left; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1 id="t"><a href="http://sheetjs.com">JS-XLSX Browser-based Parsing Tests</a></h1>
|
||||
<table id="tt">
|
||||
<tr>
|
||||
<th>File Formats</th>
|
||||
<td><a href="http://github.com/SheetJS/js-xlsx">Library Source</a></td>
|
||||
<td><a href="http://SheetJS.github.io/js-xls">Interactive Demo</a></td>
|
||||
<td><a href="http://npm.im/xlsx">"xlsx" on npm</a></td>
|
||||
<td><a href="https://travis-ci.org/SheetJS/js-xlsx">node CI status</a></td>
|
||||
</tr>
|
||||
<tr><td colspan="5">Tests compiled from <a href="http://github.com/SheetJS/test_files">test_files repo</a> and are located at /test_files<br /></td></tr>
|
||||
</table>
|
||||
<script type="text/javascript">
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-36810333-1']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
</script>
|
||||
<script src="shim.js"></script>
|
||||
<script src="base64.js"></script>
|
||||
<script src="fs_.js"></script>
|
||||
<script src="fixtures.js"></script>
|
||||
<script src="cpexcel.js"></script>
|
||||
<script type="module">
|
||||
import * as XLSX from './xlsx.mjs';
|
||||
if(typeof XLSX !== "undefined") globalThis.XLSX = XLSX;
|
||||
else if(typeof globalThis !== "undefined" && !globalThis.XLSX) globalThis.XLSX = XLSX;
|
||||
</script>
|
||||
<div id="mocha"></div>
|
||||
<script src="mocha.js"></script>
|
||||
<script>
|
||||
window.initMochaPhantomJS && window.initMochaPhantomJS();
|
||||
mocha.setup({ui:'bdd', timeout:15000});
|
||||
</script>
|
||||
<script src="core.js" type="module"></script>
|
||||
<script type="module">
|
||||
if(typeof mochaSaucePlease !== "undefined") mochaSaucePlease();
|
||||
else if(window.mochaPhantomJS) mochaPhantomJS.run();
|
||||
else typeof mocha_sauce !== 'undefined' ? mocha_sauce() : mocha.run();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1 @@
|
|||
../xlsx.mjs
|
|
@ -3,7 +3,7 @@
|
|||
/*exported XLSX */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
|
||||
var XLSX = {};
|
||||
XLSX.version = '0.17.1';
|
||||
XLSX.version = '0.17.2';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
|
||||
var VALID_ANSI = [ 874, 932, 936, 949, 950 ];
|
||||
|
@ -2915,7 +2915,8 @@ function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(o.length
|
|||
/* TODO: stress test */
|
||||
function fuzzynum(s/*:string*/)/*:number*/ {
|
||||
var v/*:number*/ = Number(s);
|
||||
if(!isNaN(v)) return v;
|
||||
if(isFinite(v)) return v;
|
||||
if(!isNaN(v)) return NaN;
|
||||
if(!/\d/.test(s)) return v;
|
||||
var wt = 1;
|
||||
var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";});
|
||||
|
@ -3008,6 +3009,7 @@ function zip_add_file(zip, path, content) {
|
|||
else zip.file(path, content);
|
||||
}
|
||||
|
||||
var jszip;
|
||||
|
||||
function zip_new() {
|
||||
return CFB.utils.cfb_new();
|
||||
|
@ -7817,7 +7819,7 @@ var PRN = (function() {
|
|||
}
|
||||
else sep = guess_sep(str.slice(0,1024));
|
||||
var R = 0, C = 0, v = 0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);
|
||||
str = str.replace(/\r\n/mg, "\n");
|
||||
var _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;
|
||||
function finish_cell() {
|
||||
|
@ -7849,13 +7851,13 @@ var PRN = (function() {
|
|||
if(cell.t == 'z'){}
|
||||
else if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }
|
||||
else ws[encode_cell({c:C,r:R})] = cell;
|
||||
start = end+1;
|
||||
start = end+1; startcc = str.charCodeAt(start);
|
||||
if(range.e.c < C) range.e.c = C;
|
||||
if(range.e.r < R) range.e.r = R;
|
||||
if(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }
|
||||
}
|
||||
outer: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {
|
||||
case 0x22: instr = !instr; break;
|
||||
case 0x22: if(startcc === 0x22) instr = !instr; break;
|
||||
case sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;
|
||||
default: break;
|
||||
}
|
||||
|
@ -9358,7 +9360,7 @@ function parse_cellXfs(t, styles, opts) {
|
|||
xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);
|
||||
for(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])
|
||||
xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);
|
||||
if(xf.numFmtId > 0x188) {
|
||||
if(styles.NumberFmt && xf.numFmtId > 0x188) {
|
||||
for(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }
|
||||
}
|
||||
styles.CellXf.push(xf); break;
|
||||
|
@ -11583,7 +11585,7 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
|
|||
if(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;
|
||||
else if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;
|
||||
else {
|
||||
var ixtidata = get_ixti_raw(supbooks, bookidx, opts).split(";;");
|
||||
var ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||"").split(";;");
|
||||
if(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct
|
||||
else o += "SH33TJSERRX";
|
||||
}
|
||||
|
@ -13254,9 +13256,9 @@ function safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, the
|
|||
try {
|
||||
if(opts.cellNF) p.z = SSF._table[fmtid];
|
||||
} catch(e) { if(opts.WTF) throw e; }
|
||||
if(p.t === 'z') return;
|
||||
if(p.t === 'z' && !opts.cellStyles) return;
|
||||
if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
|
||||
if(!opts || opts.cellText !== false) try {
|
||||
if((!opts || opts.cellText !== false) && p.t !== 'z') try {
|
||||
if(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || "General", fmtid);
|
||||
if(p.t === 'e') p.w = p.w || BErr[p.v];
|
||||
else if(fmtid === 0) {
|
||||
|
@ -20526,7 +20528,7 @@ var write_content_ods/*:{(wb:any, opts:any):string}*/ = (function() {
|
|||
return escapexml(text)
|
||||
.replace(/ +/g, function($$){return '<text:s text:c="'+$$.length+'"/>';})
|
||||
.replace(/\t/g, "<text:tab/>")
|
||||
.replace(/\n/g, "<text:line-break/>")
|
||||
.replace(/\n/g, "</text:p><text:p>")
|
||||
.replace(/^ /, "<text:s/>").replace(/ $/, "<text:s/>");
|
||||
};
|
||||
|
||||
|
|
50
xlsx.flow.js
50
xlsx.flow.js
|
@ -4,7 +4,7 @@
|
|||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
|
||||
var XLSX = {};
|
||||
function make_xlsx_lib(XLSX){
|
||||
XLSX.version = '0.17.1';
|
||||
XLSX.version = '0.17.2';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
/*:: declare var cptable:any; */
|
||||
/*global cptable:true, window */
|
||||
|
@ -2939,7 +2939,8 @@ function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(o.length
|
|||
/* TODO: stress test */
|
||||
function fuzzynum(s/*:string*/)/*:number*/ {
|
||||
var v/*:number*/ = Number(s);
|
||||
if(!isNaN(v)) return v;
|
||||
if(isFinite(v)) return v;
|
||||
if(!isNaN(v)) return NaN;
|
||||
if(!/\d/.test(s)) return v;
|
||||
var wt = 1;
|
||||
var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";});
|
||||
|
@ -6902,6 +6903,20 @@ function parse_ColInfo(blob, length, opts) {
|
|||
if(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;
|
||||
return o;
|
||||
}
|
||||
function write_ColInfo(col, idx) {
|
||||
var o = new_buf(12);
|
||||
o.write_shift(2, idx);
|
||||
o.write_shift(2, idx);
|
||||
o.write_shift(2, col.width * 256);
|
||||
o.write_shift(2, 0);
|
||||
var f = 0;
|
||||
if(col.hidden) f |= 1;
|
||||
o.write_shift(1, f);
|
||||
f = col.level || 0;
|
||||
o.write_shift(1, f);
|
||||
o.write_shift(2, 0);
|
||||
return o;
|
||||
}
|
||||
|
||||
/* [MS-XLS] 2.4.257 */
|
||||
function parse_Setup(blob, length) {
|
||||
|
@ -7881,7 +7896,7 @@ var PRN = (function() {
|
|||
}
|
||||
else sep = guess_sep(str.slice(0,1024));
|
||||
var R = 0, C = 0, v = 0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);
|
||||
str = str.replace(/\r\n/mg, "\n");
|
||||
var _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;
|
||||
function finish_cell() {
|
||||
|
@ -7913,13 +7928,13 @@ var PRN = (function() {
|
|||
if(cell.t == 'z'){}
|
||||
else if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }
|
||||
else ws[encode_cell({c:C,r:R})] = cell;
|
||||
start = end+1;
|
||||
start = end+1; startcc = str.charCodeAt(start);
|
||||
if(range.e.c < C) range.e.c = C;
|
||||
if(range.e.r < R) range.e.r = R;
|
||||
if(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }
|
||||
}
|
||||
outer: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {
|
||||
case 0x22: instr = !instr; break;
|
||||
case 0x22: if(startcc === 0x22) instr = !instr; break;
|
||||
case sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;
|
||||
default: break;
|
||||
}
|
||||
|
@ -9422,7 +9437,7 @@ function parse_cellXfs(t, styles, opts) {
|
|||
xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);
|
||||
for(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])
|
||||
xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);
|
||||
if(xf.numFmtId > 0x188) {
|
||||
if(styles.NumberFmt && xf.numFmtId > 0x188) {
|
||||
for(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }
|
||||
}
|
||||
styles.CellXf.push(xf); break;
|
||||
|
@ -10536,7 +10551,7 @@ function parse_comments_xml(data/*:string*/, opts)/*:Array<RawComment>*/ {
|
|||
var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:"",t:"",h:""};
|
||||
comment.r = rt.r;
|
||||
if(rt.r == "<t></t>") rt.t = rt.h = "";
|
||||
comment.t = rt.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n");
|
||||
comment.t = (rt.t||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n");
|
||||
if(opts.cellHTML) comment.h = rt.h;
|
||||
commentList.push(comment);
|
||||
});
|
||||
|
@ -11647,7 +11662,7 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
|
|||
if(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;
|
||||
else if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;
|
||||
else {
|
||||
var ixtidata = get_ixti_raw(supbooks, bookidx, opts).split(";;");
|
||||
var ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||"").split(";;");
|
||||
if(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct
|
||||
else o += "SH33TJSERRX";
|
||||
}
|
||||
|
@ -13318,9 +13333,9 @@ function safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, the
|
|||
try {
|
||||
if(opts.cellNF) p.z = SSF._table[fmtid];
|
||||
} catch(e) { if(opts.WTF) throw e; }
|
||||
if(p.t === 'z') return;
|
||||
if(p.t === 'z' && !opts.cellStyles) return;
|
||||
if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
|
||||
if(!opts || opts.cellText !== false) try {
|
||||
if((!opts || opts.cellText !== false) && p.t !== 'z') try {
|
||||
if(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || "General", fmtid);
|
||||
if(p.t === 'e') p.w = p.w || BErr[p.v];
|
||||
else if(fmtid === 0) {
|
||||
|
@ -15747,7 +15762,6 @@ function write_BrtFileVersion(data, o) {
|
|||
write_XLWideString(XLSX.version, o);
|
||||
write_XLWideString(XLSX.version, o);
|
||||
write_XLWideString("7262", o);
|
||||
o.length = o.l;
|
||||
return o.length > o.l ? o.slice(0, o.l) : o;
|
||||
}
|
||||
|
||||
|
@ -19550,6 +19564,16 @@ function write_ws_biff8_hlinks(ba/*:BufArray*/, ws) {
|
|||
delete ws['!links'];
|
||||
}
|
||||
|
||||
function write_ws_cols_biff8(ba, cols, ws) {
|
||||
if(!cols) return;
|
||||
var cnt = 0;
|
||||
cols.forEach(function(col, idx) {
|
||||
if(++cnt <= 256 && col) {
|
||||
write_biff_rec(ba, "ColInfo", write_ColInfo(col_obj_w(idx, col), idx));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function write_ws_biff8_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts) {
|
||||
var os = 16 + get_cell_style(opts.cellXfs, cell, opts);
|
||||
if(cell.v == null && !cell.bf) {
|
||||
|
@ -19613,6 +19637,8 @@ function write_ws_biff8(idx/*:number*/, opts, wb/*:Workbook*/) {
|
|||
write_biff_rec(ba, "HCenter", writebool(false));
|
||||
write_biff_rec(ba, "VCenter", writebool(false));
|
||||
/* ... */
|
||||
if(b8) write_ws_cols_biff8(ba, ws["!cols"], ws);
|
||||
/* ... */
|
||||
write_biff_rec(ba, 0x200, write_Dimensions(range, opts));
|
||||
/* ... */
|
||||
|
||||
|
@ -20579,7 +20605,7 @@ var write_content_ods/*:{(wb:any, opts:any):string}*/ = (function() {
|
|||
return escapexml(text)
|
||||
.replace(/ +/g, function($$){return '<text:s text:c="'+$$.length+'"/>';})
|
||||
.replace(/\t/g, "<text:tab/>")
|
||||
.replace(/\n/g, "<text:line-break/>")
|
||||
.replace(/\n/g, "</text:p><text:p>")
|
||||
.replace(/^ /, "<text:s/>").replace(/ $/, "<text:s/>");
|
||||
};
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
|
||||
var XLSX = {};
|
||||
function make_xlsx_lib(XLSX){
|
||||
XLSX.version = '0.17.1';
|
||||
XLSX.version = '0.17.2';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
/*global cptable:true, window */
|
||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
|
||||
|
@ -2859,7 +2859,8 @@ function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; }
|
|||
/* TODO: stress test */
|
||||
function fuzzynum(s) {
|
||||
var v = Number(s);
|
||||
if(!isNaN(v)) return v;
|
||||
if(isFinite(v)) return v;
|
||||
if(!isNaN(v)) return NaN;
|
||||
if(!/\d/.test(s)) return v;
|
||||
var wt = 1;
|
||||
var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";});
|
||||
|
@ -6805,6 +6806,20 @@ function parse_ColInfo(blob, length, opts) {
|
|||
if(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;
|
||||
return o;
|
||||
}
|
||||
function write_ColInfo(col, idx) {
|
||||
var o = new_buf(12);
|
||||
o.write_shift(2, idx);
|
||||
o.write_shift(2, idx);
|
||||
o.write_shift(2, col.width * 256);
|
||||
o.write_shift(2, 0);
|
||||
var f = 0;
|
||||
if(col.hidden) f |= 1;
|
||||
o.write_shift(1, f);
|
||||
f = col.level || 0;
|
||||
o.write_shift(1, f);
|
||||
o.write_shift(2, 0);
|
||||
return o;
|
||||
}
|
||||
|
||||
/* [MS-XLS] 2.4.257 */
|
||||
function parse_Setup(blob, length) {
|
||||
|
@ -7783,7 +7798,7 @@ var PRN = (function() {
|
|||
}
|
||||
else sep = guess_sep(str.slice(0,1024));
|
||||
var R = 0, C = 0, v = 0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);
|
||||
str = str.replace(/\r\n/mg, "\n");
|
||||
var _re = o.dateNF != null ? dateNF_regex(o.dateNF) : null;
|
||||
function finish_cell() {
|
||||
|
@ -7815,13 +7830,13 @@ var PRN = (function() {
|
|||
if(cell.t == 'z'){}
|
||||
else if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }
|
||||
else ws[encode_cell({c:C,r:R})] = cell;
|
||||
start = end+1;
|
||||
start = end+1; startcc = str.charCodeAt(start);
|
||||
if(range.e.c < C) range.e.c = C;
|
||||
if(range.e.r < R) range.e.r = R;
|
||||
if(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }
|
||||
}
|
||||
outer: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {
|
||||
case 0x22: instr = !instr; break;
|
||||
case 0x22: if(startcc === 0x22) instr = !instr; break;
|
||||
case sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;
|
||||
default: break;
|
||||
}
|
||||
|
@ -9323,7 +9338,7 @@ function parse_cellXfs(t, styles, opts) {
|
|||
xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);
|
||||
for(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])
|
||||
xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);
|
||||
if(xf.numFmtId > 0x188) {
|
||||
if(styles.NumberFmt && xf.numFmtId > 0x188) {
|
||||
for(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }
|
||||
}
|
||||
styles.CellXf.push(xf); break;
|
||||
|
@ -10435,7 +10450,7 @@ function parse_comments_xml(data, opts) {
|
|||
var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:"",t:"",h:""};
|
||||
comment.r = rt.r;
|
||||
if(rt.r == "<t></t>") rt.t = rt.h = "";
|
||||
comment.t = rt.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n");
|
||||
comment.t = (rt.t||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n");
|
||||
if(opts.cellHTML) comment.h = rt.h;
|
||||
commentList.push(comment);
|
||||
});
|
||||
|
@ -11545,7 +11560,7 @@ ixti = f[1][1]; r = f[1][2];
|
|||
if(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;
|
||||
else if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;
|
||||
else {
|
||||
var ixtidata = get_ixti_raw(supbooks, bookidx, opts).split(";;");
|
||||
var ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||"").split(";;");
|
||||
if(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct
|
||||
else o += "SH33TJSERRX";
|
||||
}
|
||||
|
@ -13216,9 +13231,9 @@ function safe_format(p, fmtid, fillid, opts, themes, styles) {
|
|||
try {
|
||||
if(opts.cellNF) p.z = SSF._table[fmtid];
|
||||
} catch(e) { if(opts.WTF) throw e; }
|
||||
if(p.t === 'z') return;
|
||||
if(p.t === 'z' && !opts.cellStyles) return;
|
||||
if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
|
||||
if(!opts || opts.cellText !== false) try {
|
||||
if((!opts || opts.cellText !== false) && p.t !== 'z') try {
|
||||
if(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || "General", fmtid);
|
||||
if(p.t === 'e') p.w = p.w || BErr[p.v];
|
||||
else if(fmtid === 0) {
|
||||
|
@ -15642,7 +15657,6 @@ function write_BrtFileVersion(data, o) {
|
|||
write_XLWideString(XLSX.version, o);
|
||||
write_XLWideString(XLSX.version, o);
|
||||
write_XLWideString("7262", o);
|
||||
o.length = o.l;
|
||||
return o.length > o.l ? o.slice(0, o.l) : o;
|
||||
}
|
||||
|
||||
|
@ -19432,6 +19446,16 @@ function write_ws_biff8_hlinks(ba, ws) {
|
|||
delete ws['!links'];
|
||||
}
|
||||
|
||||
function write_ws_cols_biff8(ba, cols, ws) {
|
||||
if(!cols) return;
|
||||
var cnt = 0;
|
||||
cols.forEach(function(col, idx) {
|
||||
if(++cnt <= 256 && col) {
|
||||
write_biff_rec(ba, "ColInfo", write_ColInfo(col_obj_w(idx, col), idx));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function write_ws_biff8_cell(ba, cell, R, C, opts) {
|
||||
var os = 16 + get_cell_style(opts.cellXfs, cell, opts);
|
||||
if(cell.v == null && !cell.bf) {
|
||||
|
@ -19495,6 +19519,8 @@ function write_ws_biff8(idx, opts, wb) {
|
|||
write_biff_rec(ba, "HCenter", writebool(false));
|
||||
write_biff_rec(ba, "VCenter", writebool(false));
|
||||
/* ... */
|
||||
if(b8) write_ws_cols_biff8(ba, ws["!cols"], ws);
|
||||
/* ... */
|
||||
write_biff_rec(ba, 0x200, write_Dimensions(range, opts));
|
||||
/* ... */
|
||||
|
||||
|
@ -20461,7 +20487,7 @@ var write_content_ods = (function() {
|
|||
return escapexml(text)
|
||||
.replace(/ +/g, function($$){return '<text:s text:c="'+$$.length+'"/>';})
|
||||
.replace(/\t/g, "<text:tab/>")
|
||||
.replace(/\n/g, "<text:line-break/>")
|
||||
.replace(/\n/g, "</text:p><text:p>")
|
||||
.replace(/^ /, "<text:s/>").replace(/ $/, "<text:s/>");
|
||||
};
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
|
||||
var XLSX = {};
|
||||
function make_xlsx_lib(XLSX){
|
||||
XLSX.version = '0.17.1';
|
||||
XLSX.version = '0.17.2';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
|
||||
var VALID_ANSI = [ 874, 932, 936, 949, 950 ];
|
||||
|
@ -2917,7 +2917,8 @@ function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(o.length
|
|||
/* TODO: stress test */
|
||||
function fuzzynum(s/*:string*/)/*:number*/ {
|
||||
var v/*:number*/ = Number(s);
|
||||
if(!isNaN(v)) return v;
|
||||
if(isFinite(v)) return v;
|
||||
if(!isNaN(v)) return NaN;
|
||||
if(!/\d/.test(s)) return v;
|
||||
var wt = 1;
|
||||
var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";});
|
||||
|
@ -3010,6 +3011,7 @@ function zip_add_file(zip, path, content) {
|
|||
else zip.file(path, content);
|
||||
}
|
||||
|
||||
var jszip;
|
||||
|
||||
function zip_new() {
|
||||
return CFB.utils.cfb_new();
|
||||
|
@ -5642,7 +5644,7 @@ var PRN = (function() {
|
|||
}
|
||||
else sep = guess_sep(str.slice(0,1024));
|
||||
var R = 0, C = 0, v = 0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);
|
||||
str = str.replace(/\r\n/mg, "\n");
|
||||
var _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;
|
||||
function finish_cell() {
|
||||
|
@ -5674,13 +5676,13 @@ var PRN = (function() {
|
|||
if(cell.t == 'z'){}
|
||||
else if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }
|
||||
else ws[encode_cell({c:C,r:R})] = cell;
|
||||
start = end+1;
|
||||
start = end+1; startcc = str.charCodeAt(start);
|
||||
if(range.e.c < C) range.e.c = C;
|
||||
if(range.e.r < R) range.e.r = R;
|
||||
if(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }
|
||||
}
|
||||
outer: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {
|
||||
case 0x22: instr = !instr; break;
|
||||
case 0x22: if(startcc === 0x22) instr = !instr; break;
|
||||
case sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;
|
||||
default: break;
|
||||
}
|
||||
|
@ -6434,7 +6436,7 @@ function parse_cellXfs(t, styles, opts) {
|
|||
xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);
|
||||
for(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])
|
||||
xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);
|
||||
if(xf.numFmtId > 0x188) {
|
||||
if(styles.NumberFmt && xf.numFmtId > 0x188) {
|
||||
for(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }
|
||||
}
|
||||
styles.CellXf.push(xf); break;
|
||||
|
@ -7012,7 +7014,7 @@ function parse_comments_xml(data/*:string*/, opts)/*:Array<RawComment>*/ {
|
|||
var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:"",t:"",h:""};
|
||||
comment.r = rt.r;
|
||||
if(rt.r == "<t></t>") rt.t = rt.h = "";
|
||||
comment.t = rt.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n");
|
||||
comment.t = (rt.t||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n");
|
||||
if(opts.cellHTML) comment.h = rt.h;
|
||||
commentList.push(comment);
|
||||
});
|
||||
|
@ -7223,9 +7225,9 @@ function safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, the
|
|||
try {
|
||||
if(opts.cellNF) p.z = SSF._table[fmtid];
|
||||
} catch(e) { if(opts.WTF) throw e; }
|
||||
if(p.t === 'z') return;
|
||||
if(p.t === 'z' && !opts.cellStyles) return;
|
||||
if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
|
||||
if(!opts || opts.cellText !== false) try {
|
||||
if((!opts || opts.cellText !== false) && p.t !== 'z') try {
|
||||
if(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || "General", fmtid);
|
||||
if(p.t === 'e') p.w = p.w || BErr[p.v];
|
||||
else if(fmtid === 0) {
|
||||
|
@ -9336,7 +9338,7 @@ var write_content_ods/*:{(wb:any, opts:any):string}*/ = (function() {
|
|||
return escapexml(text)
|
||||
.replace(/ +/g, function($$){return '<text:s text:c="'+$$.length+'"/>';})
|
||||
.replace(/\t/g, "<text:tab/>")
|
||||
.replace(/\n/g, "<text:line-break/>")
|
||||
.replace(/\n/g, "</text:p><text:p>")
|
||||
.replace(/^ /, "<text:s/>").replace(/ $/, "<text:s/>");
|
||||
};
|
||||
|
||||
|
|
22
xlsx.mini.js
22
xlsx.mini.js
|
@ -4,7 +4,7 @@
|
|||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
|
||||
var XLSX = {};
|
||||
function make_xlsx_lib(XLSX){
|
||||
XLSX.version = '0.17.1';
|
||||
XLSX.version = '0.17.2';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
|
||||
var VALID_ANSI = [ 874, 932, 936, 949, 950 ];
|
||||
|
@ -2838,7 +2838,8 @@ function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; }
|
|||
/* TODO: stress test */
|
||||
function fuzzynum(s) {
|
||||
var v = Number(s);
|
||||
if(!isNaN(v)) return v;
|
||||
if(isFinite(v)) return v;
|
||||
if(!isNaN(v)) return NaN;
|
||||
if(!/\d/.test(s)) return v;
|
||||
var wt = 1;
|
||||
var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";});
|
||||
|
@ -2931,6 +2932,7 @@ function zip_add_file(zip, path, content) {
|
|||
else zip.file(path, content);
|
||||
}
|
||||
|
||||
var jszip;
|
||||
|
||||
function zip_new() {
|
||||
return CFB.utils.cfb_new();
|
||||
|
@ -5551,7 +5553,7 @@ var PRN = (function() {
|
|||
}
|
||||
else sep = guess_sep(str.slice(0,1024));
|
||||
var R = 0, C = 0, v = 0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);
|
||||
str = str.replace(/\r\n/mg, "\n");
|
||||
var _re = o.dateNF != null ? dateNF_regex(o.dateNF) : null;
|
||||
function finish_cell() {
|
||||
|
@ -5583,13 +5585,13 @@ var PRN = (function() {
|
|||
if(cell.t == 'z'){}
|
||||
else if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }
|
||||
else ws[encode_cell({c:C,r:R})] = cell;
|
||||
start = end+1;
|
||||
start = end+1; startcc = str.charCodeAt(start);
|
||||
if(range.e.c < C) range.e.c = C;
|
||||
if(range.e.r < R) range.e.r = R;
|
||||
if(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }
|
||||
}
|
||||
outer: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {
|
||||
case 0x22: instr = !instr; break;
|
||||
case 0x22: if(startcc === 0x22) instr = !instr; break;
|
||||
case sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;
|
||||
default: break;
|
||||
}
|
||||
|
@ -6343,7 +6345,7 @@ function parse_cellXfs(t, styles, opts) {
|
|||
xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);
|
||||
for(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])
|
||||
xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);
|
||||
if(xf.numFmtId > 0x188) {
|
||||
if(styles.NumberFmt && xf.numFmtId > 0x188) {
|
||||
for(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }
|
||||
}
|
||||
styles.CellXf.push(xf); break;
|
||||
|
@ -6921,7 +6923,7 @@ function parse_comments_xml(data, opts) {
|
|||
var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:"",t:"",h:""};
|
||||
comment.r = rt.r;
|
||||
if(rt.r == "<t></t>") rt.t = rt.h = "";
|
||||
comment.t = rt.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n");
|
||||
comment.t = (rt.t||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n");
|
||||
if(opts.cellHTML) comment.h = rt.h;
|
||||
commentList.push(comment);
|
||||
});
|
||||
|
@ -7132,9 +7134,9 @@ function safe_format(p, fmtid, fillid, opts, themes, styles) {
|
|||
try {
|
||||
if(opts.cellNF) p.z = SSF._table[fmtid];
|
||||
} catch(e) { if(opts.WTF) throw e; }
|
||||
if(p.t === 'z') return;
|
||||
if(p.t === 'z' && !opts.cellStyles) return;
|
||||
if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
|
||||
if(!opts || opts.cellText !== false) try {
|
||||
if((!opts || opts.cellText !== false) && p.t !== 'z') try {
|
||||
if(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || "General", fmtid);
|
||||
if(p.t === 'e') p.w = p.w || BErr[p.v];
|
||||
else if(fmtid === 0) {
|
||||
|
@ -9243,7 +9245,7 @@ var write_content_ods = (function() {
|
|||
return escapexml(text)
|
||||
.replace(/ +/g, function($$){return '<text:s text:c="'+$$.length+'"/>';})
|
||||
.replace(/\t/g, "<text:tab/>")
|
||||
.replace(/\n/g, "<text:line-break/>")
|
||||
.replace(/\n/g, "</text:p><text:p>")
|
||||
.replace(/^ /, "<text:s/>").replace(/ $/, "<text:s/>");
|
||||
};
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
/*exported XLSX */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
|
||||
var XLSX = {};
|
||||
XLSX.version = '0.17.1';
|
||||
XLSX.version = '0.17.2';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
|
||||
var VALID_ANSI = [ 874, 932, 936, 949, 950 ];
|
||||
|
@ -2915,7 +2915,8 @@ function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(o.length
|
|||
/* TODO: stress test */
|
||||
function fuzzynum(s/*:string*/)/*:number*/ {
|
||||
var v/*:number*/ = Number(s);
|
||||
if(!isNaN(v)) return v;
|
||||
if(isFinite(v)) return v;
|
||||
if(!isNaN(v)) return NaN;
|
||||
if(!/\d/.test(s)) return v;
|
||||
var wt = 1;
|
||||
var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";});
|
||||
|
@ -3008,6 +3009,7 @@ function zip_add_file(zip, path, content) {
|
|||
else zip.file(path, content);
|
||||
}
|
||||
|
||||
var jszip;
|
||||
|
||||
function zip_new() {
|
||||
return CFB.utils.cfb_new();
|
||||
|
@ -7817,7 +7819,7 @@ var PRN = (function() {
|
|||
}
|
||||
else sep = guess_sep(str.slice(0,1024));
|
||||
var R = 0, C = 0, v = 0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);
|
||||
str = str.replace(/\r\n/mg, "\n");
|
||||
var _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;
|
||||
function finish_cell() {
|
||||
|
@ -7849,13 +7851,13 @@ var PRN = (function() {
|
|||
if(cell.t == 'z'){}
|
||||
else if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }
|
||||
else ws[encode_cell({c:C,r:R})] = cell;
|
||||
start = end+1;
|
||||
start = end+1; startcc = str.charCodeAt(start);
|
||||
if(range.e.c < C) range.e.c = C;
|
||||
if(range.e.r < R) range.e.r = R;
|
||||
if(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }
|
||||
}
|
||||
outer: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {
|
||||
case 0x22: instr = !instr; break;
|
||||
case 0x22: if(startcc === 0x22) instr = !instr; break;
|
||||
case sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;
|
||||
default: break;
|
||||
}
|
||||
|
@ -9358,7 +9360,7 @@ function parse_cellXfs(t, styles, opts) {
|
|||
xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);
|
||||
for(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])
|
||||
xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);
|
||||
if(xf.numFmtId > 0x188) {
|
||||
if(styles.NumberFmt && xf.numFmtId > 0x188) {
|
||||
for(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }
|
||||
}
|
||||
styles.CellXf.push(xf); break;
|
||||
|
@ -11583,7 +11585,7 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
|
|||
if(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;
|
||||
else if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;
|
||||
else {
|
||||
var ixtidata = get_ixti_raw(supbooks, bookidx, opts).split(";;");
|
||||
var ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||"").split(";;");
|
||||
if(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct
|
||||
else o += "SH33TJSERRX";
|
||||
}
|
||||
|
@ -13254,9 +13256,9 @@ function safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, the
|
|||
try {
|
||||
if(opts.cellNF) p.z = SSF._table[fmtid];
|
||||
} catch(e) { if(opts.WTF) throw e; }
|
||||
if(p.t === 'z') return;
|
||||
if(p.t === 'z' && !opts.cellStyles) return;
|
||||
if(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);
|
||||
if(!opts || opts.cellText !== false) try {
|
||||
if((!opts || opts.cellText !== false) && p.t !== 'z') try {
|
||||
if(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || "General", fmtid);
|
||||
if(p.t === 'e') p.w = p.w || BErr[p.v];
|
||||
else if(fmtid === 0) {
|
||||
|
@ -20526,7 +20528,7 @@ var write_content_ods/*:{(wb:any, opts:any):string}*/ = (function() {
|
|||
return escapexml(text)
|
||||
.replace(/ +/g, function($$){return '<text:s text:c="'+$$.length+'"/>';})
|
||||
.replace(/\t/g, "<text:tab/>")
|
||||
.replace(/\n/g, "<text:line-break/>")
|
||||
.replace(/\n/g, "</text:p><text:p>")
|
||||
.replace(/^ /, "<text:s/>").replace(/ $/, "<text:s/>");
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue