| 
									
										
										
										
											2017-09-24 23:40:09 +00:00
										 |  |  | /* xlsx.js (C) 2013-present  SheetJS -- http://sheetjs.com */ | 
					
						
							|  |  |  | /* This only works in a playground, see SheetJSCore.swift for standalone use */ | 
					
						
							|  |  |  | import JavaScriptCore; | 
					
						
							|  |  |  | import PlaygroundSupport; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* build path variable for the library */ | 
					
						
							|  |  |  | let shared_dir = PlaygroundSupport.playgroundSharedDataDirectory; | 
					
						
							|  |  |  | let lib_path = shared_dir.appendingPathComponent("xlsx.full.min.js"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* prepare JS context */ | 
					
						
							| 
									
										
										
										
											2018-02-14 20:06:35 +00:00
										 |  |  | var context: JSContext! = JSContext(); | 
					
						
							| 
									
										
										
										
											2017-09-24 23:40:09 +00:00
										 |  |  | var src = "var global = (function(){ return this; }).call(null);"; | 
					
						
							|  |  |  | context.evaluateScript(src); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* load library */ | 
					
						
							|  |  |  | var lib = try? String(contentsOf: lib_path); | 
					
						
							|  |  |  | context.evaluateScript(lib); | 
					
						
							|  |  |  | let XLSX: JSValue! = context.objectForKeyedSubscript("XLSX"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* to verify the library was loaded, get the version string */ | 
					
						
							|  |  |  | let XLSXversion: JSValue! = XLSX.objectForKeyedSubscript("version") | 
					
						
							|  |  |  | var version  = XLSXversion.toString(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* parse sheetjs.xls */ | 
					
						
							|  |  |  | let file_path = shared_dir.appendingPathComponent("sheetjs.xls"); | 
					
						
							| 
									
										
										
										
											2018-02-14 20:06:35 +00:00
										 |  |  | let data: String! = try String(contentsOf: file_path, encoding: String.Encoding.isoLatin1); | 
					
						
							|  |  |  | context.setObject(data, forKeyedSubscript: "payload" as (NSCopying & NSObjectProtocol)!); | 
					
						
							| 
									
										
										
										
											2017-09-24 23:40:09 +00:00
										 |  |  | src = "var wb = XLSX.read(payload, {type:'binary'});"; | 
					
						
							|  |  |  | context.evaluateScript(src); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-14 20:06:35 +00:00
										 |  |  | /* write to sheetjsw.xlsx  */ | 
					
						
							|  |  |  | let out_path = shared_dir.appendingPathComponent("sheetjsw.xlsx"); | 
					
						
							| 
									
										
										
										
											2017-09-24 23:40:09 +00:00
										 |  |  | src = "var out = XLSX.write(wb, {type:'binary', bookType:'xlsx'})"; | 
					
						
							|  |  |  | context.evaluateScript(src); | 
					
						
							|  |  |  | let outvalue: JSValue! = context.objectForKeyedSubscript("out"); | 
					
						
							| 
									
										
										
										
											2018-02-14 20:06:35 +00:00
										 |  |  | var out: String! = outvalue.toString(); | 
					
						
							| 
									
										
										
										
											2017-09-24 23:40:09 +00:00
										 |  |  | try? out.write(to: out_path, atomically: false, encoding: String.Encoding.isoLatin1); |