前言
最近需要用C语言来处理excel文件,所以需要在openwrt中引入excel处理工具Libxlsxwriter,这个库只适合写入excel文件,不适合读取。
一、xlsx工具
这是一个处理excel的工具,在examples里面有很多案例,这个要慢慢看。
仓库地址 https://github.com/jmcnamara/libxlsxwriter
二、xlsx安装
1.创建xlsxwriter安装包
lede-dtu-e/feeds/packages/libs/ 下创建xlsxwriter文件夹
2.编写makefile
第一次写这种包,可能有些地方写的不够好,如果有错误,大家多交流。
include $(TOPDIR)/rules.mk
PKG_NAME:=libxlsxwriter
PKG_VERSION:=RELEASE_1.1.7
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/jmcnamara/libxlsxwriter/archive/refs/tags/
PKG_HASH:=1f378e25d8bb5be258d3e04d3d24b8c23ff21bf206e6e206661844a96ca25eda
PKG_LICENSE:=BSD
PKG_LICENSE_FILES:=License.txt
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk
define Package/xlsxwriter
SECTION:=libs
CATEGORY:=Libraries
TITLE:=Library for xlsx file
URL:=https://github.com/jmcnamara/libxlsxwriter
DEPENDS:=+zlib
endef
define Package/xlsxwriter/description
libxlsxwriter is a C library that can be used to write text, numbers, formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.
endef
CMAKE_OPTIONS +=-DBUILD_EXAMPLES=ON\
-DBUILD_SHARED_LIBS=ON #这个要加不然后面单独写demo 会报错
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include/xlsxwriter
$(CP) $(PKG_INSTALL_DIR)/usr/include/xlsxwriter/* $(1)/usr/include/xlsxwriter/
$(CP) $(PKG_INSTALL_DIR)/usr/include/xlsxwriter.h $(1)/usr/include/
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/
endef
define Package/xlsxwriter/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libxlsxwriter* $(1)/usr/lib/
endef
$(eval $(call BuildPackage,xlsxwriter))
3.文件系统的配置
make menuconfig 进入配置页面
4.编译
注意我的zlib已经编译过了,所以我将直接执行xlsxwriter的编译
make package/feeds/packages/xlsxwriter/install V=s
通过网络传输工具,把编译好的库放到你的开发板/usr/lib目录下面
5.演示案例
注意:我自己写了一个demo,如果你不会,我建议你从他的源码库里面有examples,你去里面那现成的。但是你最终也得自己去写编译文件。
#include <stdio.h>
#include "xlsxwriter.h"
int main() {
lxw_workbook *workbook = workbook_new("example.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
// 写入数据
const char *data[][2] = {
{"编号", "姓名"},
{"1", "王大狗"},
{"2", "王二狗"},
{"3", "张志远"},
// 可以继续添加更多数据
};
int row, col;
for (row = 0; row < 4; row++) {
for (col = 0; col < 2; col++) {
worksheet_write_string(worksheet, row, col, data[row][col], NULL);
}
}
// 关闭工作簿
workbook_close(workbook);
return 0;
}
makefile:参考下面的makefile
INCLUDE += -I$(STAGING_DIR)/usr/include/xlsxwriter -I$(STAGING_DIR)/usr/include/
CFLAGS += $(INCLUDE) -g
LIB= -L$(STAGING_DIR)/usr/lib -lxlsxwriter
OBJS=all
$(OBJS): %.o:%.c
$(CC) -o test_xlsx test_xlsx.c $(INCLUDE) $(CFLAGS) $(LIB)
.PHONY: clean
clean:
rm -rf $(BUILD_DIR)
运行结果
总结
文章大概还有很多需要修改的地方,但是目前是能用了。有问题评论区讨论。