From b0db2dd29a3024ea678790d2f869894a8d18afab Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Thu, 9 Nov 2023 17:06:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/base.go | 6 ++ api/controller/export.go | 71 +++++++++++++ api/requests/export.go | 4 + api/service/export.go | 15 +++ go.mod | 17 +++- go.sum | 27 +++++ utils/export.go | 213 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 348 insertions(+), 5 deletions(-) create mode 100644 api/controller/export.go create mode 100644 api/requests/export.go create mode 100644 api/service/export.go create mode 100644 utils/export.go diff --git a/api/controller/base.go b/api/controller/base.go index 2a8765e..87588bb 100644 --- a/api/controller/base.go +++ b/api/controller/base.go @@ -14,6 +14,7 @@ type Api struct { inquiryManage // 问诊管理 caManage // ca管理 financeManage // 财务管理 + exportManage // 导出管理 } // SysSetting 系统设置 @@ -78,3 +79,8 @@ type caManage struct { type financeManage struct { DoctorWithdrawal // 提现记录 } + +// 导出管理 +type exportManage struct { + Export +} diff --git a/api/controller/export.go b/api/controller/export.go new file mode 100644 index 0000000..6af2ce4 --- /dev/null +++ b/api/controller/export.go @@ -0,0 +1,71 @@ +package controller + +import ( + "fmt" + "github.com/gin-gonic/gin" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/requests" + "hospital-admin-api/api/responses" + "hospital-admin-api/global" + "hospital-admin-api/utils" +) + +// Export 导出 +type Export struct{} + +// DoctorWithdrawal 提现记录 +func (r *Export) DoctorWithdrawal(c *gin.Context) { + doctorWithdrawalRequest := requests.DoctorWithdrawalRequest{} + req := doctorWithdrawalRequest.DoctorWithdrawalExportList + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + if req.Page == 0 { + req.Page = 1 + } + + if req.PageSize == 0 { + req.PageSize = 20 + } + + doctorWithdrawalDao := dao.DoctorWithdrawalDao{} + doctorWithdrawal, total, err := doctorWithdrawalDao.GetDoctorWithdrawalExportListSearch(req, req.Page, req.PageSize) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + fmt.Println(doctorWithdrawal) + fmt.Println(total) + + header := []utils.CellData{ + {Value: "医生姓名", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "医生手机号", CellType: "string", NumberFmt: "", ColWidth: 18}, + {Value: "申请提现金额", CellType: "float", NumberFmt: "0.0000", ColWidth: 18}, + {Value: "审核日期", CellType: "date", NumberFmt: "yyyy-mm-dd hh:mm:ss", ColWidth: 30}, + } + + _, err = utils.Export(header) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + // res := dto.GetDoctorWithdrawalListDto(doctorWithdrawal) + // + // result := make(map[string]interface{}) + // result["page"] = req.Page + // result["page_size"] = req.PageSize + // result["total"] = total + // result["data"] = res + responses.Ok(c) +} diff --git a/api/requests/export.go b/api/requests/export.go new file mode 100644 index 0000000..b1645aa --- /dev/null +++ b/api/requests/export.go @@ -0,0 +1,4 @@ +package requests + +type ExportRequest struct { +} diff --git a/api/service/export.go b/api/service/export.go new file mode 100644 index 0000000..b1d3f92 --- /dev/null +++ b/api/service/export.go @@ -0,0 +1,15 @@ +package service + +import ( + "hospital-admin-api/api/model" +) + +// ExportService 导出 +type ExportService struct { +} + +// DoctorWithdrawal 提现记录 +func (r *ExportService) DoctorWithdrawal([]*model.DoctorWithdrawal) (string, error) { + + return "", nil +} diff --git a/go.mod b/go.mod index a85baac..c7f6e05 100644 --- a/go.mod +++ b/go.mod @@ -70,7 +70,11 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/richardlehane/mscfb v1.0.4 // indirect + github.com/richardlehane/msoleps v1.0.3 // indirect + github.com/shopspring/decimal v1.3.1 // indirect github.com/spf13/afero v1.9.5 // indirect github.com/spf13/cast v1.5.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect @@ -81,12 +85,15 @@ require ( github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect github.com/wechatpay-apiv3/wechatpay-go v0.2.17 // indirect + github.com/xuri/efp v0.0.0-20230802181842-ad255f2331ca // indirect + github.com/xuri/excelize/v2 v2.8.0 // indirect + github.com/xuri/nfp v0.0.0-20230819163627-dc951e3ffe1a // indirect golang.org/x/arch v0.3.0 // indirect - golang.org/x/crypto v0.9.0 // indirect - golang.org/x/image v0.7.0 // indirect - golang.org/x/net v0.10.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/text v0.9.0 // indirect + golang.org/x/crypto v0.12.0 // indirect + golang.org/x/image v0.11.0 // indirect + golang.org/x/net v0.14.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect golang.org/x/time v0.1.0 // indirect google.golang.org/protobuf v1.30.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go.sum b/go.sum index d1baaa5..26edb0a 100644 --- a/go.sum +++ b/go.sum @@ -279,6 +279,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/mojocn/base64Captcha v1.3.5 h1:Qeilr7Ta6eDtG4S+tQuZ5+hO+QHbiGAJdi4PfoagaA0= github.com/mojocn/base64Captcha v1.3.5/go.mod h1:/tTTXn4WTpX9CfrmipqRytCpJ27Uw3G6I7NcP2WwcmY= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= @@ -292,8 +294,15 @@ github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qR github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= +github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= +github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= +github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN0AQoVM= +github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y= github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= @@ -336,6 +345,12 @@ github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4d github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/wechatpay-apiv3/wechatpay-go v0.2.17 h1:i4YJA/6BqAbi2YfyPZBjpeEeO/+oa4UbKP4gSTRhhQg= github.com/wechatpay-apiv3/wechatpay-go v0.2.17/go.mod h1:A254AUBVB6R+EqQFo3yTgeh7HtyqRRtN2w9hQSOrd4Q= +github.com/xuri/efp v0.0.0-20230802181842-ad255f2331ca h1:uvPMDVyP7PXMMioYdyPH+0O+Ta/UO1WFfNYMO3Wz0eg= +github.com/xuri/efp v0.0.0-20230802181842-ad255f2331ca/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= +github.com/xuri/excelize/v2 v2.8.0 h1:Vd4Qy809fupgp1v7X+nCS/MioeQmYVVzi495UCTqB7U= +github.com/xuri/excelize/v2 v2.8.0/go.mod h1:6iA2edBTKxKbZAa7X5bDhcCg51xdOn1Ar5sfoXRGrQg= +github.com/xuri/nfp v0.0.0-20230819163627-dc951e3ffe1a h1:Mw2VNrNNNjDtw68VsEj2+st+oCSn4Uz7vZw6TbhcV1o= +github.com/xuri/nfp v0.0.0-20230819163627-dc951e3ffe1a/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -363,6 +378,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -378,6 +395,8 @@ golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMx golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.7.0 h1:gzS29xtG1J5ybQlv0PuyfE3nmc6R4qB73m6LUUmvFuw= golang.org/x/image v0.7.0/go.mod h1:nd/q4ef1AKKYl/4kft7g+6UyGbdiqWqTP1ZAbRoV7Rg= +golang.org/x/image v0.11.0 h1:ds2RoQvBvYTiJkwpSFDwCcDFNX7DqjL2WsUgTNk0Ooo= +golang.org/x/image v0.11.0/go.mod h1:bglhjqbqVuEb9e9+eNR45Jfu7D+T4Qan+NhQk8Ck2P8= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -438,6 +457,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -504,9 +525,13 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -518,6 +543,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/utils/export.go b/utils/export.go new file mode 100644 index 0000000..9461c48 --- /dev/null +++ b/utils/export.go @@ -0,0 +1,213 @@ +package utils + +import ( + "github.com/xuri/excelize/v2" +) + +// func Export(widths []int) (bool, error) { +// f := excelize.NewFile() +// defer func() { +// _ = f.Close() +// }() +// +// // 创建一个工作表 +// index, err := f.NewSheet("Sheet1") +// if err != nil { +// return false, err +// } +// +// // 设置工作簿的默认工作表 +// f.SetActiveSheet(index) +// +// // 单元格对齐样式 +// alignment := &excelize.Alignment{ +// Horizontal: "center", +// Vertical: "center", +// } +// +// // 单元格颜色填充样式 +// fill := excelize.Fill{ +// Type: "pattern", +// Pattern: 1, +// Color: []string{"#c9daf8"}, +// Shading: 0, +// } +// +// // 第一行的左、右、下边框 +// border := []excelize.Border{ +// { +// Type: "left,right,bottom", +// Color: "", +// Style: 1, +// }, +// } +// +// // 工作表样式 +// style, err := f.NewStyle( +// &excelize.Style{ +// Fill: fill, +// Alignment: alignment, +// Border: border, +// }, +// ) +// if err != nil { +// return false, err +// } +// +// // 依次设置每一列的列宽 +// widths = []int{18, 18, 18, 18, 18, 20, 23, 46, 18, 30, 30, 18, 18, 30, 18, 30} +// for col, width := range widths { +// // 获取列名 +// colName, err := excelize.ColumnNumberToName(col + 1) +// if err != nil { +// return false, err +// } +// +// // 设置列宽 +// err = f.SetColWidth("Sheet1", colName, colName, float64(width)) +// if err != nil { +// return false, err +// } +// +// // 设置列背景颜色 +// err = f.SetCellStyle("Sheet1", colName+"1", colName+"1", style) +// if err != nil { +// return false, err +// } +// } +// +// // 设置行高 +// err = f.SetRowStyle("Sheet1", 1, 10, style) +// if err != nil { +// return false, err +// } +// +// if err := f.SaveAs("output.xlsx"); err != nil { +// return false, err +// } +// +// return true, nil +// } + +// CellData 列内容 +type CellData struct { + Value interface{} // 值 + CellType string // 类型 + NumberFmt string // 格式化方式 + ColWidth int // 列宽 +} + +func Export(header []CellData) ([]byte, error) { + f := excelize.NewFile() + defer func() { + _ = f.Close() + }() + + // 创建一个工作表 + index, err := f.NewSheet("Sheet1") + if err != nil { + return nil, err + } + + // 设置工作簿的默认工作表 + f.SetActiveSheet(index) + + // 设置工作表默认字体 + err = f.SetDefaultFont("宋体") + if err != nil { + return nil, err + } + + // 统一单元格对齐样式 + alignment := &excelize.Alignment{ + Horizontal: "center", + Vertical: "center", + } + + // 设置行高 35-第一行 + err = f.SetRowHeight("Sheet1", 1, 35) + if err != nil { + return nil, err + } + + // 处理工作表表头 + for c, cell := range header { + // 获取列名 + colName, err := excelize.ColumnNumberToName(c + 1) + if err != nil { + return nil, err + } + + // 添加单元格的值 + err = f.SetCellValue("Sheet1", colName+"1", cell.Value) + if err != nil { + return nil, err + } + + // 单元格颜色填充样式 + fill := excelize.Fill{ + Type: "pattern", + Pattern: 1, + Color: []string{"#c9daf8"}, + Shading: 0, + } + + // 第一行的左、右、下边框 + border := []excelize.Border{ + { + Type: "left", + Color: "#000000", + Style: 1, + }, + { + Type: "right", + Color: "#000000", + Style: 1, + }, + { + Type: "bottom", + Color: "#000000", + Style: 1, + }, + } + + // 设置单元格值类型和格式 + style, _ := f.NewStyle(&excelize.Style{ + Alignment: alignment, // 字体居中 + Fill: fill, // 背景颜色 + Border: border, // 边框 + }) + err = f.SetCellStyle("Sheet1", colName+"1", colName+"1", style) + if err != nil { + return nil, err + } + + } + + // 处理工作表设置 + for c, cell := range header { + // 获取列名 + colName, err := excelize.ColumnNumberToName(c + 1) + if err != nil { + return nil, err + } + + // 设置列宽 + err = f.SetColWidth("Sheet1", colName, colName, float64(cell.ColWidth)) + if err != nil { + return nil, err + } + } + + // 保存文件 + if err := f.SaveAs("output.xlsx"); err != nil { + return nil, err + } + // buffer, err := f.WriteToBuffer() + // if err != nil { + // return nil, err + // } + // + // buffer.Bytes() + return nil, nil +}