go gui 编程 fyne 写的一个xlsx小工具 - 前端笔记-xlsx小工具 通过excelize 实现 表格的数据的读取 创建新表格进行保存 packagemain import(  ...

学习笔记

点滴记忆
回忆过往
首页>> web后端 >>go gui 编程 fyne 写的一个xlsx小工具 - 前端笔记
xlsx小工具 通过excelize 实现 表格的数据的读取  创建新表格进行保存


xlsx.gif

package main

import (
    "fmt"
    "fyne.io/fyne/v2"
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/dialog"
    "fyne.io/fyne/v2/storage"
    "fyne.io/fyne/v2/widget"
    "github.com/flopp/go-findfont"
    "github.com/xuri/excelize/v2"
    "os"
    "strconv"
    "strings"
)

// 初始化 中文字体的支持
func init() {
    fontPaths := findfont.List()
    for _path := range fontPaths {
        fmt.Println(path)
        //楷体:simkai.ttf
        //黑体:simhei.ttf
        if strings.Contains(path, "simkai.ttf") {
            os.Setenv("FYNE_FONT", path)
            break
        }
    }
    fmt.Println("=============")
}

/**
xlsx  只支持Sheet1表头的读取 和 复制
 */

func main() {
    MyApp := app.New()
    c := MyApp.NewWindow("xlsx小工具")

    xlsxs(c)
    c.Resize(fyne.NewSize(600600))  // fyne 窗口的大小
    c.ShowAndRun() // 运行窗口
}

func xlsxs(w fyne.Window) {

    // excelize 解析处理的 二维数组
    var str [][]string
    //标签控件
    label1 := widget.NewLabel("")
    // 选择文件对话框
    openFile := dialog.NewFileOpen(func(readCloser fyne.URIReadCloser, err error) {
        if readCloser == nil {
            return
        }
        // 设置标签控件 等于打开的文件地址
        label1.SetText(readCloser.URI().Path())
        // 传入 文件地址 返回 二位数组数据
        str = readers(readCloser.URI().Path())
    }, w)
    // 设置 选择文件对话框只支持查看 .xlsx 文件
    openFile.SetFilter(storage.NewExtensionFileFilter([]string{".xlsx"})) //只展示go文件

    // 按钮  打开 选择文件对话框
    button1 := widget.NewButton("打开 目标xlsx"func() {
        openFile.Show()
    })

    // 控件
    label2 := widget.NewLabel("")
    // 保存文件的 对话框
    saveFile := dialog.NewFileSave(func(writeCloser fyne.URIWriteCloser, err error) {
        if writeCloser == nil {
            return
        }
        // 标签控件的title 设置
        label2.SetText(writeCloser.URI().Path())
        // 传入 二维数组 和 保存文件地址  写入xlsx
        setxlsx(str, writeCloser.URI().Path())
    }, w)

    // 显示 保存文件对话框
    button2 := widget.NewButton("保存 xlsx"func() {
        saveFile.Show()
    })

    // 设置窗口  控件
    w.SetContent(container.NewVBox(container.NewHBox(label1, button1), container.NewHBox(label2, button2)))
}

// 读取xlsx
func readers(path string) [][]string {
    ferr := excelize.OpenFile(path) // 打开文件
    if err != nil {
        fmt.Println(err)
        return nil
    }

    // 获取 Sheet1 上所有单元格
    rowserr := f.GetRows("Sheet1")
    for _row := range rows {
        for _colCell := range row {
            fmt.Print(colCell, "\t")
        }
        fmt.Println()
    }
    return rows
}

// 设置 xlsx表格的value的
func setxlsx(str [][]string, path string) {
    f := excelize.NewFile()
    // 创建一个工作表
    index := f.NewSheet("Sheet1")

    // 单元格标头
    var CellType = []string{
        "A",
        "B",
        "C",
        "D",
        "E",
        "F",
        "G",
        "H",
        "I",
        "J",
        "K",
        "L",
        "M",
        "N",
        "O",
        "P",
        "Q",
        "R",
        "S",
        "T",
        "U",
        "V",
        "W",
        "X",
        "Y",
        "Z",
    }

    // 将二维数组转为map
    con := map[string]string{}
    for i := 0; i < len(str); i++ {
        for j := 0; j < len(str[i]); j++ {
            con[CellType[j]+strconv.Itoa(i+1)] = str[i][j]
        }
    }
    fmt.Println(con)
    // 设置单元格的值

    // 设置 单元格内容
    for k,v := range con {
        f.SetCellValue("Sheet1", k, v)
    }
    // 设置工作簿的默认工作表
    f.SetActiveSheet(index)
    // 根据指定路径保存文件
    if err := f.SaveAs(path); err != nil {
        fmt.Println(err)
    }
}


×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

打赏作者
版权所有,转载注意明处:前端笔记 » go gui 编程 fyne 写的一个xlsx小工具

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)