| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | /* writing feature test -- look for TEST: in comments */ | 
					
						
							| 
									
										
										
										
											2017-05-15 15:48:44 +00:00
										 |  |  | /* vim: set ts=2 ft=javascript: */ | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 20:46:32 +00:00
										 |  |  | if(typeof console === 'undefined') console = {log: function(){}}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var ext = typeof process !== 'undefined' && !!process.argv[2]; | 
					
						
							| 
									
										
										
										
											2017-12-30 05:40:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | /* original data */ | 
					
						
							|  |  |  | var data = [ | 
					
						
							| 
									
										
										
										
											2017-05-15 15:48:44 +00:00
										 |  |  | 	[1, 2, 3], | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | 	[true, false, null, "sheetjs"], | 
					
						
							| 
									
										
										
										
											2017-10-17 00:14:32 +00:00
										 |  |  | 	["foo    bar", "baz", new Date("2014-02-19T14:30Z"), "0.3"], | 
					
						
							| 
									
										
										
										
											2017-09-30 06:18:11 +00:00
										 |  |  | 	["baz", null, "\u0BEE", 3.14159], | 
					
						
							| 
									
										
										
										
											2017-03-31 03:57:11 +00:00
										 |  |  | 	["hidden"], | 
					
						
							|  |  |  | 	["visible"] | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | ]; | 
					
						
							| 
									
										
										
										
											2018-02-21 07:01:34 +00:00
										 |  |  | if(isNaN(data[2][2].getYear())) data[2][2] = new Date(Date.UTC(2014, 1, 19, 14, 30, 0)); | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | var ws_name = "SheetJS"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var wscols = [ | 
					
						
							| 
									
										
										
										
											2017-09-22 22:18:51 +00:00
										 |  |  | 	{wch: 6}, // "characters"
 | 
					
						
							|  |  |  | 	{wpx: 50}, // "pixels"
 | 
					
						
							| 
									
										
										
										
											2017-04-30 16:27:03 +00:00
										 |  |  | 	, | 
					
						
							| 
									
										
										
										
											2017-09-22 22:18:51 +00:00
										 |  |  | 	{hidden: true} // hide column
 | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-28 07:28:03 +00:00
										 |  |  | /* At 96 PPI, 1 pt = 1 px */ | 
					
						
							| 
									
										
										
										
											2017-04-30 16:27:03 +00:00
										 |  |  | var wsrows = [ | 
					
						
							|  |  |  | 	{hpt: 12}, // "points"
 | 
					
						
							|  |  |  | 	{hpx: 16}, // "pixels"
 | 
					
						
							|  |  |  | 	, | 
					
						
							| 
									
										
										
										
											2017-07-09 17:37:45 +00:00
										 |  |  | 	{hpx: 24, level:3}, | 
					
						
							| 
									
										
										
										
											2017-05-15 15:48:44 +00:00
										 |  |  | 	{hidden: true}, // hide row
 | 
					
						
							|  |  |  | 	{hidden: false} | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | ]; | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | console.log("Sheet Name: " + ws_name); | 
					
						
							| 
									
										
										
										
											2017-05-15 15:48:44 +00:00
										 |  |  | console.log("Data: "); | 
					
						
							|  |  |  | var i = 0; | 
					
						
							| 
									
										
										
										
											2017-06-03 07:19:09 +00:00
										 |  |  | for(i = 0; i !== data.length; ++i) console.log(data[i]); | 
					
						
							| 
									
										
										
										
											2017-05-15 15:48:44 +00:00
										 |  |  | console.log("Columns :"); | 
					
						
							| 
									
										
										
										
											2017-06-03 07:19:09 +00:00
										 |  |  | for(i = 0; i !== wscols.length; ++i) console.log(wscols[i]); | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* require XLSX */ | 
					
						
							|  |  |  | if(typeof XLSX === "undefined") { try { XLSX = require('./'); } catch(e) { XLSX = require('../'); } } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-28 22:03:03 +00:00
										 |  |  | /* blank workbook constructor */ | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2017-03-28 22:03:03 +00:00
										 |  |  | var wb = { SheetNames: [], Sheets: {} }; | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | var wb = XLSX.utils.book_new(); | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* convert an array of arrays in JS to a CSF spreadsheet */ | 
					
						
							| 
									
										
										
										
											2017-04-30 16:27:03 +00:00
										 |  |  | var ws = XLSX.utils.aoa_to_sheet(data, {cellDates:true}); | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* TEST: add worksheet to workbook */ | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | wb.SheetNames.push(ws_name); | 
					
						
							|  |  |  | wb.Sheets[ws_name] = ws; | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | XLSX.utils.book_append_sheet(wb, ws, ws_name); | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-18 00:45:06 +00:00
										 |  |  | /* TEST: simple formula */ | 
					
						
							|  |  |  | ws['C1'].f = "A1+B1"; | 
					
						
							|  |  |  | ws['C2'] = {t:'n', f:"A1+B1"}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* TEST: single-cell array formula */ | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2017-03-18 00:45:06 +00:00
										 |  |  | ws['D1'] = {t:'n', f:"SUM(A1:C1*A1:C1)", F:"D1:D1"}; | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | XLSX.utils.sheet_set_array_formula(ws, 'D1:D1', "SUM(A1:C1*A1:C1)"); | 
					
						
							| 
									
										
										
										
											2017-03-18 00:45:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* TEST: multi-cell array formula */ | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2017-03-18 00:45:06 +00:00
										 |  |  | 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"}; | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | XLSX.utils.sheet_set_array_formula(ws, 'E1:E4', "TRANSPOSE(A1:D1)"); | 
					
						
							| 
									
										
										
										
											2017-03-31 03:57:11 +00:00
										 |  |  | ws["!ref"] = "A1:E6"; | 
					
						
							| 
									
										
										
										
											2017-03-18 00:45:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-31 03:57:11 +00:00
										 |  |  | /* TEST: column props */ | 
					
						
							| 
									
										
										
										
											2014-06-05 07:06:20 +00:00
										 |  |  | ws['!cols'] = wscols; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-31 03:57:11 +00:00
										 |  |  | /* TEST: row props */ | 
					
						
							|  |  |  | ws['!rows'] = wsrows; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-28 22:03:03 +00:00
										 |  |  | /* TEST: hyperlink note: Excel does not automatically style hyperlinks */ | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2017-12-15 01:18:40 +00:00
										 |  |  | ws['A4'].l = { Target: "#E2" }; | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | XLSX.utils.cell_set_internal_link(ws['A4'], "E2"); | 
					
						
							|  |  |  | /* | 
					
						
							| 
									
										
										
										
											2017-03-28 22:03:03 +00:00
										 |  |  | ws['A3'].l = { Target: "http://sheetjs.com", Tooltip: "Visit us <SheetJS.com!>" }; | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2017-12-15 01:18:40 +00:00
										 |  |  | XLSX.utils.cell_set_hyperlink(ws['A3'], "http://sheetjs.com", "Visit us <SheetJS.com!>"); | 
					
						
							| 
									
										
										
										
											2017-03-28 22:03:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* TEST: built-in format */ | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2017-04-03 00:16:03 +00:00
										 |  |  | ws['B1'].z = "0%"; // Format Code 9
 | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | XLSX.utils.cell_set_number_format(ws['B1'], "0%"); | 
					
						
							| 
									
										
										
										
											2017-03-28 22:03:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* TEST: custom format */ | 
					
						
							| 
									
										
										
										
											2017-05-09 18:07:57 +00:00
										 |  |  | var custfmt = "\"This is \"\\ 0.0"; | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2017-05-09 18:07:57 +00:00
										 |  |  | ws['C2'].z = custfmt; | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | XLSX.utils.cell_set_number_format(ws['C2'], custfmt); | 
					
						
							| 
									
										
										
										
											2017-04-03 00:16:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-13 01:29:38 +00:00
										 |  |  | /* TEST: page margins */ | 
					
						
							|  |  |  | ws['!margins'] =  { left:1.0, right:1.0, top:1.0, bottom:1.0, header:0.5, footer:0.5 }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-30 05:40:35 +00:00
										 |  |  | /* TEST: merge cells */ | 
					
						
							|  |  |  | ws['!merges'] = [ XLSX.utils.decode_range("A6:C6") ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | console.log("JSON Data:"); | 
					
						
							|  |  |  | console.log(XLSX.utils.sheet_to_json(ws, {header:1})); | 
					
						
							| 
									
										
										
										
											2017-03-18 00:45:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-31 18:46:42 +00:00
										 |  |  | /* TEST: hidden sheets */ | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2017-03-31 18:46:42 +00:00
										 |  |  | wb.SheetNames.push("Hidden"); | 
					
						
							|  |  |  | wb.Sheets["Hidden"] = XLSX.utils.aoa_to_sheet(["Hidden".split(""), [1,2,3]]); | 
					
						
							|  |  |  | wb.Workbook = {Sheets:[]}; | 
					
						
							|  |  |  | wb.Workbook.Sheets[1] = {Hidden:1}; | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2017-10-27 16:25:54 +00:00
										 |  |  | var data_2 = ["Hidden".split(""), [1,true,3,'a',,'c'], [2,false,true,'sh33t',,'j5']]; | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | XLSX.utils.book_append_sheet(wb, XLSX.utils.aoa_to_sheet(data_2), "Hidden"); | 
					
						
							|  |  |  | XLSX.utils.book_set_sheet_visibility(wb, "Hidden", XLSX.utils.consts.SHEET_HIDDEN); | 
					
						
							| 
									
										
										
										
											2017-03-31 18:46:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-01 07:32:12 +00:00
										 |  |  | /* TEST: properties */ | 
					
						
							|  |  |  | wb.Props = { | 
					
						
							|  |  |  | 	Title: "SheetJS Test", | 
					
						
							|  |  |  | 	Subject: "Tests", | 
					
						
							|  |  |  | 	Author: "Devs at SheetJS", | 
					
						
							|  |  |  | 	Manager: "Sheet Manager", | 
					
						
							|  |  |  | 	Company: "SheetJS", | 
					
						
							|  |  |  | 	Category: "Experimentation", | 
					
						
							|  |  |  | 	Keywords: "Test", | 
					
						
							|  |  |  | 	Comments: "Nothing to say here", | 
					
						
							|  |  |  | 	LastAuthor: "Not SheetJS", | 
					
						
							|  |  |  | 	CreatedDate: new Date(2017,1,19) | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-04-01 07:32:12 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-02 06:47:25 +00:00
										 |  |  | /* TEST: comments */ | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2017-04-02 06:47:25 +00:00
										 |  |  | ws['A4'].c = []; | 
					
						
							| 
									
										
										
										
											2017-04-03 00:16:03 +00:00
										 |  |  | ws['A4'].c.push({a:"SheetJS",t:"I'm a little comment, short and stout!\n\nWell, Stout may be the wrong word"}); | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | XLSX.utils.cell_add_comment(ws['A4'], "I'm a little comment, short and stout!\n\nWell, Stout may be the wrong word", "SheetJS"); | 
					
						
							| 
									
										
										
										
											2017-04-02 06:47:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-04 18:41:11 +00:00
										 |  |  | /* TEST: sheet protection */ | 
					
						
							|  |  |  | ws['!protect'] = { | 
					
						
							|  |  |  | 	password:"password", | 
					
						
							| 
									
										
										
										
											2017-04-28 07:28:03 +00:00
										 |  |  | 	/* enable formatting rows and columns */ | 
					
						
							| 
									
										
										
										
											2017-06-03 07:19:09 +00:00
										 |  |  | 	formatRows:false, | 
					
						
							|  |  |  | 	formatColumns:false, | 
					
						
							| 
									
										
										
										
											2017-04-28 07:28:03 +00:00
										 |  |  | 	/* disable editing objects and scenarios */ | 
					
						
							| 
									
										
										
										
											2017-06-03 07:19:09 +00:00
										 |  |  | 	objects:true, | 
					
						
							|  |  |  | 	scenarios:true | 
					
						
							| 
									
										
										
										
											2017-04-04 18:41:11 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-03 07:19:09 +00:00
										 |  |  | /* TEST: Workbook Properties */ | 
					
						
							|  |  |  | if(!wb.Workbook) wb.Workbook = {Sheets:[], WBProps:{}}; | 
					
						
							|  |  |  | if(!wb.Workbook.WBProps) wb.Workbook.WBProps = {}; | 
					
						
							|  |  |  | wb.Workbook.WBProps.filterPrivacy = true; | 
					
						
							| 
									
										
										
										
											2017-12-30 05:40:35 +00:00
										 |  |  | if(ext) wb.Workbook.Views = [{RTL:true}]; | 
					
						
							| 
									
										
										
										
											2017-06-03 07:19:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-11 07:29:59 +00:00
										 |  |  | console.log("Worksheet Model:"); | 
					
						
							| 
									
										
										
										
											2017-04-02 06:47:25 +00:00
										 |  |  | console.log(ws); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-03 07:19:09 +00:00
										 |  |  | var filenames = [ | 
					
						
							| 
									
										
										
										
											2017-05-09 18:07:57 +00:00
										 |  |  | 	['sheetjs.xlsx', {bookSST:true}], | 
					
						
							| 
									
										
										
										
											2017-06-03 07:19:09 +00:00
										 |  |  | 	['sheetjs.xlsm'], | 
					
						
							|  |  |  | 	['sheetjs.xlsb'], | 
					
						
							| 
									
										
										
										
											2017-12-30 05:40:35 +00:00
										 |  |  | 	['sheetjs.xlam'], | 
					
						
							| 
									
										
										
										
											2017-10-17 00:14:32 +00:00
										 |  |  | 	['sheetjs.biff8.xls', {bookType:'xls'}], | 
					
						
							|  |  |  | 	['sheetjs.biff5.xls', {bookType:'biff5'}], | 
					
						
							|  |  |  | 	['sheetjs.biff2.xls', {bookType:'biff2'}], | 
					
						
							| 
									
										
										
										
											2017-05-09 18:07:57 +00:00
										 |  |  | 	['sheetjs.xml.xls', {bookType:'xlml'}], | 
					
						
							| 
									
										
										
										
											2017-12-30 05:40:35 +00:00
										 |  |  | 	['sheetjs.xla'], | 
					
						
							| 
									
										
										
										
											2017-06-03 07:19:09 +00:00
										 |  |  | 	['sheetjs.ods'], | 
					
						
							|  |  |  | 	['sheetjs.fods'], | 
					
						
							|  |  |  | 	['sheetjs.csv'], | 
					
						
							|  |  |  | 	['sheetjs.txt'], | 
					
						
							| 
									
										
										
										
											2017-07-26 08:35:28 +00:00
										 |  |  | 	['sheetjs.slk'], | 
					
						
							| 
									
										
										
										
											2017-12-04 04:41:41 +00:00
										 |  |  | 	['sheetjs.eth'], | 
					
						
							| 
									
										
										
										
											2017-07-26 08:35:28 +00:00
										 |  |  | 	['sheetjs.htm'], | 
					
						
							|  |  |  | 	['sheetjs.dif'], | 
					
						
							| 
									
										
										
										
											2017-10-27 16:25:54 +00:00
										 |  |  | 	['sheetjs.dbf', {sheet:"Hidden"}], | 
					
						
							| 
									
										
										
										
											2017-10-02 08:15:36 +00:00
										 |  |  | 	['sheetjs.rtf'], | 
					
						
							| 
									
										
										
										
											2017-07-26 08:35:28 +00:00
										 |  |  | 	['sheetjs.prn'] | 
					
						
							| 
									
										
										
										
											2017-06-03 07:19:09 +00:00
										 |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 20:46:32 +00:00
										 |  |  | var OUT = ["base64", "binary", "string", "array"]; | 
					
						
							|  |  |  | if(typeof Buffer !== 'undefined') OUT.push("buffer"); | 
					
						
							| 
									
										
										
										
											2017-06-03 07:19:09 +00:00
										 |  |  | filenames.forEach(function(r) { | 
					
						
							| 
									
										
										
										
											2018-02-03 20:46:32 +00:00
										 |  |  | 	/* write file */ | 
					
						
							|  |  |  | 	XLSX.writeFile(wb, r[0], r[1]); | 
					
						
							|  |  |  | 	/* test by reading back files */ | 
					
						
							|  |  |  | 	if(typeof process !== 'undefined') XLSX.readFile(r[0]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var ext = r[1] && r[1].bookType || r[0].split(".")[1]; | 
					
						
							|  |  |  | 	ext = {"htm":"html"}[ext] || ext; | 
					
						
							|  |  |  | 	OUT.forEach(function(type) { | 
					
						
							|  |  |  | 		if(type == "string" && ["xlsx", "xlsm", "xlsb", "xlam", "biff8", "biff5", "xla", "ods", "dbf"].indexOf(ext) > -1) return; | 
					
						
							|  |  |  | 		if(type == "array" && ["xlsx", "xlsm", "xlsb", "xlam", "ods"].indexOf(ext) > -1 && typeof Uint8Array === 'undefined') return; | 
					
						
							|  |  |  | 		var datout = XLSX.write(wb, {type: type, bookType: ext, sheet:r[1] && r[1].sheet || null}); | 
					
						
							|  |  |  | 		XLSX.read(datout, {type:type}); | 
					
						
							|  |  |  | 		if(type == "array") console.log(ext, datout); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-05-09 18:07:57 +00:00
										 |  |  | }); |