Go语言excelize包-01-入门示例、工作簿(创建、打开、保存、关闭、默认字体)、文件Writer

1. 从几个示例开始

1.1 创建、写入

  • 示例代码
package main

import (
	"fmt"

	"github.com/xuri/excelize/v2"
)

func main() {
	f := excelize.NewFile()
	// 创建工作表
	indexXiShu := f.NewSheet("西蜀")
	f.NewSheet("东吴")
	f.NewSheet("曹魏")
	// 向表中单元格写入数据
	f.SetCellValue("西蜀", "B2", "刘备")
	f.SetCellValue("西蜀", "B3", "关羽")
	f.SetCellValue("西蜀", "B4", "张飞")
	f.SetCellValue("东吴", "B2", "孙权")
	f.SetCellValue("曹魏", "B2", "曹操")
	// 设置工作簿的默认工作表
	f.SetActiveSheet(indexXiShu)
	// 根据指定路径保存文件
	if err := f.SaveAs("sanGuo.xlsx"); err != nil {
		fmt.Println(err)
	}
}
  • 生成表格如下
    在这里插入图片描述

1.2 读表

读上例中创建工作本中的表

package main

import (
	"fmt"

	"github.com/xuri/excelize/v2"
)

func main() {
	f, err := excelize.OpenFile("sanGuo.xlsx")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer func() {
		if err := f.Close(); err != nil {
			fmt.Println(err)
		}
	}()
	// 获取 "东吴" Sheet 表中指定单元格的值
	cell, err := f.GetCellValue("东吴", "B2")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("打印 东吴sheet B2格 内容: %q\n",cell)

	// 获取 "西蜀" Sheet 上所有单元格
	rows, err := f.GetRows("西蜀")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("打印西蜀 sheet 内容 : %+v\n",rows)
	for rowNumber, row := range rows {
		fmt.Printf("行号:%d\n",rowNumber)
		for a, colCell := range row {
			fmt.Printf("   单元格 %d : %q\n",a,colCell)
		}
		fmt.Println()
	}
}

结果输出

打印 东吴sheet B2格 内容: "孙权"
打印西蜀 sheet 内容 : [[] [ 刘备] [ 关羽] [ 张飞]]
行号:0

行号:1
   单元格 0 : ""
   单元格 1 : "刘备"

行号:2
   单元格 0 : ""
   单元格 1 : "关羽"

行号:3
   单元格 0 : ""
   单元格 1 : "张飞"
  • 以上代码,我们打印 rows 变量时可以看到,实际是用一个[][]string表示了sheet中有值的区域: [ [A1 A2] [B1 B2] [C1 C2] ](只是有些值是空的,我们看不到)
  • 在我们遍历单元格打印的时候,可以验证以上结果。

1.3 数据流

  • 完整代码
package main

import (
	"fmt"
	"net/http"

	"github.com/xuri/excelize/v2"
)

func process(w http.ResponseWriter, req *http.Request) {
	file, _, err := req.FormFile("file")
	if err != nil {
		fmt.Fprintf(w, err.Error())
		return
	}
	defer file.Close()
	f, err := excelize.OpenReader(file)
	if err != nil {
		fmt.Fprintf(w, err.Error())
		return
	}
	f.NewSheet("NewSheet")
	w.Header().Set("Content-Disposition", "attachment; filename=Book1.xlsx")
	w.Header().Set("Content-Type", req.Header.Get("Content-Type"))
	if _, err := f.WriteTo(w); err != nil {
		fmt.Fprintf(w, err.Error())
	}
	return
}

func main() {
	http.HandleFunc("/process", process)
	http.ListenAndServe(":1840", nil)
}
  • linux服务器上传下载测试
[root@liubei-02 ~]# curl --location --request GET 'http://10.10.204.78:1840/process' --form 'file=@/tmp/template.xlsx' -O -J
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 15125    0  7460  100  7665   129k   132k --:--:-- --:--:-- --:--:--  133k
curl: Saved to filename 'Book1.xlsx'

2. 工作簿操作

2.1 创建工作簿

  • 语法
func NewFile() *File
  • 示例

见 1.1

2.2 打开工作簿

  • 语法
func OpenFile(filename string, opt ...Options) (*File, error)
  • 示例

见1.2

2.3 保存工作簿

  • 语法
func (f *File) SaveAs(name string, opt ...Options) error
  • 示例

见 1.1

2.4 关闭工作簿

  • 语法
func (f *File) Close() error
  • 示例

见1.2

2.5 设置默认字体

func (f *File) SetDefaultFont(fontName string)

2.6 获取默认字体

func (f *File) GetDefaultFont() string

3. 文件 Writer

3.1 Write

将当前文件内容写入给定的 io.Writer

  • 语法
func (f *File) Write(w io.Writer) error

3.2 WriteTo

  • 语法
func (f *File) WriteTo(w io.Writer) (int64, error)
  • 完整示例

见 “1.3 数据流”

3.3 WriteToBuffer

  • 语法
func (f *File) WriteToBuffer() (*bytes.Buffer, error)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄德公笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值