调整Excel导出时使用的方法
This commit is contained in:
123
excel/excel.go
123
excel/excel.go
@@ -6,6 +6,7 @@ import (
|
||||
"reflect"
|
||||
"time"
|
||||
|
||||
"git.toowon.com/jimmy/go-common/tools"
|
||||
"github.com/xuri/excelize/v2"
|
||||
)
|
||||
|
||||
@@ -94,21 +95,33 @@ func (e *Excel) ExportToWriter(w io.Writer, sheetName string, columns []ExportCo
|
||||
sheetName = "Sheet1"
|
||||
}
|
||||
|
||||
// 删除默认工作表(如果存在)
|
||||
index, err := e.file.GetSheetIndex("Sheet1")
|
||||
if err == nil && index > 0 {
|
||||
e.file.DeleteSheet("Sheet1")
|
||||
}
|
||||
// 检查工作表是否已存在
|
||||
sheetIndex, err := e.file.GetSheetIndex(sheetName)
|
||||
if err != nil || sheetIndex == 0 {
|
||||
// 工作表不存在,需要创建
|
||||
// 如果sheetName不是"Sheet1",且默认"Sheet1"存在,则删除它
|
||||
if sheetName != "Sheet1" {
|
||||
defaultIndex, _ := e.file.GetSheetIndex("Sheet1")
|
||||
if defaultIndex > 0 {
|
||||
e.file.DeleteSheet("Sheet1")
|
||||
}
|
||||
}
|
||||
|
||||
// 创建新工作表
|
||||
_, err = e.file.NewSheet(sheetName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create sheet: %w", err)
|
||||
// 创建新工作表
|
||||
_, err = e.file.NewSheet(sheetName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create sheet: %w", err)
|
||||
}
|
||||
|
||||
// 重新获取工作表索引
|
||||
sheetIndex, err = e.file.GetSheetIndex(sheetName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get sheet index: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
// 设置活动工作表
|
||||
sheetIndex, err := e.file.GetSheetIndex(sheetName)
|
||||
if err == nil && sheetIndex > 0 {
|
||||
if sheetIndex > 0 {
|
||||
e.file.SetActiveSheet(sheetIndex)
|
||||
}
|
||||
|
||||
@@ -210,21 +223,33 @@ func (e *Excel) ExportToFile(filePath string, sheetName string, columns []Export
|
||||
sheetName = "Sheet1"
|
||||
}
|
||||
|
||||
// 删除默认工作表(如果存在)
|
||||
index, err := e.file.GetSheetIndex("Sheet1")
|
||||
if err == nil && index > 0 {
|
||||
e.file.DeleteSheet("Sheet1")
|
||||
}
|
||||
// 检查工作表是否已存在
|
||||
sheetIndex, err := e.file.GetSheetIndex(sheetName)
|
||||
if err != nil || sheetIndex == 0 {
|
||||
// 工作表不存在,需要创建
|
||||
// 如果sheetName不是"Sheet1",且默认"Sheet1"存在,则删除它
|
||||
if sheetName != "Sheet1" {
|
||||
defaultIndex, _ := e.file.GetSheetIndex("Sheet1")
|
||||
if defaultIndex > 0 {
|
||||
e.file.DeleteSheet("Sheet1")
|
||||
}
|
||||
}
|
||||
|
||||
// 创建新工作表
|
||||
_, err = e.file.NewSheet(sheetName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create sheet: %w", err)
|
||||
// 创建新工作表
|
||||
_, err = e.file.NewSheet(sheetName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create sheet: %w", err)
|
||||
}
|
||||
|
||||
// 重新获取工作表索引
|
||||
sheetIndex, err = e.file.GetSheetIndex(sheetName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get sheet index: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
// 设置活动工作表
|
||||
sheetIndex, err := e.file.GetSheetIndex(sheetName)
|
||||
if err == nil && sheetIndex > 0 {
|
||||
if sheetIndex > 0 {
|
||||
e.file.SetActiveSheet(sheetIndex)
|
||||
}
|
||||
|
||||
@@ -451,31 +476,49 @@ func (e *Excel) getColumnMaxWidth(sheetName string, colIndex int, maxRow int) fl
|
||||
return maxWidth
|
||||
}
|
||||
|
||||
// FormatDateTime 格式化日期时间(便捷函数)
|
||||
// 用于ExportColumn的Format字段
|
||||
func FormatDateTime(layout string) func(interface{}) string {
|
||||
// AdaptTimeFormatter 适配器函数:将tools包的格式化函数转换为Excel Format字段需要的函数类型
|
||||
// 允许直接使用tools包的任何格式化函数
|
||||
//
|
||||
// 示例:
|
||||
//
|
||||
// // 直接使用tools.FormatDate
|
||||
// Format: excel.AdaptTimeFormatter(tools.FormatDate)
|
||||
//
|
||||
// // 使用自定义格式化函数
|
||||
// Format: excel.AdaptTimeFormatter(func(t time.Time) string {
|
||||
// return tools.Format(t, "2006-01-02 15:04:05", "Asia/Shanghai")
|
||||
// })
|
||||
func AdaptTimeFormatter(fn func(time.Time, ...string) string) func(interface{}) string {
|
||||
return func(value interface{}) string {
|
||||
if t, ok := value.(time.Time); ok {
|
||||
return t.Format(layout)
|
||||
return fn(t)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
// FormatDate 格式化日期(便捷函数)
|
||||
// 用于ExportColumn的Format字段,格式:2006-01-02
|
||||
func FormatDate(value interface{}) string {
|
||||
if t, ok := value.(time.Time); ok {
|
||||
return t.Format("2006-01-02")
|
||||
}
|
||||
return ""
|
||||
// formatDateTime 格式化日期时间(内部便捷函数)
|
||||
// 用于ExportColumn的Format字段
|
||||
// layout: 时间格式,如 "2006-01-02 15:04:05"
|
||||
// timezone: 可选时区,如果为空则使用时间对象本身的时区
|
||||
// 直接调用 tools.Format() 方法
|
||||
func formatDateTime(layout string, timezone ...string) func(interface{}) string {
|
||||
return AdaptTimeFormatter(func(t time.Time, _ ...string) string {
|
||||
return tools.Format(t, layout, timezone...)
|
||||
})
|
||||
}
|
||||
|
||||
// FormatDateTimeDefault 格式化日期时间(便捷函数)
|
||||
// formatDate 格式化日期(内部便捷函数)
|
||||
// 用于ExportColumn的Format字段,格式:2006-01-02
|
||||
// 直接调用 tools.FormatDate() 方法
|
||||
var formatDate = AdaptTimeFormatter(tools.FormatDate)
|
||||
|
||||
// formatDateTimeDefault 格式化日期时间(内部便捷函数)
|
||||
// 用于ExportColumn的Format字段,格式:2006-01-02 15:04:05
|
||||
func FormatDateTimeDefault(value interface{}) string {
|
||||
if t, ok := value.(time.Time); ok {
|
||||
return t.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
return ""
|
||||
}
|
||||
// 直接调用 tools.FormatDateTime() 方法
|
||||
var formatDateTimeDefault = AdaptTimeFormatter(tools.FormatDateTime)
|
||||
|
||||
// formatTime 格式化时间(内部便捷函数)
|
||||
// 用于ExportColumn的Format字段,格式:15:04:05
|
||||
// 直接调用 tools.FormatTime() 方法
|
||||
var formatTime = AdaptTimeFormatter(tools.FormatTime)
|
||||
|
||||
Reference in New Issue
Block a user