excelV2

package
v1.66.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 26, 2026 License: Apache-2.0 Imports: 14 Imported by: 0

README

ExcelV2 使用方法

写入 Excel

  1. 新建文件

    func TestWriter1(t *testing.T) {
    	excelByFile := NewWriter().
    		SetFilename(File(filesystemV4.NewFile(filesystemV4.Rel("./test-by-file.xlsx")))).
    		SetSheet(SheetName("Sheet 1")) // 通过名称选择一个工作表
    
    	if err := excelByFile.Save(); err != nil {
    		t.Errorf("保存失败(by file):%v\n", err)
    	}
    
    	excelByFilename := NewWriter().
    		SetFilename(Filename("./test-by-filename.xlsx")).
    		SetSheet(CreateSheet("Sheet B")) // 创建一个新的工作表
    
    	if err := excelByFilename.Save(); err != nil {  // 保存到本地
    		t.Errorf("保存失败(by filename):%v\n", err)
    	}
    
    	t.Logf("OK")
    }
    
  2. 提供下载

    func (*FileManagerAPI) DownloadExcel(c *gin.Context) {
    	excelByFilename := excelV2.NewWriter(
    		excelV2.Filename("./test-by-filename.xlsx"),
    		excelV2.CreateSheet("Sheet B"),
    	)
    
    	if err := excelByFilename.Download(c.Writer); err != nil {
    		httpModule.NewForbidden(httpModule.Errorf("下载失败:%w\n", err)).WithAccept(c)
    	}
    }
    
  3. 写入内容

    func TestWriter2(t *testing.T) {
    	var err error
    
    	// 设置三行数据
    	rows := NewRows(
    		3, // 从第三行开始
    		NewRow(
    			NewCellInt(1),
    			NewCell("张三"),
    			NewCellBool(true),
    			NewCellTime(time.Date(2025, 1, 2, 0, 0, 0, 0, time.Local)),
    		),
    		NewRow(
    			NewCellInt(2),
    			NewCell("李四"),
    			NewCellBool(false),
    			NewCellTime(time.Date(2024, 3, 4, 0, 0, 0, 0, time.Local)),
    		),
    		NewRow(
    			NewCellInt(3),
    			NewCell("王五"),
    			NewCellBool(true),
    			NewCellTime(time.Date(2023, 5, 6, 0, 0, 0, 0, time.Local)),
    		),
    	)
    
    	// 追加两行数据
    	rows.AppendRows(
    		NewRow(
    			NewCellInt(4),
    			NewCell("赵六"),
    			NewCellBool(false),
    			NewCellTime(time.Date(2022, 7, 8, 0, 0, 0, 0, time.Local)),
    		),
    		NewRow(
    			NewCellInt(5),
    			NewCell("孙七"),
    			NewCellBool(true),
    			NewCellTime(time.Date(2021, 9, 10, 0, 0, 0, 0, time.Local)),
    		),
    	)
    
    	excelWriter := NewWriter().SetFilename(Filename("./test.xlsx")).
    		SetSheet(SheetIndex(0)).  // 通过索引选择一个工作表
    		Write(rows)
    
    	if err = excelWriter.Save(); err != nil {
    		t.Errorf("保存失败:%v\n", err)
    	}
    
    	t.Logf("OK")
    }
    
  4. 设置样式

    func TestWriter3(t *testing.T) {
    	rows := NewRows(
    		5, // 从第5行开始
    		NewRow(
    			NewCellInt(
    				1, // 设置内容
    				Font(CellFontOpt{
    					Family:     "宋体",
    					Bold:       true,
    					Italic:     false,
    					RGB:        "red",
    					PatternRGB: "pink",
    					Size:       15,
    				}), // 设置字体样式
    				Border(
    					CellBorderRGBOpt{
    						Top:          "green",
    						Bottom:       "black",
    						Left:         "white",
    						Right:        "red",
    						DiagonalUp:   "purple",
    						DiagonalDown: "blue",
    					},
    					CellBorderStyleOpt{
    						Top:          1,
    						Bottom:       2,
    						Left:         3,
    						Right:        4,
    						DiagonalUp:   5,
    						DiagonalDown: 6,
    					},
    				), // 设置边框样式
    				Alignment(CellAlignmentOpt{
    					Horizontal: "right",
    					Vertical:   "bottom",
    					WrapText:   true,
    				}), // 设置字体对齐
    			),
    			NewCell("张三"),
    			NewCellBool(true),
    			NewCellTime(time.Date(2025, 1, 2, 0, 0, 0, 0, time.Local)),
    		),
    	)
    
    	excelWriter := NewWriter().SetFilename(Filename("./test.xlsx")).
    		SetSheet(SheetIndex(0)). // 通过索引选择一个工作表
    		Write(rows)
    
    	if err := excelWriter.Save(); err != nil {
    		t.Errorf("保存失败:%v\n", err)
    	}
    
    	t.Logf("OK")
    }
    
  5. 读取文件

    func TestReader1(t *testing.T) {
    	reader := NewReader().
    		SetFilename(Filename("./test-by-filename.xlsx")).
    		SetOpenFile(UnzipXMLSizeLimit(10*1024*1024), UnzipSizeLimit(10<<30)).
    		Read(
    			"Sheet B",
    			func(rowNum int, rows *excelize.Rows) (err error) {
    				var cols []string
    				if cols, err = rows.Columns(); err != nil {
    					return
    				}
    
    				for colNum := range cols {
    					value := cols[colNum]
    					t.Logf("列:%v\t", value)
    				}
    
    				return
    			},
    			OriginalRow(5),
    			FinishedRow(10),
    		)
    	_ = reader.GetRawExcel()
    }
    

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AttrAlignment added in v1.66.0

