forked from sheetjs/sheetjs
		
	
		
			
	
	
		
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ | ||
|  | /*global XLSX, module, require */ | ||
|  | var ObjUtils = (function() { | ||
|  | 
 | ||
|  | var X; | ||
|  | if(typeof XLSX !== "undefined") X = XLSX; | ||
|  | else if(typeof require !== 'undefined') X = require('xlsx'); | ||
|  | else throw new Error("Could not find XLSX"); | ||
|  | 
 | ||
|  | function walk(obj, key, arr) { | ||
|  |   if(Array.isArray(obj)) return; | ||
|  |   if(typeof obj != "object" || obj instanceof Date) { arr.push({path:key, value:obj}); return; } | ||
|  |   Object.keys(obj).forEach(function(k) { | ||
|  |     walk(obj[k], key ? key + "." + k : k, arr); | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | function object_to_workbook(obj) { | ||
|  |   var wb = X.utils.book_new(); | ||
|  | 
 | ||
|  |   var base = []; walk(obj, "", base); | ||
|  |   var ws = X.utils.json_to_sheet(base, {header:["path", "value"]}); | ||
|  |   X.utils.book_append_sheet(wb, ws, "_keys"); | ||
|  | 
 | ||
|  |   Object.keys(obj).forEach(function(k) { | ||
|  |     if(!Array.isArray(obj[k])) return; | ||
|  |     X.utils.book_append_sheet(wb, X.utils.json_to_sheet(obj[k]), k); | ||
|  |   }); | ||
|  | 
 | ||
|  |   return wb; | ||
|  | } | ||
|  | 
 | ||
|  | function deepset(obj, path, value) { | ||
|  |   if(path.indexOf(".") == -1) return obj[path] = value; | ||
|  |   var parts = path.split("."); | ||
|  |   if(!obj[parts[0]]) obj[parts[0]] = {}; | ||
|  |   return deepset(obj[parts[0]], parts.slice(1).join("."), value); | ||
|  | } | ||
|  | function workbook_set_object(obj, wb) { | ||
|  |   var ws = wb.Sheets["_keys"]; if(ws) { | ||
|  |     var data = X.utils.sheet_to_json(ws, {raw:true}); | ||
|  |     data.forEach(function(r) { deepset(obj, r.path, r.value); }); | ||
|  |   } | ||
|  |   wb.SheetNames.forEach(function(n) { | ||
|  |     if(n == "_keys") return; | ||
|  |     obj[n] = X.utils.sheet_to_json(wb.Sheets[n], {raw:true}); | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | function workbook_to_object(wb) { var obj = {}; workbook_set_object(obj, wb); return obj; } | ||
|  | 
 | ||
|  | return { | ||
|  |   workbook_to_object: workbook_to_object, | ||
|  |   object_to_workbook: object_to_workbook, | ||
|  |   workbook_set_object: workbook_set_object | ||
|  | }; | ||
|  | })(); | ||
|  | 
 | ||
|  | if(typeof module !== 'undefined') module.exports = ObjUtils; |