Excel 电子表格的开源 C 库
创建、编辑、操作和转换 Microsoft Excel 2007 和 XLSX 电子表格文件,合并电子表格,通过开源 C API 将图表添加到工作表。
Libxlsxwriter 是一个开源 C 库,可用于处理 Microsoft Excel 2007 以及您自己的应用程序中的 Excel XLSX 文件。 Libxlsxwriter 库与 Excel XLSX 文件非常兼容,允许开发人员轻松创建、修改和处理 XLSX 电子表格。该库可在 Linux、FreeBSD、OpenBSD、OS X、iOS 和 Windows 等领先平台上顺利运行。它可以编译为 32 位和 64 位。
开源的 Libxlsxwriter 库经过了很好的优化,可以正常处理大型电子表格文件。它包括对几个重要功能的支持,例如合并电子表格单元格、定义名称、自动过滤器支持、将图表添加到工作表页面、数据验证和下拉列表、添加 PNG/JPEG 图像、添加单元格注释、使用 VBA 宏,在工作表中添加或删除列,等等。
Libxlsxwriter 入门
Libxlsxwriter 支持 CMake 构建和安装库。请使用以下命令。
通过 CRAN 安装 libxlsxwriter
cmake $SOURCE_DIR $FLAGS
从 GitHub 克隆 libxlsxwriter 源代码存储库。请使用以下代码。
通过 GitHub 安装 libxlsxwriter
it clone https://github.com/jmcnamara/libxlsxwriter.git
# Or use your preferred protocol instead of https
C API 创建 Excel XLSX 电子表格
开源 Libxlsxwriter API 使软件开发人员能够在其 C 应用程序中创建和修改 Excel XLSX 电子表格。 API 支持将文本、数字、公式和超链接写入 Excel 电子表格文件中的多个工作表。您可以轻松地从 Excel 文件导入或导出数据,还可以合并或拆分工作表、搜索数据等。
通过CAPI创建Excel表格
#include "xlsxwriter.h"
int main() {
/* Create a new workbook and add a worksheet. */
lxw_workbook *workbook = workbook_new("demo.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
/* Add a format. */
lxw_format *format = workbook_add_format(workbook);
/* Set the bold property for the format */
format_set_bold(format);
/* Change the column width for clarity. */
worksheet_set_column(worksheet, 0, 0, 20, NULL);
/* Write some simple text. */
worksheet_write_string(worksheet, 0, 0, "Hello", NULL);
/* Text with formatting. */
worksheet_write_string(worksheet, 1, 0, "World", format);
/* Write some numbers. */
worksheet_write_number(worksheet, 2, 0, 123, NULL);
worksheet_write_number(worksheet, 3, 0, 123.456, NULL);
/* Insert an image. */
worksheet_insert_image(worksheet, 1, 2, "logo.png");
workbook_close(workbook);
return 0;
}
使用 Excel 图表
Libxlsxwriter API 提供了使用 C 命令向 Excel 电子表格添加和修改图表的功能。您可以使用图表标记功能来生成和管理图表。您还可以添加趋势线来指示数据中的趋势,并添加误差线来指示数据中的误差范围。您还可以将数据标签添加到图表系列以指示绘制的数据点的值。您可以轻松地将图表格式属性应用于任何图表对象。
通过Libxlsx作者创建Excel工作表图
#include "xlsxwriter.h"
int main() {
lxw_workbook *workbook = new_workbook("chart.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
// User function to add data to worksheet, not shown here.
write_worksheet_data(worksheet);
// Create a chart object.
lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN);
// In the simplest case we just add some value data series.
// The NULL categories will default to 1 to 5 like in Excel.
chart_add_series(chart, NULL, "=Sheet1!$A$1:$A$5");
chart_add_series(chart, NULL, "=Sheet1!$B$1:$B$5");
chart_add_series(chart, NULL, "=Sheet1!$C$1:$C$5");
// Insert the chart into the worksheet
worksheet_insert_chart(worksheet, CELL("B7"), chart);
return workbook_close(workbook);
}
使用 Excel 数据验证
数据验证是一种 Excel 功能,可让开发人员控制用户在 Excel 单元格中输入的内容。例如,您可以限制用户输入 1 到 6 之间的数字,或确保单元格中的文本输入少于 25 个字符。 Libxlsxwriter API 提供了许多选项来验证用户输入,例如任何值、整数、小数、列表、日期、时间、文本长度或自定义公式。
如果不是b/t1和100、显示自定义消息
// Display a custom info message when integer isn't between 1 and 100.
data_validation->validate = LXW_VALIDATION_TYPE_INTEGER;
data_validation->criteria = LXW_VALIDATION_CRITERIA_BETWEEN;
data_validation->minimum_number = 1;
data_validation->maximum_number = 100;
data_validation->input_title = "Enter an integer:";
data_validation->input_message = "between 1 and 100";
data_validation->error_title = "Input value is not valid!";
data_validation->error_message = "It should be an integer between 1 and 100";
使用 VBA 宏
Libxlsxwriter API 使软件开发人员可以轻松地将包含函数或宏的 VBA 文件添加到 XLSX 工作簿。包含函数和宏的 Excel 文件应使用 XLSM 扩展名,否则 Excel 会报错并可能无法打开文件。 VBA 宏通常指的是工作簿和工作表对象。如果未明确指定 VBA 代号,则 libxlsxwriter 将使用 Excel 默认值 ThisWorkbook 和 Sheet1、Sheet2 等。
在C应用程序中添加BA马科斯
#include "xlsxwriter.h"
int main() {
/* Note the xlsm extension of the filename */
lxw_workbook *workbook = workbook_new("macro.xlsm");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
worksheet_set_column(worksheet, COLS("A:A"), 30, NULL);
/* Add a macro file extracted from an Excel workbook. */
workbook_add_vba_project(workbook, "vbaProject.bin");
worksheet_write_string(worksheet, 2, 0, "Press the button to say hello.", NULL);
lxw_button_options options = {.caption = "Press Me", .macro = "say_hello",
.width = 80, .height = 30};
worksheet_insert_button(worksheet, 2, 1, &options);
return workbook_close(workbook);
}