type AttrAlignment struct {
	// contains filtered or unexported fields
}

func (*AttrAlignment) Register added in v1.66.0

func (my *AttrAlignment) Register(cell *Cell)

type AttrBorder added in v1.66.0

type AttrBorder struct {
	// contains filtered or unexported fields
}

func (*AttrBorder) Register added in v1.66.0

func (my *AttrBorder) Register(cell *Cell)

type AttrContent added in v1.66.0

type AttrContent struct {
	// contains filtered or unexported fields
}

func (*AttrContent) Register added in v1.66.0

func (my *AttrContent) Register(cell *Cell)

type AttrContentType added in v1.66.0

type AttrContentType struct {
	// contains filtered or unexported fields
}

func (*AttrContentType) Register added in v1.66.0

func (my *AttrContentType) Register(cell *Cell)

type AttrCoordinate added in v1.66.0

type AttrCoordinate struct {
	// contains filtered or unexported fields
}

func (*AttrCoordinate) Register added in v1.66.0

func (my *AttrCoordinate) Register(cell *Cell)

type AttrFilename added in v1.66.0

type AttrFilename struct {
	// contains filtered or unexported fields
}

func (*AttrFilename) RegisterForReader added in v1.66.0

func (my *AttrFilename) RegisterForReader(reader Reader)

func (*AttrFilename) RegisterForWriter added in v1.66.0

func (my *AttrFilename) RegisterForWriter(writer Writer)

type AttrFont added in v1.66.0

type AttrFont struct {
	// contains filtered or unexported fields
}

func (*AttrFont) Register added in v1.66.0

func (my *AttrFont) Register(cell *Cell)

type AttrOpenFileSize added in v1.66.0

type AttrOpenFileSize struct {
	// contains filtered or unexported fields
}

type AttrReadRangeRow added in v1.66.0

type AttrReadRangeRow struct {
	// contains filtered or unexported fields
}

func (*AttrReadRangeRow) RegisterForReader added in v1.66.0

func (my *AttrReadRangeRow) RegisterForReader(reader Reader)

func (*AttrReadRangeRow) RegisterForWriter added in v1.66.0

func (my *AttrReadRangeRow) RegisterForWriter(_ Writer)

type AttrSheet added in v1.66.0

type AttrSheet struct {
	// contains filtered or unexported fields
}

func (*AttrSheet) RegisterForReader added in v1.66.0

func (my *AttrSheet) RegisterForReader(reader Reader)

func (*AttrSheet) RegisterForWriter added in v1.66.0

func (my *AttrSheet) RegisterForWriter(writer Writer)

type AttrSheetIndex added in v1.66.0

