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);
}
主要功能
- 创建工作簿和工作表
- 写入文本、数字、公式
- 设置单元格格式(字体、颜色、边框等)
- 设置列宽和行高
- 添加图表(需要额外调用图表相关函数)
注意事项
- 该库是libxlsxwriter C库的Rust绑定
- 需要处理C字符串转换,使用std::ffi::CString
- 错误处理需要检查函数返回值是否为NULL或非零
- 资源释放由库内部管理,通常不需要手动释放
这个库提供了高效的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文件而优化。