!rows processing (fixes #188)
based on comment from @sheetjsdev: https://github.com/SheetJS/js-xlsx/issues/81#issuecomment-48360276 fixes #81 h/t @neversaid
This commit is contained in:
parent
563efd88f1
commit
233eae2f4e
@ -89,6 +89,10 @@ function process_col(coll/*:ColInfo*/) {
|
||||
if(coll.customWidth) delete coll.customWidth;
|
||||
}
|
||||
|
||||
var DEF_DPI = 96, DPI = DEF_DPI;
|
||||
function px2pt(px) { return px * 72 / DPI; }
|
||||
function pt2px(pt) { return pt * DPI / 72; }
|
||||
|
||||
/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */
|
||||
var XLMLPatternTypeMap = {
|
||||
"None": "none",
|
||||
|
@ -292,7 +292,7 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) {
|
||||
}; })();
|
||||
|
||||
function write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/, rels)/*:string*/ {
|
||||
var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [], R=0, C=0;
|
||||
var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [], R=0, C=0, rows = ws['!rows'];
|
||||
for(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
|
||||
for(R = range.s.r; R <= range.e.r; ++R) {
|
||||
r = [];
|
||||
@ -302,7 +302,18 @@ function write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook
|
||||
if(ws[ref] === undefined) continue;
|
||||
if((cell = write_ws_xml_cell(ws[ref], ref, ws, opts, idx, wb)) != null) r.push(cell);
|
||||
}
|
||||
if(r.length > 0) o[o.length] = (writextag('row', r.join(""), {r:rr}));
|
||||
if(r.length > 0) {
|
||||
var params = {r:rr}
|
||||
if(rows && rows[R]) {
|
||||
var row = rows[R];
|
||||
if(row.hidden) params.hidden = 1;
|
||||
var height = -1;
|
||||
if (row.hpx) height = px2pt(row.hpx);
|
||||
else if (row.hpt) height = row.hpt;
|
||||
if (height > -1) { params.ht = height; params.customHeight = 1; }
|
||||
}
|
||||
o[o.length] = (writextag('row', r.join(""), params));
|
||||
}
|
||||
}
|
||||
return o.join("");
|
||||
}
|
||||
@ -324,7 +335,7 @@ function write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {
|
||||
o[o.length] = (writextag('dimension', null, {'ref': ref}));
|
||||
|
||||
/* TODO: store in WB, process styles */
|
||||
if(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {defaultRowHeight:opts.sheetFormat.defaultRowHeight||'16', baseColWidth:opts.sheetFormat.baseColWidth||'10' }))
|
||||
if(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {defaultRowHeight:opts.sheetFormat.defaultRowHeight||'16', baseColWidth:opts.sheetFormat.baseColWidth||'10' }));
|
||||
|
||||
if(ws['!cols'] !== undefined && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));
|
||||
o[sidx = o.length] = '<sheetData/>';
|
||||
|
@ -6,7 +6,9 @@ var data = [
|
||||
[1,2,3],
|
||||
[true, false, null, "sheetjs"],
|
||||
["foo","bar",new Date("2014-02-19T14:30Z"), "0.3"],
|
||||
["baz", null, "qux", 3.14159]
|
||||
["baz", null, "qux", 3.14159],
|
||||
["hidden"],
|
||||
["visible"]
|
||||
];
|
||||
|
||||
var ws_name = "SheetJS";
|
||||
@ -18,6 +20,13 @@ var wscols = [
|
||||
{wpx:125}
|
||||
];
|
||||
|
||||
var wsrows = [];
|
||||
wsrows[0] = {hpt: 12}; // "points"
|
||||
wsrows[1] = {hpx: 16}; // "pixels"
|
||||
wsrows[2] = {hpt: 18};
|
||||
wsrows[3] = {hpx: 24};
|
||||
wsrows[4] = {hidden:true}; // hide row
|
||||
wsrows[5] = {hidden:false};
|
||||
|
||||
console.log("Sheet Name: " + ws_name);
|
||||
console.log("Data: "); for(var i=0; i!=data.length; ++i) console.log(data[i]);
|
||||
@ -50,11 +59,14 @@ ws['E1'] = {t:'n', f:"TRANSPOSE(A1:D1)", F:"E1:E4"};
|
||||
ws['E2'] = {t:'n', F:"E1:E4"};
|
||||
ws['E3'] = {t:'n', F:"E1:E4"};
|
||||
ws['E4'] = {t:'n', F:"E1:E4"};
|
||||
ws["!ref"] = "A1:E4";
|
||||
ws["!ref"] = "A1:E6";
|
||||
|
||||
/* TEST: column widths */
|
||||
/* TEST: column props */
|
||||
ws['!cols'] = wscols;
|
||||
|
||||
/* TEST: row props */
|
||||
ws['!rows'] = wsrows;
|
||||
|
||||
/* TEST: hyperlink note: Excel does not automatically style hyperlinks */
|
||||
ws['A3'].l = { Target: "http://sheetjs.com", Tooltip: "Visit us <SheetJS.com!>" };
|
||||
|
||||
|
21
xlsx.flow.js
21
xlsx.flow.js
@ -5458,6 +5458,10 @@ function process_col(coll/*:ColInfo*/) {
|
||||
if(coll.customWidth) delete coll.customWidth;
|
||||
}
|
||||
|
||||
var DEF_DPI = 96, DPI = DEF_DPI;
|
||||
function px2pt(px) { return px * 72 / DPI; }
|
||||
function pt2px(pt) { return pt * DPI / 72; }
|
||||
|
||||
/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */
|
||||
var XLMLPatternTypeMap = {
|
||||
"None": "none",
|
||||
@ -9193,7 +9197,7 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) {
|
||||
}; })();
|
||||
|
||||
function write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/, rels)/*:string*/ {
|
||||
var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [], R=0, C=0;
|
||||
var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [], R=0, C=0, rows = ws['!rows'];
|
||||
for(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
|
||||
for(R = range.s.r; R <= range.e.r; ++R) {
|
||||
r = [];
|
||||
@ -9203,7 +9207,18 @@ function write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook
|
||||
if(ws[ref] === undefined) continue;
|
||||
if((cell = write_ws_xml_cell(ws[ref], ref, ws, opts, idx, wb)) != null) r.push(cell);
|
||||
}
|
||||
if(r.length > 0) o[o.length] = (writextag('row', r.join(""), {r:rr}));
|
||||
if(r.length > 0) {
|
||||
var params = {r:rr}
|
||||
if(rows && rows[R]) {
|
||||
var row = rows[R];
|
||||
if(row.hidden) params.hidden = 1;
|
||||
var height = -1;
|
||||
if (row.hpx) height = px2pt(row.hpx);
|
||||
else if (row.hpt) height = row.hpt;
|
||||
if (height > -1) { params.ht = height; params.customHeight = 1; }
|
||||
}
|
||||
o[o.length] = (writextag('row', r.join(""), params));
|
||||
}
|
||||
}
|
||||
return o.join("");
|
||||
}
|
||||
@ -9225,7 +9240,7 @@ function write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {
|
||||
o[o.length] = (writextag('dimension', null, {'ref': ref}));
|
||||
|
||||
/* TODO: store in WB, process styles */
|
||||
if(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {defaultRowHeight:opts.sheetFormat.defaultRowHeight||'16', baseColWidth:opts.sheetFormat.baseColWidth||'10' }))
|
||||
if(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {defaultRowHeight:opts.sheetFormat.defaultRowHeight||'16', baseColWidth:opts.sheetFormat.baseColWidth||'10' }));
|
||||
|
||||
if(ws['!cols'] !== undefined && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));
|
||||
o[sidx = o.length] = '<sheetData/>';
|
||||
|
21
xlsx.js
21
xlsx.js
@ -5404,6 +5404,10 @@ function process_col(coll) {
|
||||
if(coll.customWidth) delete coll.customWidth;
|
||||
}
|
||||
|
||||
var DEF_DPI = 96, DPI = DEF_DPI;
|
||||
function px2pt(px) { return px * 72 / DPI; }
|
||||
function pt2px(pt) { return pt * DPI / 72; }
|
||||
|
||||
/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */
|
||||
var XLMLPatternTypeMap = {
|
||||
"None": "none",
|
||||
@ -9138,7 +9142,7 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) {
|
||||
}; })();
|
||||
|
||||
function write_ws_xml_data(ws, opts, idx, wb, rels) {
|
||||
var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [], R=0, C=0;
|
||||
var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [], R=0, C=0, rows = ws['!rows'];
|
||||
for(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
|
||||
for(R = range.s.r; R <= range.e.r; ++R) {
|
||||
r = [];
|
||||
@ -9148,7 +9152,18 @@ function write_ws_xml_data(ws, opts, idx, wb, rels) {
|
||||
if(ws[ref] === undefined) continue;
|
||||
if((cell = write_ws_xml_cell(ws[ref], ref, ws, opts, idx, wb)) != null) r.push(cell);
|
||||
}
|
||||
if(r.length > 0) o[o.length] = (writextag('row', r.join(""), {r:rr}));
|
||||
if(r.length > 0) {
|
||||
var params = {r:rr}
|
||||
if(rows && rows[R]) {
|
||||
var row = rows[R];
|
||||
if(row.hidden) params.hidden = 1;
|
||||
var height = -1;
|
||||
if (row.hpx) height = px2pt(row.hpx);
|
||||
else if (row.hpt) height = row.hpt;
|
||||
if (height > -1) { params.ht = height; params.customHeight = 1; }
|
||||
}
|
||||
o[o.length] = (writextag('row', r.join(""), params));
|
||||
}
|
||||
}
|
||||
return o.join("");
|
||||
}
|
||||
@ -9170,7 +9185,7 @@ function write_ws_xml(idx, opts, wb, rels) {
|
||||
o[o.length] = (writextag('dimension', null, {'ref': ref}));
|
||||
|
||||
/* TODO: store in WB, process styles */
|
||||
if(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {defaultRowHeight:opts.sheetFormat.defaultRowHeight||'16', baseColWidth:opts.sheetFormat.baseColWidth||'10' }))
|
||||
if(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {defaultRowHeight:opts.sheetFormat.defaultRowHeight||'16', baseColWidth:opts.sheetFormat.baseColWidth||'10' }));
|
||||
|
||||
if(ws['!cols'] !== undefined && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));
|
||||
o[sidx = o.length] = '<sheetData/>';
|
||||
|
Loading…
Reference in New Issue
Block a user