From 999b41df3a6b139478aeb6fe68f331c16ade081e Mon Sep 17 00:00:00 2001 From: Stewart Sims Date: Thu, 15 Dec 2016 13:21:42 +0000 Subject: [PATCH] fixing issues with multiple images, adding row height config and make keys method more defensive --- xlsx.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/xlsx.js b/xlsx.js index c07557b..8e1feb9 100644 --- a/xlsx.js +++ b/xlsx.js @@ -1255,7 +1255,7 @@ return exports; if(typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; } function isval(x) { return x !== undefined && x !== null; } -function keys(o) { return Object.keys(o); } +function keys(o) { return o != null ? Object.keys(o) : []; } function evert_key(obj, key) { var o = [], K = keys(obj); @@ -2556,9 +2556,9 @@ function write_drawing(images) { twoCell += ''+toCol+'0'+toRow+'99999'; twoCell += '' twoCell += ''; - twoCell += ''; + twoCell += ''; twoCell += ''; - o[o.length] = (writextag('xdr:twoCellAnchor', twoCell, images[0].attrs)); + o[o.length] = (writextag('xdr:twoCellAnchor', twoCell, images[i].attrs)); } } @@ -4637,6 +4637,7 @@ function rgb_tint(hex, tint) { var DEF_MDW = 7, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW; function width2px(width) { return (( width + ((128/MDW)|0)/256 )* MDW )|0; } function px2char(px) { return (((px - 5)/MDW * 100 + 0.5)|0)/100; } +function px2pt(px) { return px * 72 / 96; } function char2width(chr) { return (((chr * MDW + 5)/MDW*256)|0)/256; } function cycle_width(collw) { return char2width(px2char(width2px(collw))); } function find_mdw(collw, coll) { @@ -7570,8 +7571,20 @@ function write_ws_xml_data(ws, opts, idx, wb) { 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) { + // 18.3.1.73 row + var params = {r:rr}; + if(typeof ws['!rows'] !== 'undefined' && ws['!rows'].length > R) { + var row = ws['!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(""); } @@ -11369,7 +11382,7 @@ function write_zip(wb, opts) { var s = wb.SheetNames[rId-1], ws = wb.Sheets[s], images = ws['!images'] || []; var rels = ws['!rels'] = [], draw_rels = []; - for (var sId=1; sId <= images.length; ++sId) { + for (var sId=1; sId < images.length+1; ++sId) { var image = images[sId - 1]; f = 'xl/media/' + image.name; zip.file(f, image.data, image.opts);