2

I recently found this C library (http://libxlsxwriter.github.io/), and attempted to use it with R.

Getting the C library to work by itself was not difficult. I downloaded zlib and libxlsxwriter using msys2, and ran make in the libxlsxwriter folder.

Now I can run this Hello-World example, lets call it 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);
}

Now I can compile test.c by running:

cc test.c -o test -lxlsxwriter -lz

And then run the executable:

./test

And now I have a Hello-World excel document.

Getting it to work with R has been much trickier. If I simply run:

R CMD SHLIB test.c

I get this error: 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"

Yet the file is clearly there when I check.

Any advice on how to connect this C library with R? At this point I am just trying to get the hello-world example to run from R.

Would it be a better approach to start out building a package, with xlsxwriter in the inst folder, and then try to write a makevars that will get xlsxwriter to compile correctly? I know I would have to include PKG_CPPFLAGS = -I../inst/libxlsxwriter but I am guessing I would need more than that.

Joshua Ulrich
  • 173,410
  • 32
  • 338
  • 418
Carl
  • 5,569
  • 6
  • 39
  • 74
  • Check out `R CMD config` looking for the `SHLIB_*` variables; set these to point in the appropriate locations before running `R CMD SHLIB`. – Martin Morgan Jul 19 '16 at 22:34

1 Answers1

2

You may want to try Continuum's Anaconda R packages. They use MSYS2 packages fairly directly. The toolchain package is called m2w64-toolchain and the posix package is sometimes useful for building R packages too.

conda install -c r r-essentials m2w64-toolchain posix

Disclaimer: I work for Continuum, but I also work on MSYS2.

Ray Donnelly
  • 3,920
  • 1
  • 19
  • 20