type AttrSheetIndex struct {
	// contains filtered or unexported fields
}

type AttrSheetName added in v1.66.0

type AttrSheetName struct {
	// contains filtered or unexported fields
}

type AttrUnzipSizeLimit added in v1.66.0

type AttrUnzipSizeLimit struct {
	// contains filtered or unexported fields
}

func (*AttrUnzipSizeLimit) RegisterForReader added in v1.66.0

func (my *AttrUnzipSizeLimit) RegisterForReader(reader Reader)

func (*AttrUnzipSizeLimit) RegisterForWriter added in v1.66.0

func (my *AttrUnzipSizeLimit) RegisterForWriter(_ Writer)

type AttrUnzipXMLSizeLimit added in v1.66.0

type AttrUnzipXMLSizeLimit struct {
	// contains filtered or unexported fields
}

func (*AttrUnzipXMLSizeLimit) RegisterForReader added in v1.66.0

func (my *AttrUnzipXMLSizeLimit) RegisterForReader(reader Reader)

func (*AttrUnzipXMLSizeLimit) RegisterForWriter added in v1.66.0

func (my *AttrUnzipXMLSizeLimit) RegisterForWriter(_ Writer)

type BaseAttributer added in v1.66.0

type BaseAttributer interface {
	RegisterForWriter(writer Writer)
	RegisterForReader(reader Reader)
}

type Cell added in v1.53.3

type Cell struct {
	// contains filtered or unexported fields
}

func (*Cell) GetAlignment added in v1.66.0

func (my *Cell) GetAlignment() CellAlignmentOpt

GetAlignment 获取字体对齐

func (*Cell) GetBorder added in v1.53.3

func (my *Cell) GetBorder() anySlice.AnySlicer[excelize.Border]

GetBorder 获取边框属性

func (*Cell) GetContent added in v1.53.3

func (my *Cell) GetContent() any

GetContent 获取内容

func (*Cell) GetContentType added in v1.53.3

func (my *Cell) GetContentType() CellContentType

GetContentType 获取内容类型

func (*Cell) GetCoordinate added in v1.53.3

func (my *Cell) GetCoordinate() string

GetCoordinate 获取坐标

func (*Cell) GetFont added in v1.66.0

func (my *Cell) GetFont() CellFontOpt

GetFont 获取字体属性

func (*Cell) SetAttrs added in v1.53.3

func (my *Cell) SetAttrs(attrs ...CellAttributer) ICell

SetAttrs 设置属性

func (*Cell) SetCoordinate added in v1.66.0

func (my *Cell) SetCoordinate(coordinate string) ICell

SetCoordinate 设置坐标

func (*Cell) SetRowNum added in v1.66.0

func (my *Cell) SetRowNum(rowNum uint) ICell

SetRowNum 设置行号

type CellAlignmentOpt added in v1.66.0

type CellAlignmentOpt struct {
	Horizontal, Vertical string
	WrapText             bool
}

type CellAttributer added in v1.53.3

type CellAttributer interface{ Register(cell *Cell) }

func Alignment added in v1.66.0

func Alignment(alignment CellAlignmentOpt) CellAttributer

func Border added in v1.66.0

func Border(borderRGB CellBorderRGBOpt, borderStyle CellBorderStyleOpt) CellAttributer

func Content added in v1.66.0

func Content(content any) CellAttributer

func ContentType added in v1.66.0

func ContentType(contentType CellContentType) CellAttributer

func Coordinate added in v1.66.0

func Coordinate(coordinate string) CellAttributer

func Font added in v1.66.0

func Font(font CellFontOpt) CellAttributer

type CellBorderOpt added in v1.66.0

type CellBorderOpt struct {
	Type  string
	RGB   string
	Style int
}

type CellBorderRGBOpt added in v1.66.0

type CellBorderRGBOpt struct{ Top, Bottom, Left, Right, DiagonalUp, DiagonalDown string }

type CellBorderStyleOpt added in v1.66.0

type CellBorderStyleOpt struct{ Top, Bottom, Left, Right, DiagonalUp, DiagonalDown int }

type CellContentType added in v1.53.3

