From 0d419a6c0b7ff7f0081f0f6f5a2aab69f0f0a1f4 Mon Sep 17 00:00:00 2001 From: SheetJS Date: Thu, 8 Feb 2018 18:14:40 -0500 Subject: [PATCH] write test --- Makefile | 2 + tests/write.html | 40 +++++++++ tests/write.js | 213 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 255 insertions(+) create mode 100644 tests/write.html create mode 100644 tests/write.js diff --git a/Makefile b/Makefile index e8f0e7a..483d037 100644 --- a/Makefile +++ b/Makefile @@ -14,4 +14,6 @@ update: git show master:tests/mocha.css > tests/mocha.css git show master:tests/mocha.js > tests/mocha.js git show master:tests/xhr-hack.js > tests/xhr-hack.js + git show master:tests/write.js > tests/write.js + git show master:tests/write.html > tests/write.html git show master:demos/datagrid/index.html > datagrid.html diff --git a/tests/write.html b/tests/write.html new file mode 100644 index 0000000..c0fcb26 --- /dev/null +++ b/tests/write.html @@ -0,0 +1,40 @@ + + + + + +SheetJS JS-XLSX In-Browser Export Demo + + + + +
+

SheetJS JS-XLSX In-Browser Export Demo

+Example Code + + /* Generate Workbook */ + var wb = XLSX.utils.book_new(); + var ws = XLSX.utils.aoa_to_sheet([["a","b"],[1,2,3]]); + XLSX.utils.book_append_sheet(wb, ws, "SheetJS"); + + /* Trigger Download with `writeFile` */ + XLSX.writeFile(wb, "SheetJS.xlsb", {compression:true}); + +Download Generation Methods: + +- IE6-9 require ActiveX and Windows Script support. + The IE_SaveFile function from the included shim uses VBScript. + +- IE10-11 use msSaveBlob API. + +- When supported, `saveAs` will be used. + +- When available, modern browsers use `URL.createObjectURL`. + +
+ + + + diff --git a/tests/write.js b/tests/write.js new file mode 100644 index 0000000..abb48b8 --- /dev/null +++ b/tests/write.js @@ -0,0 +1,213 @@ +/* writing feature test -- look for TEST: in comments */ +/* vim: set ts=2 ft=javascript: */ + +if(typeof console === 'undefined') console = {log: function(){}}; + +var ext = typeof process !== 'undefined' && !!process.argv[2]; + +/* original data */ +var data = [ + [1, 2, 3], + [true, false, null, "sheetjs"], + ["foo bar", "baz", new Date("2014-02-19T14:30Z"), "0.3"], + ["baz", null, "\u0BEE", 3.14159], + ["hidden"], + ["visible"] +]; + +var ws_name = "SheetJS"; + +var wscols = [ + {wch: 6}, // "characters" + {wpx: 50}, // "pixels" + , + {hidden: true} // hide column +]; + +/* At 96 PPI, 1 pt = 1 px */ +var wsrows = [ + {hpt: 12}, // "points" + {hpx: 16}, // "pixels" + , + {hpx: 24, level:3}, + {hidden: true}, // hide row + {hidden: false} +]; + +console.log("Sheet Name: " + ws_name); +console.log("Data: "); +var i = 0; +for(i = 0; i !== data.length; ++i) console.log(data[i]); +console.log("Columns :"); +for(i = 0; i !== wscols.length; ++i) console.log(wscols[i]); + +/* require XLSX */ +if(typeof XLSX === "undefined") { try { XLSX = require('./'); } catch(e) { XLSX = require('../'); } } + +/* blank workbook constructor */ +/* +var wb = { SheetNames: [], Sheets: {} }; +*/ +var wb = XLSX.utils.book_new(); + +/* convert an array of arrays in JS to a CSF spreadsheet */ +var ws = XLSX.utils.aoa_to_sheet(data, {cellDates:true}); + +/* TEST: add worksheet to workbook */ +/* +wb.SheetNames.push(ws_name); +wb.Sheets[ws_name] = ws; +*/ +XLSX.utils.book_append_sheet(wb, ws, ws_name); + +/* TEST: simple formula */ +ws['C1'].f = "A1+B1"; +ws['C2'] = {t:'n', f:"A1+B1"}; + +/* TEST: single-cell array formula */ +/* +ws['D1'] = {t:'n', f:"SUM(A1:C1*A1:C1)", F:"D1:D1"}; +*/ +XLSX.utils.sheet_set_array_formula(ws, 'D1:D1', "SUM(A1:C1*A1:C1)"); + +/* TEST: multi-cell array formula */ +/* +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"}; +*/ +XLSX.utils.sheet_set_array_formula(ws, 'E1:E4', "TRANSPOSE(A1:D1)"); +ws["!ref"] = "A1:E6"; + +/* TEST: column props */ +ws['!cols'] = wscols; + +/* TEST: row props */ +ws['!rows'] = wsrows; + +/* TEST: hyperlink note: Excel does not automatically style hyperlinks */ +/* +ws['A4'].l = { Target: "#E2" }; +*/ +XLSX.utils.cell_set_internal_link(ws['A4'], "E2"); +/* +ws['A3'].l = { Target: "http://sheetjs.com", Tooltip: "Visit us " }; +*/ +XLSX.utils.cell_set_hyperlink(ws['A3'], "http://sheetjs.com", "Visit us "); + +/* TEST: built-in format */ +/* +ws['B1'].z = "0%"; // Format Code 9 +*/ +XLSX.utils.cell_set_number_format(ws['B1'], "0%"); + +/* TEST: custom format */ +var custfmt = "\"This is \"\\ 0.0"; +/* +ws['C2'].z = custfmt; +*/ +XLSX.utils.cell_set_number_format(ws['C2'], custfmt); + +/* TEST: page margins */ +ws['!margins'] = { left:1.0, right:1.0, top:1.0, bottom:1.0, header:0.5, footer:0.5 }; + +/* TEST: merge cells */ +ws['!merges'] = [ XLSX.utils.decode_range("A6:C6") ]; + +console.log("JSON Data:"); +console.log(XLSX.utils.sheet_to_json(ws, {header:1})); + +/* TEST: hidden sheets */ +/* +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}; +*/ +var data_2 = ["Hidden".split(""), [1,true,3,'a',,'c'], [2,false,true,'sh33t',,'j5']]; +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); + +/* 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) +}; + +/* TEST: comments */ +/* +ws['A4'].c = []; +ws['A4'].c.push({a:"SheetJS",t:"I'm a little comment, short and stout!\n\nWell, Stout may be the wrong word"}); +*/ +XLSX.utils.cell_add_comment(ws['A4'], "I'm a little comment, short and stout!\n\nWell, Stout may be the wrong word", "SheetJS"); + +/* TEST: sheet protection */ +ws['!protect'] = { + password:"password", + /* enable formatting rows and columns */ + formatRows:false, + formatColumns:false, + /* disable editing objects and scenarios */ + objects:true, + scenarios:true +}; + +/* TEST: Workbook Properties */ +if(!wb.Workbook) wb.Workbook = {Sheets:[], WBProps:{}}; +if(!wb.Workbook.WBProps) wb.Workbook.WBProps = {}; +wb.Workbook.WBProps.filterPrivacy = true; +if(ext) wb.Workbook.Views = [{RTL:true}]; + +console.log("Worksheet Model:"); +console.log(ws); + +var filenames = [ + ['sheetjs.xlsx', {bookSST:true}], + ['sheetjs.xlsm'], + ['sheetjs.xlsb'], + ['sheetjs.xlam'], + ['sheetjs.biff8.xls', {bookType:'xls'}], + ['sheetjs.biff5.xls', {bookType:'biff5'}], + ['sheetjs.biff2.xls', {bookType:'biff2'}], + ['sheetjs.xml.xls', {bookType:'xlml'}], + ['sheetjs.xla'], + ['sheetjs.ods'], + ['sheetjs.fods'], + ['sheetjs.csv'], + ['sheetjs.txt'], + ['sheetjs.slk'], + ['sheetjs.eth'], + ['sheetjs.htm'], + ['sheetjs.dif'], + ['sheetjs.dbf', {sheet:"Hidden"}], + ['sheetjs.rtf'], + ['sheetjs.prn'] +]; + +var OUT = ["base64", "binary", "string", "array"]; +if(typeof Buffer !== 'undefined') OUT.push("buffer"); +filenames.forEach(function(r) { + /* 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); + }); +});