Сбой экспорта в Excel в iOS с использованием libxlsxwriter
Кто-нибудь использовал libxlsxwriter для экспорта данных в Excel в iOS? Я получил библиотеку и работает. Ниже приведен код, который я пробовал.
lxw_workbook *workbook = new_workbook("demo.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
int ret = worksheet_write_string(worksheet, 0, 0, "Hello", NULL);
ret = worksheet_write_number(worksheet, 1, 0, 123, NULL);
int ret1 = workbook_close(workbook);
if(LXW_CLOSE_ERROR_ZIP == ret1)
NSLog(@"Failed");
Это постоянно терпит неудачу для меня в workbook_close();
Это сообщение об ошибке, которое я получаю
[ERROR][/path/packager.c:62]: Error opening zip file for xlsx
[ERROR][/path/workbook.c:1108]: Memory allocation failed.
Есть идеи, почему это происходит? Есть ли другая библиотека, которую я могу использовать?
2 ответа
Эти ошибки вводят в заблуждение. Обычно они генерируются, когда выходной файл или каталог недоступен для записи.
Например:
cd libxlsxwriter
make examples
./examples/hello
# Creates hello_world.xlsx
chmod -w hello_world.xlsx
./examples/hello
[ERROR][packager.c:62]: Error opening zip file for xlsx
[ERROR][workbook.c:1108]: Memory allocation failed.
Я посмотрю, смогу ли я добавить исправление в библиотеку, чтобы прояснить фактический источник ошибки.
Обновление: в более новых версиях ошибка яснее:
$ ./examples/hello
[ERROR] workbook_close(): Error creating 'hello_world.xlsx'.
Error = Permission denied
Следует также помнить, что вы должны вызывать функции libxlsxwriter со строковым кодированием, понятным для C. Я получал эту ошибку, пока не преобразовал все строки в вызовах libxlsxwriter в строки UTF8.
В вашем случае ваши призывы создать рабочую книгу и написать строку стали бы:
lxw_workbook *workbook = new_workbook(("demo.xlsx" as NSString).UTF8String);
...
int ret = worksheet_write_string(worksheet, 0, 0, ("Hello" as NSString).UTF8String, NULL);