Golang使用Excelize库生成报表的方法与实践

Golang使用Excelize库生成报表的方法与实践 golang excelize 如何为每一页创建页眉,以及如何进行打印页面设置

2 回复

看起来你问的是这个模块:GitHub - qax-os/excelize: Go语言库,用于读写Microsoft Excel™(XLAM / XLSM / XLSX / XLTM / XLTX)电子表格

根据文档,看起来你可以使用 File.SetHeaderFooter 来为每个页面设置页眉。

对于打印页面设置,有 File.SetPageLayoutFile.SetPageMargins 及其相关选项。

希望对你有帮助!

更多关于Golang使用Excelize库生成报表的方法与实践的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Excelize中为每一页设置页眉和打印页面配置可以通过以下方式实现:

package main

import (
    "fmt"
    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()

    // 设置页眉
    if err := f.SetHeaderFooter("Sheet1", &excelize.FormatHeaderFooter{
        DifferentFirst:   false, // 首页不同
        DifferentOddEven: false, // 奇偶页不同
        OddHeader:        "&C&\"Arial,Bold\"&14报表标题&A日期: &D",
        OddFooter:        "&R页码: &P / &N",
        EvenHeader:       "&C&\"Arial,Bold\"&14报表标题&A日期: &D",
        EvenFooter:       "&R页码: &P / &N",
    }); err != nil {
        fmt.Println(err)
        return
    }

    // 设置打印页面
    if err := f.SetPageLayout("Sheet1", &excelize.PageLayoutOptions{
        Size:             excelize.PageLayoutPaperSizeA4, // A4纸张
        Orientation:      &excelize.PageLayoutOrientationLandscape, // 横向
        FirstPageNumber:  &[]uint{1}[0], // 起始页码
        AdjustTo:         &[]uint{100}[0], // 缩放比例
        FitToHeight:      &[]int{1}[0], // 高度适应
        FitToWidth:       &[]int{1}[0], // 宽度适应
        BlackAndWhite:    &[]bool{false}[0], // 黑白打印
        Draft:            &[]bool{false}[0], // 草稿质量
        CellComments:     &excelize.PageLayoutCellCommentsEndSheet, // 批注位置
        Errors:           &excelize.PageLayoutErrorsDash, // 错误显示方式
        Scale:            &[]uint{100}[0], // 缩放
        PageLayoutOption: []excelize.PageLayoutOption{
            {Name: "CenterHorizontally", Value: true}, // 水平居中
            {Name: "CenterVertically", Value: false},  // 垂直居中
        },
    }); err != nil {
        fmt.Println(err)
        return
    }

    // 设置打印区域
    if err := f.SetDefinedName(&excelize.DefinedName{
        Name:     "_xlnm.Print_Area",
        RefersTo: "Sheet1!$A$1:$F$50",
        Scope:    "Sheet1",
    }); err != nil {
        fmt.Println(err)
        return
    }

    // 设置打印标题行
    if err := f.SetDefinedName(&excelize.DefinedName{
        Name:     "_xlnm.Print_Titles",
        RefersTo: "Sheet1!$1:$1",
        Scope:    "Sheet1",
    }); err != nil {
        fmt.Println(err)
        return
    }

    // 设置分页符
    if err := f.InsertPageBreak("Sheet1", "A20"); err != nil {
        fmt.Println(err)
        return
    }

    // 保存文件
    if err := f.SaveAs("报表.xlsx"); err != nil {
        fmt.Println(err)
        return
    }
}

页眉格式代码说明:

  • &C:居中
  • &L:左对齐
  • &R:右对齐
  • &D:当前日期
  • &T:当前时间
  • &P:当前页码
  • &N:总页数
  • &"字体,样式"&大小:字体设置

打印设置关键参数:

  • Size:纸张大小,支持A3、A4、Letter等
  • Orientation:方向,Portrait纵向或Landscape横向
  • FirstPageNumber:起始页码
  • AdjustTo:缩放百分比
  • FitToHeight/FitToWidth:适应页面
  • PageLayoutOption:额外选项,如居中、网格线等

分页控制:

  • InsertPageBreak:在指定位置插入分页符
  • RemovePageBreak:移除分页符
  • GetPageBreaks:获取所有分页符
回到顶部