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