type CellContentType string
const (
	CellContentTypeAny     CellContentType = "ANY"
	CellContentTypeFormula CellContentType = "FORMULA"
	CellContentTypeInt     CellContentType = "INT"
	CellContentTypeFloat64 CellContentType = "FLOAT"
	CellContentTypeBool    CellContentType = "BOOL"
	CellContentTypeTime    CellContentType = "TIME"
)

type CellFontOpt added in v1.66.0

type CellFontOpt struct {
	Family          string
	Bold, Italic    bool
	RGB, PatternRGB string
	Size            float64
}

type ExcelAttributer added in v1.66.0

type FilenameAttributer added in v1.66.0

type FilenameAttributer BaseAttributer

func File added in v1.66.0

func Filename added in v1.66.0

func Filename(filename string) FilenameAttributer

type ICell added in v1.66.0

type ICell interface {
	SetAttrs(attrs ...CellAttributer) ICell
	GetCoordinate() string
	SetCoordinate(coordinate string) ICell
	SetRowNum(rowNum uint) ICell
	GetContent() any
	GetContentType() CellContentType
	GetFont() CellFontOpt
	GetBorder() anySlice.AnySlicer[excelize.Border]
	GetAlignment() CellAlignmentOpt
}

func NewCell added in v1.66.0

func NewCell(content any, attrs ...CellAttributer) ICell

func NewCellBool added in v1.66.0

func NewCellBool(content bool, attrs ...CellAttributer) ICell

func NewCellFloat64 added in v1.66.0

func NewCellFloat64(content float64, attrs ...CellAttributer) ICell

func NewCellFormula added in v1.66.0

func NewCellFormula(content string, attrs ...CellAttributer) ICell

func NewCellInt added in v1.66.0

func NewCellInt(content int, attrs ...CellAttributer) ICell

func NewCellTime added in v1.66.0

func NewCellTime(content time.Time, attrs ...CellAttributer) ICell

type IRow added in v1.66.0

type IRow interface {
	SetCells(cells ...ICell) IRow
	AppendCells(cells ...ICell) IRow
	GetCells() []ICell
	SetRowNum(rowNum uint) IRow
	GetRowNum() uint
}

func NewRow added in v1.66.0

func NewRow(cells ...ICell) IRow

NewRow 新建行数据

func NewRowByNum added in v1.66.0

func NewRowByNum(rowNum uint, cells ...ICell) IRow

NewRowByNum 通过行号新建行数据

type IRows added in v1.66.0

type IRows interface {
	GetError() error
	SetError(err error) IRows
	GetRows() []IRow
	SetRows(rows ...IRow) IRows
	AppendRows(rows ...IRow) IRows
}

func NewRows added in v1.66.0

func NewRows(originalRow uint, rows ...IRow) IRows

type OpenFileAttributer added in v1.66.0

type OpenFileAttributer BaseAttributer

func UnzipSizeLimit added in v1.66.0

func UnzipSizeLimit(size int64) OpenFileAttributer

func UnzipXMLSizeLimit added in v1.66.0

func UnzipXMLSizeLimit(size int64) OpenFileAttributer

type Read added in v1.66.0

type Read struct {
	Error error
	// contains filtered or unexported fields
}

func (*Read) GetRawExcel added in v1.66.0

func (my *Read) GetRawExcel() *excelize.File

GetRawExcel 获取原始 excelize.File 对象

func (*Read) Read added in v1.66.0

func (my *Read) Read(
	sheetName string,
	callback func(rowNum int, rows *excelize.Rows) (err error),
	attrs ...ReadRangeAttributer,
) Reader

Read 读取数据,参数为可变参数 ReadRangeAttributer 接口类型,可以通过 OriginalRow 和 FinishedRow 来指定读取范围

func (*Read) SetFilename added in v1.66.0

func (my *Read) SetFilename(attr ExcelAttributer) Reader

SetFilename 设置文件名

func (*Read) SetOpenFile added in v1.66.0

func (my *Read) SetOpenFile(attrs ...OpenFileAttributer) Reader

SetOpenFile 设置打开文件的属性,例如解压缩大小限制等

type ReadRangeAttributer added in v1.66.0

type ReadRangeAttributer BaseAttributer

func FinishedRow added in v1.66.0

