package main
import (
"errors"
"fmt"
"github.com/gin-gonic/gin"
"github.com/xuri/excelize/v2"
)
func ReadExcel(file string, sheet string) ([][]string, []string, error) {
f, err := excelize.OpenFile(file)
if err != nil {
return [][]string{}, []string{}, err
}
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
sheets := f.GetSheetList()
if sheet == "" {
sheet = sheets[0]
}
rows, er := f.GetRows(sheet)
if err != nil {
return [][]string{}, []string{}, er
}
header := rows[0]
rows = rows[1:]
return rows, header, err
}
func WriteExcel(header []string, data [][]interface{}, sheet string, filepath string) error {
f := excelize.NewFile()
headerAz, e := GetHeadAZ(len(header))
if e != nil {
return e
}
for key, value := range headerAz {
f.SetCellValue(sheet, fmt.Sprintf(value+"%d", 1), header[key])
}
line := 1
for _, v := range data {
line++
index := 0
for k, vv := range v {
if k <= len(header)-1 {
f.SetCellValue(sheet, fmt.Sprintf(headerAz[index]+"%d", line), vv)
}
index++
}
}
if err := f.SaveAs(filepath); err != nil {
return err
}
return nil
}
func WriteBuffer(header []string, data [][]interface{}, sheet string, c *gin.Context) error {
f := excelize.NewFile()
headerAz, e := GetHeadAZ(len(header))
if e != nil {
return e
}
for key, value := range headerAz {
f.SetCellValue(sheet, fmt.Sprintf(value+"%d", 1), header[key])
}
line := 1
for _, v := range data {
line++
index := 0
for k, vv := range v {
if k <= len(header)-1 {
f.SetCellValue(sheet, fmt.Sprintf(headerAz[index]+"%d", line), vv)
}
index++
}
}
err := f.Write(c.Writer)
if err != nil {
return err
}
return nil
}
func GetAZ() []string {
var az []string
var i int
for {
az = append(az, string(rune('A'+i)))
i++
if i > 25 {
break
}
}
return az
}
func GetHeadAZ(length int) ([]string, error) {
if length > 26*26 {
return []string{}, errors.New("列数超过限制")
}
az := GetAZ()
if length <= 26 {
return az[0:length], nil
}
arr := az
for _, value := range az {
for _, v := range az {
arr = append(arr, value+v)
if len(arr) == length {
goto ret
}
}
}
ret:
return arr, nil
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律