forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | /* SheetGoja (C) SheetJS LLC -- https://sheetjs.com */ | ||
|  | 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) } | ||
|  |   _, err = vm.RunString(string(data)) | ||
|  |   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) { | ||
|  |   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("sheetjsw." + t, buf, 0644) | ||
|  |   if err != nil { panic(err) } | ||
|  | } | ||
|  | 
 | ||
|  | func main() { | ||
|  |   /* initialize */ | ||
|  |   vm := goja.New() | ||
|  |   eval_string(vm, "var 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", vm.ToValue(vm.NewArrayBuffer(data))) | ||
|  | 
 | ||
|  |   /* parse workbook */ | ||
|  |   eval_string(vm, "wb = XLSX.read(buf, {type:'buffer'});") | ||
|  |   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) | ||
|  | 
 | ||
|  |   /* write file */ | ||
|  |   write_type(vm, "xlsb") | ||
|  | } |