增加导出数据到Excel的方法
This commit is contained in:
113
docs/factory.md
113
docs/factory.md
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user