forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			109 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			109 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package main | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"context" | ||
|  | 	"encoding/base64" | ||
|  | 	"fmt" | ||
|  | 	"github.com/wailsapp/wails/v2/pkg/runtime" | ||
|  | 	"io/ioutil" | ||
|  | ) | ||
|  | 
 | ||
|  | // App struct
 | ||
|  | type App struct { | ||
|  | 	ctx context.Context | ||
|  | } | ||
|  | 
 | ||
|  | // NewApp creates a new App application struct
 | ||
|  | func NewApp() *App { | ||
|  | 	return &App{} | ||
|  | } | ||
|  | 
 | ||
|  | // startup is called when the app starts. The context is saved
 | ||
|  | // so we can call the runtime methods
 | ||
|  | func (a *App) startup(ctx context.Context) { | ||
|  | 	a.ctx = ctx | ||
|  | } | ||
|  | 
 | ||
|  | // Greet returns a greeting for the given name
 | ||
|  | func (a *App) Greet(name string) string { | ||
|  | 	return fmt.Sprintf("Hello %s, It's show time!", name) | ||
|  | } | ||
|  | 
 | ||
|  | // ShowError displays an error message in a desktop dialog.
 | ||
|  | func (a *App) ShowError(title string, message string) { | ||
|  | 	_, _ = runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{ | ||
|  | 		Type:    runtime.ErrorDialog, | ||
|  | 		Title:   title, | ||
|  | 		Message: message, | ||
|  | 	}) | ||
|  | } | ||
|  | 
 | ||
|  | // ShowInfo displays an info message in a desktop dialog.
 | ||
|  | func (a *App) ShowInfo(title string, message string) { | ||
|  | 	_, _ = runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{ | ||
|  | 		Type:    runtime.InfoDialog, | ||
|  | 		Title:   title, | ||
|  | 		Message: message, | ||
|  | 	}) | ||
|  | } | ||
|  | 
 | ||
|  | // ReadFile shows an open file dialog and returns the data as Base64 string
 | ||
|  | func (a *App) ReadFile() string { | ||
|  | 	selection, err := runtime.OpenFileDialog(a.ctx, runtime.OpenDialogOptions{ | ||
|  | 		Title: "Select File", | ||
|  | 		Filters: []runtime.FileFilter{ | ||
|  | 			{DisplayName: "Excel '97-2004 Workbooks (*.xls)", Pattern: "*.xls"}, | ||
|  | 			{DisplayName: "Excel Workbooks (*.xlsx)", Pattern: "*.xlsx"}, | ||
|  | 			{DisplayName: "Excel Binary Workbooks (*.xlsb)", Pattern: "*.xlsb"}, | ||
|  | 			{DisplayName: "Numbers Spreadsheets (*.numbers)", Pattern: "*.numbers"}, | ||
|  | 		}, | ||
|  | 	}) | ||
|  | 	if err != nil { | ||
|  | 		_, _ = runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{ | ||
|  | 			Type:    runtime.ErrorDialog, | ||
|  | 			Title:   "Selection Error", | ||
|  | 			Message: err.Error(), | ||
|  | 		}) | ||
|  | 		return "" | ||
|  | 	} | ||
|  | 	data, err := ioutil.ReadFile(selection) | ||
|  | 	if err != nil { | ||
|  | 		_, _ = runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{ | ||
|  | 			Type:    runtime.ErrorDialog, | ||
|  | 			Title:   "Read Error", | ||
|  | 			Message: err.Error(), | ||
|  | 		}) | ||
|  | 		return "" | ||
|  | 	} | ||
|  | 	return base64.StdEncoding.EncodeToString(data) | ||
|  | } | ||
|  | 
 | ||
|  | // SaveFile shows a save file dialog and returns the path
 | ||
|  | func (a *App) SaveFile() string { | ||
|  | 	selection, err := runtime.SaveFileDialog(a.ctx, runtime.SaveDialogOptions{ | ||
|  | 		Title:           "Select File", | ||
|  | 		DefaultFilename: "SheetJSWails.xlsx", | ||
|  | 		Filters: []runtime.FileFilter{ | ||
|  | 			{DisplayName: "Excel '97-2004 Workbooks (*.xls)", Pattern: "*.xls"}, | ||
|  | 			{DisplayName: "Excel Workbooks (*.xlsx)", Pattern: "*.xlsx"}, | ||
|  | 			{DisplayName: "Excel Binary Workbooks (*.xlsb)", Pattern: "*.xlsb"}, | ||
|  | 			{DisplayName: "Numbers Spreadsheets (*.numbers)", Pattern: "*.numbers"}, | ||
|  | 		}, | ||
|  | 	}) | ||
|  | 	if err != nil { | ||
|  | 		_, _ = runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{ | ||
|  | 			Type:    runtime.ErrorDialog, | ||
|  | 			Title:   "Selection Error", | ||
|  | 			Message: err.Error(), | ||
|  | 		}) | ||
|  | 		return "" | ||
|  | 	} | ||
|  | 	return selection | ||
|  | } | ||
|  | 
 | ||
|  | // WriteFile decodes the first argument and writes to file
 | ||
|  | func (a *App) WriteFile(b64 string, path string) { | ||
|  | 	buf, _ := base64.StdEncoding.DecodeString(b64) | ||
|  | 	_ = ioutil.WriteFile(path, buf, 0644) | ||
|  | } |