golang高效生成Excel(XLSX)文件插件库goxlsxwriter的使用

golang高效生成Excel(XLSX)文件插件库goxlsxwriter的使用

goxlsxwriter是一个提供Go语言绑定的库,用于操作libxlsxwriter C库来高效生成Excel(XLSX)文件。

安装

使用goxlsxwriter前需要先安装libxlsxwriter库。从源码安装步骤如下:

$ git clone https://github.com/jmcnamara/libxlsxwriter.git
$ cd libxlsxwriter
$ make
$ make install

示例代码

下面是一个完整的示例,展示如何使用goxlsxwriter创建Excel文件并添加内容和格式:

package main

import (
    "github.com/fterrag/goxlsxwriter"
)

func main() {
    // 创建一个新的工作簿,文件名为example.xlsx
    workbook := goxlsxwriter.NewWorkbook("example.xlsx", nil)
    // 添加一个工作表,命名为"Sheet 1"
    worksheet := goxlsxwriter.NewWorksheet(workbook, "Sheet 1")

    // 创建一个新的格式对象
    format := goxlsxwriter.NewFormat(workbook)

    // 设置格式属性
    format.SetFontName("Verdana")  // 设置字体
    format.SetFontSize(8)          // 设置字体大小
    format.SetFontColor(0x008000)  // 设置字体颜色(绿色)

    // 在A1单元格写入字符串并应用格式
    worksheet.WriteString(0, 0, "Hello from A1!", format)
    // 在B5单元格写入字符串(不使用格式)
    worksheet.WriteString(4, 1, "This cell is B5", nil)

    // 设置图片插入选项
    options := &goxlsxwriter.ImageOptions{
        XScale: 0.5,  // X轴缩放比例
        YScale: 0.5,  // Y轴缩放比例
    }
    // 在D2单元格插入图片
    worksheet.InsertImage(1, 3, "resources/gopher.png", options)

    // 关闭工作簿(保存文件)
    workbook.Close()
}

功能说明

  1. 创建工作簿和工作表
  2. 设置单元格格式(字体、大小、颜色等)
  3. 写入字符串内容
  4. 插入图片并设置缩放比例

待完成事项

  • 增加测试覆盖率
  • 完善文档
  • 扩展libxlsxwriter API的覆盖范围

贡献指南

欢迎通过以下方式参与贡献:

  • 提交PR(包含测试和文档)
  • 添加或改进文档
  • 报告问题
  • 建议新功能或改进

这个库提供了简单易用的接口来生成Excel文件,适合需要高效生成XLSX格式报表的Go语言项目。


更多关于golang高效生成Excel(XLSX)文件插件库goxlsxwriter的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang高效生成Excel(XLSX)文件插件库goxlsxwriter的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用goxlsxwriter高效生成Excel(XLSX)文件

goxlsxwriter是Go语言中一个高效生成Excel(XLSX)文件的库,它是libxlsxwriter的Go绑定。相比其他Excel库,goxlsxwriter具有以下优势:

  1. 高性能:直接写入XLSX格式,内存占用低
  2. 功能丰富:支持公式、图表、格式设置等
  3. 纯Go实现:无需依赖外部程序或Excel软件

安装

go get github.com/fterrag/goxlsxwriter

基本用法

1. 创建简单Excel文件

package main

import (
	"github.com/fterrag/goxlsxwriter"
)

func main() {
	// 创建工作簿
	workbook := goxlsxwriter.NewWorkbook("simple.xlsx")
	defer workbook.Close()

	// 创建工作表
	worksheet := workbook.AddWorksheet("Sheet1")

	// 写入数据
	worksheet.WriteString(0, 0, "姓名")  // A1
	worksheet.WriteString(0, 1, "年龄")  // B1
	worksheet.WriteString(1, 0, "张三")  // A2
	worksheet.WriteNumber(1, 1, 28)    // B2
	worksheet.WriteString(2, 0, "李四")  // A3
	worksheet.WriteNumber(2, 1, 32)    // B3

	// 保存文件
	workbook.Close()
}

