Rust Excel文件生成库libxlsxwriter-sys的使用,高效创建和操作XLSX格式的电子表格

Rust Excel文件生成库libxlsxwriter-sys的使用,高效创建和操作XLSX格式的电子表格

安装

在你的项目目录中运行以下Cargo命令:

cargo add libxlsxwriter-sys

或者在Cargo.toml中添加以下行:

libxlsxwriter-sys = "1.1.7"

基本使用示例

以下是使用libxlsxwriter-sys创建Excel文件的基本示例:

use libxlsxwriter_sys::*;

fn main() {
    // 创建一个新的工作簿
    let workbook = workbook_new("example.xlsx");
    
    // 添加一个工作表
    let worksheet = workbook_add_worksheet(workbook, std::ptr::null());
    
    // 设置列宽
    worksheet_set_column(worksheet, 0, 0, 20.0, std::ptr::null());
    
    // 添加格式
    let bold_format = workbook_add_format(workbook);
    format_set_bold(bold_format);
    
    // 写入数据
    worksheet_write_string(
        worksheet, 
        0, 0, 
        "Hello".as_ptr() as *const i8, 
        std::ptr::null()
    );
    
    worksheet_write_number(
        worksheet, 
        1, 0, 
        123.456, 
        std::ptr::null()
    );
    
    // 关闭工作簿
    workbook_close(workbook);
}

主要功能

  1. 创建工作簿和工作表
  2. 写入文本、数字、公式
  3. 设置单元格格式(字体、颜色、边框等)
  4. 设置列宽和行高
  5. 添加图表(需要额外调用图表相关函数)

注意事项

  1. 该库是libxlsxwriter C库的Rust绑定
  2. 需要处理C字符串转换,使用std::ffi::CString
  3. 错误处理需要检查函数返回值是否为NULL或非零
  4. 资源释放由库内部管理,通常不需要手动释放

这个库提供了高效的Excel文件生成能力,适合需要生成复杂Excel报表的Rust应用程序。

完整示例

下面是一个更完整的示例,展示了如何创建包含多种数据类型和格式的Excel文件:

use libxlsxwriter_sys::*;
use std::ffi::CString;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 创建新工作簿
    let workbook = workbook_new("sales_report.xlsx");
    if workbook.is_null() {
        return Err("Failed to create workbook".into());
    }

    // 添加工作表
    let worksheet = workbook_add_worksheet(workbook, std::ptr::null());
    if worksheet.is_null() {
        workbook_close(workbook);
        return Err("Failed to add worksheet".into());
    }

    // 创建格式
    let header_format = workbook_add_format(workbook);
    format_set_bold(header_format);
    format_set_bg_color(header_format, 0x00C0C0C0); // 灰色背景
    format_set_align(header_format, LXW_ALIGN_CENTER);

    let currency_format = workbook_add_format(workbook);
    format_set_num_format(currency_format, CString::new("¥#,##0.00")?.as_ptr());

    // 设置列宽
    worksheet_set_column(worksheet, 0, 0, 20.0, std::ptr::null()); // 产品列
    worksheet_set_column(worksheet, 1, 1, 15.0, std::ptr::null()); // 季度列
    worksheet_set_column(worksheet, 2, 2, 15.0, currency_format);  // 销售额列

    // 写入标题行
    let headers = ["产品", "季度", "销售额(元)"];
    for (col, header) in headers.iter().enumerate() {
        worksheet_write_string(
            worksheet,
            0, col as u32,
            CString::new(*header)?.as_ptr(),
            header_format,
        );
    }

    // 写入销售数据
    let sales_data = [
        ("笔记本电脑", "Q1", 1250000.0),
        ("笔记本电脑", "Q2", 1350000.0),
        ("智能手机", "Q1", 980000.0),
        ("智能手机", "Q2", 1200000.0),
    ];

    for (row, (product, quarter, amount)) in sales_data.iter().enumerate() {
        let row = row as u32 + 1; // 从第1行开始

        worksheet_write_string(
            worksheet,
            row, 0,
            CString::new(*product)?.as_ptr(),
            std::ptr::null(),
        );

        worksheet_write_string(
            worksheet,
            row, 1,
            CString::new(*quarter)?.as_ptr(),
            std::ptr::null(),
        );

        worksheet_write_number(
            worksheet,
            row, 2,
            *amount,
            currency_format,
        );
    }

    // 写入公式计算总计
    worksheet_write_string(
        worksheet,
        5, 1,
        CString::new("总计")?.as_ptr(),
        header_format,
    );

    worksheet_write_formula(
        worksheet,
        5, 2,
        CString::new("=SUM(C2:C5)")?.as_ptr(),
        currency_format,
    );

    // 关闭工作簿
    if workbook_close(workbook) != 0 {
        return Err("Failed to close workbook".into());
    }

    println!("Excel销售报表创建成功: sales_report.xlsx");
    Ok(())
}

1 回复

Rust Excel文件生成库libxlsxwriter-sys的使用指南

libxlsxwriter-sys是Rust对C库libxlsxwriter的绑定,用于高效创建和操作XLSX格式的电子表格文件。它提供了完整的Excel文件生成功能,支持格式设置、公式、图表等高级特性。

安装方法

Cargo.toml中添加依赖:

[dependencies]
libxlsxwriter-sys = "0.1"

基本使用方法

1. 创建简单Excel文件

use libxlsxwriter_sys::*;

fn main() {
    // 创建一个新工作簿
    let workbook = workbook_new("simple.xlsx");
    
    // 添加一个工作表
    let worksheet = workbook_add_worksheet(workbook, std::ptr::null());
    
    // 写入数据
    worksheet_write_string(worksheet, 0, 0, "Hello".as_ptr() as *const i8, std::ptr::null());
    worksheet_write_number(worksheet, 1, 0, 123.456, std::ptr::null());
    
    // 关闭工作簿
    workbook_close(workbook);
}

2. 使用格式设置

use libxlsxwriter_sys::*;

fn main() {
    let workbook = workbook_new("formats.xlsx");
    let worksheet = workbook_add_worksheet(workbook, std::ptr::null());
    
    // 创建格式
    let bold_format = workbook_add_format(workbook);
    format_set_bold(bold_format);
    
    let money_format = workbook_add_format(workbook);
    format_set_num_format(money_format, "$#,##0".as_ptr() as *const i8);
    
    // 使用格式写入数据
    worksheet_write_string(worksheet, 0, 0, "Item".as_ptr() as *const i8, bold_format);
    worksheet_write_string(worksheet, 0, 1, "Cost".as_ptr() as *const i8, bold_format);
    
    worksheet_write_string(worksheet, 极速,功能全面,专为处理Excel文件而优化。
回到顶部