增加导出数据到Excel的方法

This commit is contained in:
2025-12-28 11:53:24 +08:00
parent f8f4df4073
commit 47cbdbb2de
9 changed files with 1415 additions and 29 deletions

View File

@@ -26,6 +26,7 @@
| **邮件** | `SendEmail()` | `fac.SendEmail(to, subject, body)` |
| **短信** | `SendSMS()` | `fac.SendSMS(phones, params)` |
| **存储** | `UploadFile()`, `GetFileURL()` | `fac.UploadFile(ctx, key, file)` |
| **Excel导出** | `ExportToExcel()`, `ExportToExcelFile()` | `fac.ExportToExcelFile("users.xlsx", "用户列表", columns, users)` |
| **日期时间** | `Now()`, `ParseDateTime()`, `FormatDateTime()` 等 | `fac.Now("Asia/Shanghai")` |
| **时间工具** | `GetTimestamp()`, `IsToday()`, `GetBeginOfWeek()` 等 | `fac.GetTimestamp()` |
| **加密工具** | `HashPassword()`, `MD5()`, `SHA256()`, `GenerateSMSCode()` 等 | `fac.HashPassword("password")` |
@@ -42,6 +43,7 @@
|------|----------|----------|
| `GetDatabase()` | `*gorm.DB` | 数据库复杂查询、事务、关联查询等 |
| `GetRedisClient()` | `*redis.Client` | Hash、List、Set、ZSet、Pub/Sub等高级操作 |
| `GetExcel()` | `*excel.Excel` | 多工作表、自定义样式、图表等高级操作 |
| `GetLogger()` | `*logger.Logger` | Close()、设置全局logger等 |
## 使用方法
@@ -145,7 +147,54 @@ url, _ := fac.GetFileURL("images/test.jpg", 0)
url, _ := fac.GetFileURL("images/test.jpg", 3600)
```
### 6. Redis操作(黑盒模式,推荐)
### 6. Excel导出(黑盒模式,推荐)
```go
import (
"net/http"
"time"
"git.toowon.com/jimmy/go-common/excel"
)
// 定义结构体
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
CreatedAt time.Time `json:"created_at"`
}
// 准备数据
users := []User{
{ID: 1, Name: "Alice", Email: "alice@example.com", CreatedAt: time.Now()},
{ID: 2, Name: "Bob", Email: "bob@example.com", CreatedAt: time.Now()},
}
// 定义导出列
columns := []factory.ExportColumn{
{Header: "ID", Field: "ID", Width: 10},
{Header: "姓名", Field: "Name", Width: 20},
{Header: "邮箱", Field: "Email", Width: 30},
{
Header: "创建时间",
Field: "CreatedAt",
Width: 20,
Format: excel.FormatDateTimeDefault,
},
}
// 导出到文件
err := fac.ExportToExcelFile("users.xlsx", "用户列表", columns, users)
// 导出到HTTP响应
func exportUsersHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
w.Header().Set("Content-Disposition", "attachment; filename=users.xlsx")
fac.ExportToExcel(w, "用户列表", columns, users)
}
```
### 7. Redis操作黑盒模式推荐
```go
import "context"
@@ -168,7 +217,7 @@ err := fac.RedisDelete(ctx, "user:123", "user:456")
exists, err := fac.RedisExists(ctx, "user:123")
```
### 7. 数据库操作(黑盒模式)
### 8. 数据库操作(黑盒模式)
```go
// 获取数据库对象(已初始化,黑盒模式)
@@ -183,7 +232,7 @@ db.Find(&users)
db.Create(&user)
```
### 8. 日期时间操作(黑盒模式)
### 9. 日期时间操作(黑盒模式)
```go
// 获取当前时间
@@ -205,7 +254,7 @@ unix := fac.ToUnix(now)
t2 := fac.FromUnix(unix, "Asia/Shanghai")
```
### 9. 时间操作(黑盒模式)
### 10. 时间操作(黑盒模式)
```go
// 时间戳
@@ -240,7 +289,7 @@ timeInfo := fac.GenerateTimeInfoWithTimezone(now, "Asia/Shanghai")
fmt.Printf("UTC: %s, Local: %s, Unix: %d\n", timeInfo.UTC, timeInfo.Local, timeInfo.Unix)
```
### 10. 金额计算(黑盒模式)
### 11. 金额计算(黑盒模式)
```go
// 元转分
@@ -260,7 +309,7 @@ version := fac.GetVersion()
fmt.Println("当前版本:", version)
```
### 13. HTTP响应黑盒模式
### 13. HTTP响应黑盒模式,推荐
```go
import "net/http"
@@ -277,7 +326,7 @@ fac.Error(w, 1001, "用户不存在")
fac.SystemError(w, "系统错误")
```
### 14. HTTP请求解析黑盒模式
### 14. HTTP请求解析黑盒模式,推荐
```go
import "net/http"
@@ -300,7 +349,7 @@ isActive := fac.ConvertBool(r.FormValue("is_active"), false)
timezone := fac.GetTimezone(r)
```
### 15. Redis操作获取客户端对象
### 15. Redis操作获取客户端对象,高级功能
```go
import (
@@ -525,6 +574,54 @@ func main() {
**返回:** 文件访问URL和错误信息
### Excel导出方法黑盒模式
#### ExportToExcel(w io.Writer, sheetName string, columns []ExportColumn, data interface{}) error
导出数据到Writer。
**参数:**
- `w`: Writer对象如http.ResponseWriter
- `sheetName`: 工作表名称(可选,默认为"Sheet1"
- `columns`: 列定义
- `data`: 数据列表可以是结构体切片或实现了ExportData接口的对象
**返回:** 错误信息
**示例:**
```go
fac.ExportToExcel(w, "用户列表", columns, users)
```
#### ExportToExcelFile(filePath string, sheetName string, columns []ExportColumn, data interface{}) error
导出数据到文件。
**参数:**
- `filePath`: 文件路径
- `sheetName`: 工作表名称(可选,默认为"Sheet1"
- `columns`: 列定义
- `data`: 数据列表
**返回:** 错误信息
**示例:**
```go
fac.ExportToExcelFile("users.xlsx", "用户列表", columns, users)
```
#### GetExcel() (*excel.Excel, error)
获取Excel导出器对象高级功能时使用
**返回:** Excel导出器对象和错误信息
**说明:**
- 仅在需要使用高级功能时使用
- 推荐使用黑盒方法:`ExportToExcel()``ExportToExcelFile()`
**详细说明请参考:[Excel导出工具文档](./excel.md)**
### Redis方法黑盒模式
#### RedisGet(ctx context.Context, key string) (string, error)