扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLSX / XLSM / XLTM 等多种文档格式
专注于为中小企业提供成都做网站、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业扶余免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
安装
如果您使用 Go Modules 管理软件包,请使用下面的命令来安装最新版本。
创建 Excel 文档
下面是一个创建 Excel 文档的简单例子:
读取 Excel 文档
下面是读取 Excel 文档的例子:
参见
写表时在循环中的cell
应该新声明的变量var cell1 *xlsx.Cell 吧
然后下面用cell1变量写值
不然好像写不进去
使用的方法 :sheet.SetColWidth(1, 1, 30.0)
// Set the width of a range of columns.
//min 开始的列, max 结束的列
// eg:(1,1,10) 第一行设置为10
// (1,3,10) 第一行到第三行设置为10
// 通过设置多条,达到设置全部列的宽度的目的
func (s *Sheet) SetColWidth(min, max int, width float64)
如
维基百科中反射的定义:在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。
golang reflect包实现了反射。动态的获得程序运行时对象的结构和信息。
reflect 包中提供了两个基础的关于反射的函数来获取上述的接口和结构体:
func TypeOf(i interface{}) Type
func ValueOf(i interface{}) Value
大体上可以这样理解,TypeOf获取对象的类型信息,ValueOf获取对象中存储的值。
golang tag
golang中可以为结构体的字段添加tag。golang本身的encoding/json包解析json使用了tag,一些开源的orm框架如gorm,也使用了tag。tag可以方便的为结构体的字段添加一些信息,用reflect可以读取到,加以利用。
这是一个用tag标记列名以实现结构体自动生成xlsx的例子:
```
type Employee struct{
ID int `xlsx:”工号”`
Name string `xlsx:”姓名”`
Email string `xlsx:”邮箱”`
}
func Outputxlsx(es []*Employee) ([]byte, error) {
xt := reflect.TypeOf(es[0])
xv := reflect.ValueOf(es[0])
rows := [][]interface{}{}
headers := []interface{}{}
for i := 0; i xt.Elem().NumField(); i++ {
head, ok := xt.Elem().Field(i).Tag.Lookup("xlsx")
if ok {
headers = append(headers, head)
}
}
for _, e := range es {
cells := []interface{}{}
xv := reflect.ValueOf(e)
for i := 0; i xv.Elem().NumField(); i++ {
_, ok := xt.Elem().Field(i).Tag.Lookup("xlsx")
if ok {
cells = append(cells, xv.Elem().Field(i).Interface())
}
}
rows = append(rows, cells)
}
file := xlsx.NewFile()
sheet, _ := file.AddSheet("sheet1")
row := sheet.AddRow()
for _, header := range headers {
row.AddCell().Value = fmt.Sprintf("%v", header)
}
for _, v := range rows {
row := sheet.AddRow()
for _, vv := range v {
row.AddCell().Value = fmt.Sprintf("%v", vv)
}
}
var buffer bytes.Buffer
if err := file.Write(buffer); err != nil {
return nil, err
}
return buffer.Bytes(), nil
}
```
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流