Skip to content

Commit 29842ac

Browse files
committed
updating to XLS 0.6.17, XLSX 0.6.1
test script modified to avoid temporary "var foo = ..." statements
1 parent 0f23adf commit 29842ac

File tree

2 files changed

+40
-11
lines changed

2 files changed

+40
-11
lines changed

assets/js/xlsx.js

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
/*jshint eqnull:true */
44
var XLSX = {};
55
(function(XLSX){
6-
XLSX.version = '0.6.0';
6+
XLSX.version = '0.6.1';
77
/* ssf.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
88
var SSF = {};
99
var make_ssf = function(SSF){
@@ -111,7 +111,7 @@ var general_fmt = function(v) {
111111
}
112112
else {
113113
o = v.toFixed(11).replace(/(\.[0-9]*[1-9])0*$/,"$1");
114-
if(o.length > 11 + (v<0?1:0)) o = v.toPrecision(6);
114+
if(o.length > 11 + (v<0?1:0)) o = v.toPrecision(6);
115115
}
116116
o = o.replace(/(\.[0-9]*[1-9])0+e/,"$1e").replace(/\.0*e/,"e");
117117
return o.replace("e","E").replace(/\.0*$/,"").replace(/\.([0-9]*[^0])0*$/,".$1").replace(/(E[+-])([0-9])$/,"$1"+"0"+"$2");
@@ -223,7 +223,7 @@ var write_num = function(type, fmt, val) {
223223
if(fmt.indexOf("E") > -1) {
224224
var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
225225
if(fmt.match(/^#+0.0E\+0$/)) {
226-
var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
226+
var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
227227
var ee = (Number(val.toExponential(0).substr(2+(val<0))))%period;
228228
if(ee < 0) ee += period;
229229
o = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);
@@ -841,12 +841,36 @@ function parse_FontFlags(data, length) {
841841
};
842842
return out;
843843
}
844+
/* 18.4.1 charset to codepage mapping */
845+
var CS2CP = {
846+
0: 1252, /* ANSI */
847+
1: 65001, /* DEFAULT */
848+
2: 65001, /* SYMBOL */
849+
77: 10000, /* MAC */
850+
128: 932, /* SHIFTJIS */
851+
129: 949, /* HANGUL */
852+
130: 1361, /* JOHAB */
853+
134: 936, /* GB2312 */
854+
136: 950, /* CHINESEBIG5 */
855+
161: 1253, /* GREEK */
856+
162: 1254, /* TURKISH */
857+
163: 1258, /* VIETNAMESE */
858+
177: 1255, /* HEBREW */
859+
178: 1256, /* ARABIC */
860+
186: 1257, /* BALTIC */
861+
204: 1251, /* RUSSIAN */
862+
222: 874, /* THAI */
863+
238: 1250, /* EASTEUROPE */
864+
255: 1252, /* OEM */
865+
69: 6969 /* MISC */
866+
};
867+
844868
/* Parse a list of <r> tags */
845869
var parse_rs = (function() {
846870
var tregex = matchtag("t"), rpregex = matchtag("rPr");
847871
/* 18.4.7 rPr CT_RPrElt */
848872
var parse_rpr = function(rpr, intro, outro) {
849-
var font = {};
873+
var font = {}, cp = 65001;
850874
(rpr.match(/<[^>]*>/g)||[]).forEach(function(x) {
851875
var y = parsexmltag(x);
852876
switch(y[0]) {
@@ -863,7 +887,10 @@ var parse_rs = (function() {
863887
case '<shadow/>': break;
864888

865889
/* 18.4.1 charset CT_IntProperty TODO */
866-
case '<charset': break;
890+
case '<charset':
891+
if(y.val == '1') break;
892+
cp = CS2CP[parseInt(y.val, 10)];
893+
break;
867894

868895
/* 18.4.2 outline CT_BooleanProperty TODO */
869896
case '<outline':
@@ -928,18 +955,20 @@ var parse_rs = (function() {
928955
if(font.i) style.push("font-style: italic;");
929956
intro.push('<span style="' + style.join("") + '">');
930957
outro.push("</span>");
958+
return cp;
931959
};
932960

933961
/* 18.4.4 r CT_RElt */
934962
function parse_r(r) {
935963
var terms = [[],"",[]];
936964
/* 18.4.12 t ST_Xstring */
937-
var t = r.match(tregex);
965+
var t = r.match(tregex), cp = 65001;
938966
if(!isval(t)) return "";
939967
terms[1] = t[1];
940968

941969
var rpr = r.match(rpregex);
942-
if(isval(rpr)) parse_rpr(rpr[1], terms[0], terms[2]);
970+
if(isval(rpr)) cp = parse_rpr(rpr[1], terms[0], terms[2]);
971+
943972
return terms[0].join("") + terms[1].replace(/\r\n/g,'<br/>') + terms[2].join("");
944973
}
945974
return function(rs) {
@@ -1016,7 +1045,7 @@ function parseNumFmts(t, opts) {
10161045
switch(y[0]) {
10171046
case '<numFmts': case '</numFmts>': case '<numFmts/>': break;
10181047
case '<numFmt': {
1019-
var f=unescapexml(y.formatCode), i=parseInt(y.numFmtId,10);
1048+
var f=utf8read(unescapexml(y.formatCode)), i=parseInt(y.numFmtId,10);
10201049
styles.NumberFmt[i] = f; if(i>0) SSF.load(f,i);
10211050
} break;
10221051
default: if(opts.WTF) throw 'unrecognized ' + y[0] + ' in numFmts';

tests/test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,21 @@ function parsetest(x, wb) {
99
describe(x + ' should generate CSV', function() {
1010
wb.SheetNames.forEach(function(ws, i) {
1111
it('#' + i + ' (' + ws + ')', function() {
12-
var csv = (x.substr(-1)=="s"?XLS:XLSX).utils.make_csv(wb.Sheets[ws]);
12+
(x.substr(-1)=="s"?XLS:XLSX).utils.make_csv(wb.Sheets[ws]);
1313
});
1414
});
1515
});
1616
describe(x + ' should generate JSON', function() {
1717
wb.SheetNames.forEach(function(ws, i) {
1818
it('#' + i + ' (' + ws + ')', function() {
19-
var json = (x.substr(-1)=="s"?XLS:XLSX).utils.sheet_to_row_object_array(wb.Sheets[ws]);
19+
(x.substr(-1)=="s"?XLS:XLSX).utils.sheet_to_row_object_array(wb.Sheets[ws]);
2020
});
2121
});
2222
});
2323
describe(x + ' should generate formulae', function() {
2424
wb.SheetNames.forEach(function(ws, i) {
2525
it('#' + i + ' (' + ws + ')', function() {
26-
var json = (x.substr(-1)=="s"?XLS:XLSX).utils.get_formulae(wb.Sheets[ws]);
26+
(x.substr(-1)=="s"?XLS:XLSX).utils.get_formulae(wb.Sheets[ws]);
2727
});
2828
});
2929
});

0 commit comments

Comments
 (0)