forked from sheetjs/sheetjs
SheetJS
19620da30b
- BIFF5 write number formats and other features - XLSX/XLSB/BIFF8 Suppress "Number stored as Text" errors - codename awareness (fixes #992 h/t @samusstrike) - updated CFB to 1.0.3 - demo refresh
38 lines
1.6 KiB
Swift
38 lines
1.6 KiB
Swift
/* 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 */
|
|
var context: JSContext! = JSContext();
|
|
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");
|
|
let data: String! = try String(contentsOf: file_path, encoding: String.Encoding.isoLatin1);
|
|
context.setObject(data, forKeyedSubscript: "payload" as (NSCopying & NSObjectProtocol)!);
|
|
src = "var wb = XLSX.read(payload, {type:'binary'});";
|
|
context.evaluateScript(src);
|
|
|
|
/* write to sheetjsw.xlsx */
|
|
let out_path = shared_dir.appendingPathComponent("sheetjsw.xlsx");
|
|
src = "var out = XLSX.write(wb, {type:'binary', bookType:'xlsx'})";
|
|
context.evaluateScript(src);
|
|
let outvalue: JSValue! = context.objectForKeyedSubscript("out");
|
|
var out: String! = outvalue.toString();
|
|
try? out.write(to: out_path, atomically: false, encoding: String.Encoding.isoLatin1);
|