任务一完成
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"mime/multipart"
|
||||
"strconv"
|
||||
|
||||
"github.com/xuri/excelize/v2"
|
||||
)
|
||||
|
||||
// GetColumnName 获取Excel列名 (1->A, 2->B, ..., 27->AA)
|
||||
func GetColumnName(n int) string {
|
||||
columnName := ""
|
||||
for n > 0 {
|
||||
n--
|
||||
columnName = string(rune('A'+n%26)) + columnName
|
||||
n /= 26
|
||||
}
|
||||
return columnName
|
||||
}
|
||||
|
||||
// CreateExcelFile 创建Excel文件
|
||||
func CreateExcelFile() *excelize.File {
|
||||
return excelize.NewFile()
|
||||
}
|
||||
|
||||
// OpenExcelFile 打开Excel文件
|
||||
func OpenExcelFile(file *multipart.FileHeader) (*excelize.File, error) {
|
||||
src, err := file.Open()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer src.Close()
|
||||
return excelize.OpenReader(src)
|
||||
}
|
||||
|
||||
// WriteExcelRows 写入Excel行数据
|
||||
func WriteExcelRows(f *excelize.File, sheetName string, rows [][]interface{}) error {
|
||||
for i, row := range rows {
|
||||
for j, cell := range row {
|
||||
cellName := fmt.Sprintf("%s%d", GetColumnName(j+1), i+1)
|
||||
if err := f.SetCellValue(sheetName, cellName, cell); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// WriteExcelRow 写入单行数据
|
||||
func WriteExcelRow(f *excelize.File, sheetName string, rowIndex int, row []interface{}) error {
|
||||
for j, cell := range row {
|
||||
cellName := fmt.Sprintf("%s%d", GetColumnName(j+1), rowIndex)
|
||||
if err := f.SetCellValue(sheetName, cellName, cell); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ExcelToBuffer 将Excel文件写入Buffer
|
||||
func ExcelToBuffer(f *excelize.File) (*bytes.Buffer, error) {
|
||||
return f.WriteToBuffer()
|
||||
}
|
||||
|
||||
// ReadExcelRows 读取Excel所有行
|
||||
func ReadExcelRows(f *excelize.File, sheetName string) ([][]string, error) {
|
||||
return f.GetRows(sheetName)
|
||||
}
|
||||
|
||||
// SetCellValueAuto 自动类型设置单元格值
|
||||
func SetCellValueAuto(f *excelize.File, sheetName, cell string, value string) error {
|
||||
// 尝试解析为数字
|
||||
if v, err := strconv.ParseFloat(value, 64); err == nil {
|
||||
return f.SetCellValue(sheetName, cell, v)
|
||||
}
|
||||
if v, err := strconv.ParseInt(value, 10, 64); err == nil {
|
||||
return f.SetCellValue(sheetName, cell, v)
|
||||
}
|
||||
return f.SetCellValue(sheetName, cell, value)
|
||||
}
|
||||
Reference in New Issue
Block a user