deno.land / x / sheetjs@v0.18.3 / demos / altjs / goja.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package main
import ( b64 "encoding/base64" "fmt" "os" "io/ioutil" "github.com/dop251/goja")
func safe_run_file(vm *goja.Runtime, file string) { data, err := ioutil.ReadFile(file) if err != nil { panic(err) } src := string(data) _, err = vm.RunString(src) if err != nil { panic(err) }}
func eval_string(vm *goja.Runtime, cmd string) goja.Value { v, err := vm.RunString(cmd) if err != nil { panic(err) } return v}
func write_type(vm *goja.Runtime, t string) { /* due to some wonkiness with array passing, use base64 */ b64str := eval_string(vm, "XLSX.write(wb, {type:'base64', bookType:'" + t + "'})") buf, err := b64.StdEncoding.DecodeString(b64str.String()); if err != nil { panic(err) } err = ioutil.WriteFile("sheetjsg." + t, buf, 0644) if err != nil { panic(err) }}
func main() { vm := goja.New()
/* initialize */ eval_string(vm, "if(typeof global == 'undefined') global = (function(){ return this; }).call(null);")
/* load library */ safe_run_file(vm, "shim.min.js") safe_run_file(vm, "xlsx.full.min.js")
/* get version string */ v := eval_string(vm, "XLSX.version") fmt.Printf("SheetJS library version %s\n", v)
/* read file */ data, err := ioutil.ReadFile(os.Args[1]) if err != nil { panic(err) } vm.Set("buf", data) fmt.Printf("Loaded file %s\n", os.Args[1])
/* parse workbook */ eval_string(vm, "var bstr = ''; for(var i = 0; i < buf.length; ++i) bstr += String.fromCharCode(buf[i]);") eval_string(vm, "wb = XLSX.read(bstr, {type:'binary', cellNF:true});") eval_string(vm, "ws = wb.Sheets[wb.SheetNames[0]]")
/* print CSV */ csv := eval_string(vm, "XLSX.utils.sheet_to_csv(ws)") fmt.Printf("%s\n", csv)
/* change cell A1 to 3 */ eval_string(vm, "ws['A1'].v = 3; delete ws['A1'].w;")
/* write file */ //write_type(vm, "xlsb") //write_type(vm, "xlsx") write_type(vm, "xls") write_type(vm, "csv")}
sheetjs

Version Info

Tagged at
2 years ago