From 0bf1153da50dca054c51276696dbb326c7b27dc2 Mon Sep 17 00:00:00 2001
From: Pieter Sheth-Voss <pieter@protobi.com>
Date: Fri, 4 Dec 2015 21:53:47 -0500
Subject: [PATCH] Add page scale and orientation

---
 README.md        |  1 +
 bits/67_wsxml.js | 11 +++++++----
 xlsx.js          | 11 +++++++----
 3 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/README.md b/README.md
index 8c5ada2..358f542 100644
--- a/README.md
+++ b/README.md
@@ -419,6 +419,7 @@ Special worksheet keys (accessible as `worksheet[key]`, each starting with `!`):
   will write all cells in the merge range if they exist, so be sure that only
   the first cell (upper-left) in the range is set.
 
+- `ws['!pageSetup']`: `{scale: '100', orientation: 'portrait'||'landscape'}
 ### Workbook Object
 
 `workbook.SheetNames` is an ordered list of the sheets in the workbook
diff --git a/bits/67_wsxml.js b/bits/67_wsxml.js
index 1c4937c..a7cef3c 100644
--- a/bits/67_wsxml.js
+++ b/bits/67_wsxml.js
@@ -71,12 +71,14 @@ function write_ws_xml_merges(merges) {
 }
 
 function write_ws_xml_pagesetup(setup) {
-  return writextag('pageSetup', {
-    scale: setup.scale || 'scale',
+  var pageSetup =  writextag('pageSetup', null, {
+    scale: setup.scale || '100',
     orientation: setup.orientation || 'portrait',
     horizontalDpi : setup.horizontalDpi || '4294967292',
     verticalDpi : setup.verticalDpi || '4294967292'
   })
+  console.log(pageSetup);
+  return pageSetup;
 }
 
 //<pageSetup scale="90" orientation="portrait" horizontalDpi="4294967292" verticalDpi="4294967292"/>
@@ -333,9 +335,10 @@ function write_ws_xml(idx, opts, wb) {
 
 	if(ws['!merges'] !== undefined && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));
 
+  if (ws['!pageSetup'] !== undefined) o[o.length] =  write_ws_xml_pagesetup(ws['!pageSetup'])
   if (ws['!rowBreaks'] !== undefined) o[o.length] =  write_ws_xml_row_breaks(ws['!rowBreaks'])
   if (ws['!colBreaks'] !== undefined) o[o.length] =  write_ws_xml_col_breaks(ws['!colBreaks'])
-  if (ws['!pageSetup'] !== undefined) o[o.length] =  write_ws_xml_pagesetup(ws['!pageSetup'])
+
 
 	if(o.length>2) { o[o.length] = ('</worksheet>'); o[1]=o[1].replace("/>",">"); }
 	return o.join("");
@@ -356,7 +359,7 @@ function write_ws_xml_col_breaks(breaks) {
   var brk = [];
   for (var i=0; i<breaks.length; i++) {
     var thisBreak = ''+ (breaks[i]);
-    var nextBreak = '' + (breaks[i+1] || '16383');
+    var nextBreak = '' + (breaks[i+1] || '1048575');
     brk.push(writextag('brk', null, {id: thisBreak, max: nextBreak, man: '1'}))
   }
   return writextag('colBreaks', brk.join(' '), {count: brk.length, manualBreakCount: brk.length})
diff --git a/xlsx.js b/xlsx.js
index 75f95db..e598122 100644
--- a/xlsx.js
+++ b/xlsx.js
@@ -7596,12 +7596,14 @@ function write_ws_xml_merges(merges) {
 }
 
 function write_ws_xml_pagesetup(setup) {
-  return writextag('pageSetup', {
-    scale: setup.scale || 'scale',
+  var pageSetup =  writextag('pageSetup', null, {
+    scale: setup.scale || '100',
     orientation: setup.orientation || 'portrait',
     horizontalDpi : setup.horizontalDpi || '4294967292',
     verticalDpi : setup.verticalDpi || '4294967292'
   })
+  console.log(pageSetup);
+  return pageSetup;
 }
 
 //<pageSetup scale="90" orientation="portrait" horizontalDpi="4294967292" verticalDpi="4294967292"/>
@@ -7858,9 +7860,10 @@ function write_ws_xml(idx, opts, wb) {
 
 	if(ws['!merges'] !== undefined && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));
 
+  if (ws['!pageSetup'] !== undefined) o[o.length] =  write_ws_xml_pagesetup(ws['!pageSetup'])
   if (ws['!rowBreaks'] !== undefined) o[o.length] =  write_ws_xml_row_breaks(ws['!rowBreaks'])
   if (ws['!colBreaks'] !== undefined) o[o.length] =  write_ws_xml_col_breaks(ws['!colBreaks'])
-  if (ws['!pageSetup'] !== undefined) o[o.length] =  write_ws_xml_pagesetup(ws['!pageSetup'])
+
 
 	if(o.length>2) { o[o.length] = ('</worksheet>'); o[1]=o[1].replace("/>",">"); }
 	return o.join("");
@@ -7881,7 +7884,7 @@ function write_ws_xml_col_breaks(breaks) {
   var brk = [];
   for (var i=0; i<breaks.length; i++) {
     var thisBreak = ''+ (breaks[i]);
-    var nextBreak = '' + (breaks[i+1] || '16383');
+    var nextBreak = '' + (breaks[i+1] || '1048575');
     brk.push(writextag('brk', null, {id: thisBreak, max: nextBreak, man: '1'}))
   }
   return writextag('colBreaks', brk.join(' '), {count: brk.length, manualBreakCount: brk.length})