Skip to content

Commit f603618

Browse files
committed
Omit value for empty cells with styles
1 parent c86472d commit f603618

File tree

9 files changed

+179
-169
lines changed

9 files changed

+179
-169
lines changed

bits/67_wsxml.js

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) {
169169
vv = cell.v;
170170
break;
171171
}
172-
var v = writetag('v', escapexml(vv)), o = {r: ref};
172+
var v = (cell.v !== undefined) ? writetag('v', escapexml(vv)) : null, o = {r: ref};
173173
/* TODO: cell style */
174174
var os = get_cell_style(opts.cellXfs, cell, opts);
175175
if (os !== 0) o.s = os;
@@ -187,7 +187,7 @@ function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) {
187187
break;
188188
default:
189189
if (opts.bookSST) {
190-
v = writetag('v', '' + get_sst_id(opts.Strings, cell.v));
190+
v = cell.v !== undefined ? writetag('v', '' + get_sst_id(opts.Strings, cell.v)) : null;
191191
o.t = "s";
192192
break;
193193
}
@@ -258,53 +258,55 @@ var parse_ws_xml_data = (function parse_ws_xml_data_factory() {
258258
if (opts.cellFormula && (cref = d.match(match_f)) !== null) p.f = unescapexml(cref[1]);
259259

260260
/* SCHEMA IS ACTUALLY INCORRECT HERE. IF A CELL HAS NO T, EMIT "" */
261-
if (tag.t === undefined && tag.s === undefined && p.v === undefined) {
261+
if (tag.t === undefined && tag.s === undefined) {
262262
if (!opts.sheetStubs) continue;
263263
p.t = "stub";
264264
}
265265
else p.t = tag.t || "n";
266266
if (guess.s.c > idx) guess.s.c = idx;
267267
if (guess.e.c < idx) guess.e.c = idx;
268268
/* 18.18.11 t ST_CellType */
269-
switch (p.t) {
270-
case 'n':
271-
p.v = parseFloat(p.v);
272-
if (isNaN(p.v)) p.v = "" // we don't want NaN if p.v is null
273-
break;
274-
case 's':
275-
// if (!p.hasOwnProperty('v')) continue;
276-
sstr = strs[parseInt(p.v, 10)];
277-
p.v = sstr.t;
278-
p.r = sstr.r;
279-
if (opts.cellHTML) p.h = sstr.h;
280-
break;
281-
case 'str':
282-
p.t = "s";
283-
p.v = (p.v != null) ? utf8read(p.v) : '';
284-
if (opts.cellHTML) p.h = p.v;
285-
break;
286-
case 'inlineStr':
287-
cref = d.match(isregex);
288-
p.t = 's';
289-
if (cref !== null) {
290-
sstr = parse_si(cref[1]);
269+
if (p.v !== undefined) {
270+
switch (p.t) {
271+
case 'n':
272+
p.v = parseFloat(p.v);
273+
if (isNaN(p.v)) p.v = "" // we don't want NaN if p.v is null
274+
break;
275+
case 's':
276+
// if (!p.hasOwnProperty('v')) continue;
277+
sstr = strs[parseInt(p.v, 10)];
291278
p.v = sstr.t;
292-
} else p.v = "";
293-
break; // inline string
294-
case 'b':
295-
p.v = parsexmlbool(p.v);
296-
break;
297-
case 'd':
298-
if (!opts.cellDates) {
299-
p.v = datenum(p.v);
300-
p.t = 'n';
301-
}
302-
break;
303-
/* error string in .v, number in .v */
304-
case 'e':
305-
p.w = p.v;
306-
p.v = RBErr[p.v];
307-
break;
279+
p.r = sstr.r;
280+
if (opts.cellHTML) p.h = sstr.h;
281+
break;
282+
case 'str':
283+
p.t = "s";
284+
p.v = (p.v != null) ? utf8read(p.v) : '';
285+
if (opts.cellHTML) p.h = p.v;
286+
break;
287+
case 'inlineStr':
288+
cref = d.match(isregex);
289+
p.t = 's';
290+
if (cref !== null) {
291+
sstr = parse_si(cref[1]);
292+
p.v = sstr.t;
293+
} else p.v = "";
294+
break; // inline string
295+
case 'b':
296+
p.v = parsexmlbool(p.v);
297+
break;
298+
case 'd':
299+
if (!opts.cellDates) {
300+
p.v = datenum(p.v);
301+
p.t = 'n';
302+
}
303+
break;
304+
/* error string in .v, number in .v */
305+
case 'e':
306+
p.w = p.v;
307+
p.v = RBErr[p.v];
308+
break;
309+
}
308310
}
309311
/* formatting */
310312
fmtid = fillid = 0;

dist/xlsx.core.min.js

Lines changed: 14 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/xlsx.core.min.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/xlsx.full.min.js

Lines changed: 19 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/xlsx.full.min.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/xlsx.js

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -7707,7 +7707,7 @@ function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) {
77077707
vv = cell.v;
77087708
break;
77097709
}
7710-
var v = writetag('v', escapexml(vv)), o = {r: ref};
7710+
var v = (cell.v !== undefined) ? writetag('v', escapexml(vv)) : null, o = {r: ref};
77117711
/* TODO: cell style */
77127712
var os = get_cell_style(opts.cellXfs, cell, opts);
77137713
if (os !== 0) o.s = os;
@@ -7725,7 +7725,7 @@ function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) {
77257725
break;
77267726
default:
77277727
if (opts.bookSST) {
7728-
v = writetag('v', '' + get_sst_id(opts.Strings, cell.v));
7728+
v = cell.v !== undefined ? writetag('v', '' + get_sst_id(opts.Strings, cell.v)) : null;
77297729
o.t = "s";
77307730
break;
77317731
}
@@ -7796,54 +7796,58 @@ var parse_ws_xml_data = (function parse_ws_xml_data_factory() {
77967796
if (opts.cellFormula && (cref = d.match(match_f)) !== null) p.f = unescapexml(cref[1]);
77977797

77987798
/* SCHEMA IS ACTUALLY INCORRECT HERE. IF A CELL HAS NO T, EMIT "" */
7799-
if (tag.t === undefined && tag.s === undefined && p.v === undefined) {
7799+
if (tag.t === undefined && tag.s === undefined) {
78007800
if (!opts.sheetStubs) continue;
78017801
p.t = "stub";
78027802
}
78037803
else p.t = tag.t || "n";
78047804
if (guess.s.c > idx) guess.s.c = idx;
78057805
if (guess.e.c < idx) guess.e.c = idx;
7806+
78067807
/* 18.18.11 t ST_CellType */
7807-
switch (p.t) {
7808-
case 'n':
7809-
p.v = parseFloat(p.v);
7810-
if (isNaN(p.v)) p.v = "" // we don't want NaN if p.v is null
7811-
break;
7812-
case 's':
7813-
// if (!p.hasOwnProperty('v')) continue;
7814-
sstr = strs[parseInt(p.v, 10)];
7815-
p.v = sstr.t;
7816-
p.r = sstr.r;
7817-
if (opts.cellHTML) p.h = sstr.h;
7818-
break;
7819-
case 'str':
7820-
p.t = "s";
7821-
p.v = (p.v != null) ? utf8read(p.v) : '';
7822-
if (opts.cellHTML) p.h = p.v;
7823-
break;
7824-
case 'inlineStr':
7825-
cref = d.match(isregex);
7826-
p.t = 's';
7827-
if (cref !== null) {
7828-
sstr = parse_si(cref[1]);
7808+
if (p.v !== undefined) {
7809+
switch (p.t) {
7810+
case 'n':
7811+
p.v = parseFloat(p.v);
7812+
if (isNaN(p.v)) p.v = "" // we don't want NaN if p.v is null
7813+
break;
7814+
case 's':
7815+
// if (!p.hasOwnProperty('v')) continue;
7816+
sstr = strs[parseInt(p.v, 10)];
78297817
p.v = sstr.t;
7830-
} else p.v = "";
7831-
break; // inline string
7832-
case 'b':
7833-
p.v = parsexmlbool(p.v);
7834-
break;
7835-
case 'd':
7836-
if (!opts.cellDates) {
7837-
p.v = datenum(p.v);
7838-
p.t = 'n';
7839-
}
7840-
break;
7841-
/* error string in .v, number in .v */
7842-
case 'e':
7843-
p.w = p.v;
7844-
p.v = RBErr[p.v];
7845-
break;
7818+
p.r = sstr.r;
7819+
if (opts.cellHTML) p.h = sstr.h;
7820+
break;
7821+
case 'str':
7822+
p.t = "s";
7823+
p.v = (p.v != null) ? utf8read(p.v) : '';
7824+
if (opts.cellHTML) p.h = p.v;
7825+
break;
7826+
case 'inlineStr':
7827+
cref = d.match(isregex);
7828+
p.t = 's';
7829+
if (cref !== null) {
7830+
sstr = parse_si(cref[1]);
7831+
p.v = sstr.t;
7832+
} else p.v = "";
7833+
break; // inline string
7834+
case 'b':
7835+
p.v = parsexmlbool(p.v);
7836+
break;
7837+
case 'd':
7838+
if (!opts.cellDates) {
7839+
p.v = datenum(p.v);
7840+
p.t = 'n';
7841+
}
7842+
break;
7843+
/* error string in .v, number in .v */
7844+
case 'e':
7845+
p.w = p.v;
7846+
p.v = RBErr[p.v];
7847+
break;
7848+
}
78467849
}
7850+
78477851
/* formatting */
78487852
fmtid = fillid = 0;
78497853
if (do_format && tag.s !== undefined) {

dist/xlsx.min.js

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/xlsx.min.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

xlsx.js

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -7707,7 +7707,7 @@ function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) {
77077707
vv = cell.v;
77087708
break;
77097709
}
7710-
var v = writetag('v', escapexml(vv)), o = {r: ref};
7710+
var v = (cell.v !== undefined) ? writetag('v', escapexml(vv)) : null, o = {r: ref};
77117711
/* TODO: cell style */
77127712
var os = get_cell_style(opts.cellXfs, cell, opts);
77137713
if (os !== 0) o.s = os;
@@ -7725,7 +7725,7 @@ function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) {
77257725
break;
77267726
default:
77277727
if (opts.bookSST) {
7728-
v = writetag('v', '' + get_sst_id(opts.Strings, cell.v));
7728+
v = cell.v !== undefined ? writetag('v', '' + get_sst_id(opts.Strings, cell.v)) : null;
77297729
o.t = "s";
77307730
break;
77317731
}
@@ -7796,54 +7796,58 @@ var parse_ws_xml_data = (function parse_ws_xml_data_factory() {
77967796
if (opts.cellFormula && (cref = d.match(match_f)) !== null) p.f = unescapexml(cref[1]);
77977797

77987798
/* SCHEMA IS ACTUALLY INCORRECT HERE. IF A CELL HAS NO T, EMIT "" */
7799-
if (tag.t === undefined && tag.s === undefined && p.v === undefined) {
7799+
if (tag.t === undefined && tag.s === undefined) {
78007800
if (!opts.sheetStubs) continue;
78017801
p.t = "stub";
78027802
}
78037803
else p.t = tag.t || "n";
78047804
if (guess.s.c > idx) guess.s.c = idx;
78057805
if (guess.e.c < idx) guess.e.c = idx;
7806+
78067807
/* 18.18.11 t ST_CellType */
7807-
switch (p.t) {
7808-
case 'n':
7809-
p.v = parseFloat(p.v);
7810-
if (isNaN(p.v)) p.v = "" // we don't want NaN if p.v is null
7811-
break;
7812-
case 's':
7813-
// if (!p.hasOwnProperty('v')) continue;
7814-
sstr = strs[parseInt(p.v, 10)];
7815-
p.v = sstr.t;
7816-
p.r = sstr.r;
7817-
if (opts.cellHTML) p.h = sstr.h;
7818-
break;
7819-
case 'str':
7820-
p.t = "s";
7821-
p.v = (p.v != null) ? utf8read(p.v) : '';
7822-
if (opts.cellHTML) p.h = p.v;
7823-
break;
7824-
case 'inlineStr':
7825-
cref = d.match(isregex);
7826-
p.t = 's';
7827-
if (cref !== null) {
7828-
sstr = parse_si(cref[1]);
7808+
if (p.v !== undefined) {
7809+
switch (p.t) {
7810+
case 'n':
7811+
p.v = parseFloat(p.v);
7812+
if (isNaN(p.v)) p.v = "" // we don't want NaN if p.v is null
7813+
break;
7814+
case 's':
7815+
// if (!p.hasOwnProperty('v')) continue;
7816+
sstr = strs[parseInt(p.v, 10)];
78297817
p.v = sstr.t;
7830-
} else p.v = "";
7831-
break; // inline string
7832-
case 'b':
7833-
p.v = parsexmlbool(p.v);
7834-
break;
7835-
case 'd':
7836-
if (!opts.cellDates) {
7837-
p.v = datenum(p.v);
7838-
p.t = 'n';
7839-
}
7840-
break;
7841-
/* error string in .v, number in .v */
7842-
case 'e':
7843-
p.w = p.v;
7844-
p.v = RBErr[p.v];
7845-
break;
7818+
p.r = sstr.r;
7819+
if (opts.cellHTML) p.h = sstr.h;
7820+
break;
7821+
case 'str':
7822+
p.t = "s";
7823+
p.v = (p.v != null) ? utf8read(p.v) : '';
7824+
if (opts.cellHTML) p.h = p.v;
7825+
break;
7826+
case 'inlineStr':
7827+
cref = d.match(isregex);
7828+
p.t = 's';
7829+
if (cref !== null) {
7830+
sstr = parse_si(cref[1]);
7831+
p.v = sstr.t;
7832+
} else p.v = "";
7833+
break; // inline string
7834+
case 'b':
7835+
p.v = parsexmlbool(p.v);
7836+
break;
7837+
case 'd':
7838+
if (!opts.cellDates) {
7839+
p.v = datenum(p.v);
7840+
p.t = 'n';
7841+
}
7842+
break;
7843+
/* error string in .v, number in .v */
7844+
case 'e':
7845+
p.w = p.v;
7846+
p.v = RBErr[p.v];
7847+
break;
7848+
}
78467849
}
7850+
78477851
/* formatting */
78487852
fmtid = fillid = 0;
78497853
if (do_format && tag.s !== undefined) {

0 commit comments

Comments
 (0)