func FinishedRow(row int) ReadRangeAttributer

func OriginalRow added in v1.66.0

func OriginalRow(row int) ReadRangeAttributer

type Reader

type Reader interface {
	GetRawExcel() *excelize.File

	SetFilename(attr ExcelAttributer) Reader

	SetOpenFile(attrs ...OpenFileAttributer) Reader
	Read(sheetName string, callback func(rowNum int, rows *excelize.Rows) (err error), attrs ...ReadRangeAttributer) Reader
	// contains filtered or unexported methods
}

func NewReader added in v1.66.0

func NewReader(attrs ...ExcelAttributer) Reader

type Row added in v1.53.3

type Row struct {
	Error error
	// contains filtered or unexported fields
}

func (*Row) AppendCells added in v1.66.0

func (my *Row) AppendCells(cells ...ICell) IRow

AppendCells 追加 cells

func (*Row) GetCells added in v1.53.3

func (my *Row) GetCells() []ICell

GetCells 获取 cells

func (*Row) GetRowNum added in v1.66.0

func (my *Row) GetRowNum() uint

GetRowNum 获取行号

func (*Row) SetCells added in v1.66.0

func (my *Row) SetCells(cells ...ICell) IRow

SetCells 设置 cells

func (*Row) SetRowNum added in v1.66.0

func (my *Row) SetRowNum(rowNum uint) IRow

SetRowNum 设置行号

type Rows added in v1.66.0

type Rows struct {
	Error error
	// contains filtered or unexported fields
}

func (*Rows) AppendRows added in v1.66.0

func (my *Rows) AppendRows(rows ...IRow) IRows

AppendRows 追加 rows 自动赋值行号

func (*Rows) GetError added in v1.66.0

func (my *Rows) GetError() error

GetError 获取错误

func (*Rows) GetRows added in v1.66.0

func (my *Rows) GetRows() []IRow

GetRows 获取 rows

func (*Rows) SetError added in v1.66.0

func (my *Rows) SetError(err error) IRows

SetError 设置错误

func (*Rows) SetRows added in v1.66.0

func (my *Rows) SetRows(rows ...IRow) IRows

SetRows 设置 rows 自动赋值行号

type SheetAttributer added in v1.66.0

type SheetAttributer BaseAttributer

func CreateSheet added in v1.66.0

func CreateSheet(name string) SheetAttributer

func SheetIndex added in v1.66.0

func SheetIndex(index int) SheetAttributer

func SheetName added in v1.66.0

func SheetName(name string) SheetAttributer

type Write added in v1.66.0

type Write struct {
	Error error
	// contains filtered or unexported fields
}

func (*Write) CreateSheet added in v1.66.0

func (my *Write) CreateSheet(attr SheetAttributer) Writer

CreateSheet 创建工作表

func (*Write) Download added in v1.66.0

func (my *Write) Download(writer http.ResponseWriter) error

Download 下载Excel

func (*Write) GetRawExcel added in v1.66.0

func (my *Write) GetRawExcel() *excelize.File

GetRawExcel 获取原始 excelize.File 对象

func (*Write) Save added in v1.66.0

func (my *Write) Save() (err error)

Save 保存文件

func (*Write) SetFilename added in v1.66.0

func (my *Write) SetFilename(attr ExcelAttributer) Writer

SetFilename 设置文件名

func (*Write) SetSheet added in v1.66.0

func (my *Write) SetSheet(attr SheetAttributer) Writer

SetSheet 设置当前工作表,参数为 SheetAttributer 接口类型,可以通过 SheetName 或 SheetIndex 来指定工作表

func (*Write) Write added in v1.66.0

func (my *Write) Write(rows ...IRows) Writer

Write 写入数据

type Writer added in v1.53.3

type Writer interface {
	GetRawExcel() *excelize.File

	SetFilename(attr ExcelAttributer) Writer

	SetSheet(attr SheetAttributer) Writer

	CreateSheet(attr SheetAttributer) Writer
	Save() (err error)
	Download(writer http.ResponseWriter) error
	Write(rows ...IRows) Writer
	// contains filtered or unexported methods
}

func NewWriter added in v1.66.0

func NewWriter() Writer

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL