我最近发现了这个C库(http://libxlsxwriter.github.io/),并试图将它与R一起使用。
让C库独立工作并不困难。我使用zlib
下载了libxlsxwriter
和msys2
,并在make
文件夹中运行了libxlsxwriter
。
现在我可以运行这个Hello-World示例,让我们称之为test.c
:
#include "xlsxwriter.h"
void main() {
lxw_workbook *workbook = workbook_new("myexcel.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
int row = 0;
int col = 0;
worksheet_write_string(worksheet, row, col, "Hello me!", NULL);
workbook_close(workbook);
}
现在我可以通过运行:
来编译test.c
cc test.c -o test -lxlsxwriter -lz
然后运行可执行文件:
./test
现在我有一个Hello-World excel文档。
让它与R一起工作变得更加棘手。如果我只是跑:
R CMD SHLIB test.c
我收到此错误:ibxlsxwriter/include/xlsxwriter/common.h:19:42: fatal error: xlsxwriter/third_party/queue.h: No such file or directory
#include "xlsxwriter/third_party/queue.h"
然而,当我检查时,文件显然在那里。
有关如何将此C库与R连接的任何建议?在这一点上,我只是试图从R运行hello-world示例。
在xlsxwriter
文件夹中使用inst
开始构建程序包是一种更好的方法,然后尝试编写一个makevars
来获取xlsxwriter
编译正确吗?我知道我必须包括PKG_CPPFLAGS = -I../inst/libxlsxwriter
,但我猜我还需要更多。
答案 0 :(得分:2)
您可能想尝试Continuum的Anaconda R套餐。他们直接使用MSYS2包。工具链包称为m2w64-toolchain,posix包有时也可用于构建R包。
conda install -c r r-essentials m2w64-toolchain posix
免责声明:我为Continuum工作,但我也在使用MSYS2。
答案 1 :(得分:0)
这不会很优雅,但是如果四年来没有人找到一个优雅的解决方案,您不妨使用:
shell("cc test.c -o test -lxlsxwriter -lz")
这将有助于此部分以及对立即访问xlsx功能的任何次要需求
在这一点上,我只是想让示例世界从R运行。
您可能已经知道这一点,但是以防万一您没有考虑使用shell()
命令。