2. 设置单元格格式

package main

import (
	"github.com/fterrag/goxlsxwriter"
)

func main() {
	workbook := goxlsxwriter.NewWorkbook("formatting.xlsx")
	defer workbook.Close()

	worksheet := workbook.AddWorksheet("Sheet1")

	// 创建格式对象
	headerFormat := workbook.AddFormat()
	headerFormat.SetBold()
	headerFormat.SetBgColor(goxlsxwriter.ColorYellow)
	headerFormat.SetAlign("center")

	// 写入带格式的标题
	worksheet.WriteStringWithFormat(0, 0, "产品", headerFormat)
	worksheet.WriteStringWithFormat(0, 1, "销量", headerFormat)

	// 写入数据
	worksheet.WriteString(1, 0, "手机")
	worksheet.WriteNumber(1, 1, 1200)
	worksheet.WriteString(2, 0, "笔记本")
	worksheet.WriteNumber(2, 1, 850)
	worksheet.WriteString(3, 0, "平板")
	worksheet.WriteNumber(3, 1, 620)

	// 设置列宽
	worksheet.SetColumn(0, 0, 15) // A列宽度15
	worksheet.SetColumn(1, 1, 10) // B列宽度10

	workbook.Close()
}

3. 使用公式和图表

package main

import (
	"github.com/fterrag/goxlsxwriter"
)

func main() {
	workbook := goxlsxwriter.NewWorkbook("formula_chart.xlsx")
	defer workbook.Close()

	worksheet := workbook.AddWorksheet("数据")

	// 写入销售数据
	worksheet.WriteString(0, 0, "月份")
	worksheet.WriteString(0, 1, "销售额")
	
	months := []string{"1月", "2月", "3月", "4月", "5月", "6月"}
	sales := []float64{42000, 48000, 56000, 52000, 61000, 69000}
	
	for i, month := range months {
		worksheet.WriteString(i+1, 0, month)
		worksheet.WriteNumber(i+1, 1, sales[i])
	}
	
	// 添加求和公式
	worksheet.WriteString(len(months)+1, 0, "总计")
	worksheet.WriteFormula(len(months)+1, 1, "SUM(B2:B7)")

	// 创建图表工作表
	chartSheet := workbook.AddWorksheet("图表")
	
	// 创建柱状图
	chart := workbook.AddChart(goxlsxwriter.ChartTypeColumn)
	chart.SetTitle("上半年销售趋势")
	chart.SetXAxis("月份")
	chart.SetYAxis("销售额")
	
	// 添加数据系列
	chart.AddSeries(
		"=数据!$A$2:$A$7", // 类别范围(月份)
		"=数据!$B$2:$B$7", // 值范围(销售额)
	)
	
	// 将图表插入到工作表
	chartSheet.InsertChart(1, 1, chart)

	workbook.Close()
}

高级功能

1. 合并单元格

worksheet.MergeRange(0, 0, 0, 3, "2023年销售报表", headerFormat)

2. 条件格式

// 创建红色格式
redFormat := workbook.AddFormat()
redFormat.SetBgColor(goxlsxwriter.ColorRed)

// 添加条件格式:小于50000标红
worksheet.ConditionalFormatting(
	"B2:B7", // 应用范围
	goxlsxwriter.ConditionTypeCell,
	goxlsxwriter.ConditionOperatorLessThan,
	"50000",
	"", // 停止条件
	redFormat,
)

3. 冻结窗格

worksheet.FreezePanes(1, 0) // 冻结第一行

性能优化建议

  1. 批量写入:尽量减少单个单元格的写入操作,可以预先组织数据后批量写入
  2. 复用格式:创建格式对象后可以重复使用,避免频繁创建
  3. 关闭资源:确保在完成后调用workbook.Close()
  4. 内存管理:对于超大文件,考虑分批写入

goxlsxwriter是生成Excel文件的强大工具,特别适合需要高性能和丰富格式要求的场景。相比其他Go语言的Excel库,它在处理大型文件时表现更优。

回到顶部