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)
 | |
| }
 |