2014-01-24 4 views
0

я написал следующую программу с xlsLib для того, чтобы создать XLS файл Excel с листа с 100 000 строк:Целочисленное переполнение в библиотеке xlsLib в C++

#include <xlslib.h> 
#include <xlslib/number.h> 
#include <xlslib/common/xlstypes.h> 

using namespace xlslib_core; 
using namespace xlslib_strings; 

int main() 
{ 
    workbook wb; 
    worksheet *sh = wb.sheet("DATA"); 

    unsigned32_t numberRows = 100000; 
    unsigned32_t numberColumns = 10; 

    for(unsigned32_t r=0;r<numberRows;r++) 
    { 
     for(unsigned32_t c=0;c<numberColumns;c++) 
     { 
      double number = r + c; 
      sh->number(r, c, number); 
     } 
    } 
    wb.Dump("/tmp/test.xls"); 

    return 0; 
} 

Когда я открываю файл «test.xls» кажется, что произошло переполнение целого числа: строки начинают перекрываться, поскольку значение 65 535 является максимальным значением 16 беззнакового целого числа. Я не знаю, допустила ли я ошибку или у xlsLib есть ошибка. Я очень ценю некоторую помощь.

Заранее спасибо.

ответ

1

Это ограничение формата Excel. Excel 2003 и более ранние версии ограничены 65536 строками. Таким образом, вы не можете создавать больше строк, если используете старый формат * .xls. Чтобы создать больше строк, вам нужно использовать новый формат * .xlsx, но похоже, что xlsLib не поддерживает его.

Дополнительная информация: http://support.microsoft.com/kb/120596/en-us

+0

Спасибо за ваш ответ Алекс Антонов. Я также попробовал [ExcelFormat Library] (http://www.codeproject.com/Articles/42504/ExcelFormat-Library) и имеет те же ограничения. Я собираюсь попробовать библиотеку Gnumeric, или вы знаете лучший выбор? С наилучшими пожеланиями! –

+0

@ Ернесто, к сожалению, я не могу предложить лучший выбор. Я не использовал такие библиотеки. Чтобы сгенерировать/изменить файлы Excel программно, я всегда использовал Excel как COM-сервер вне процесса. –

+0

Хорошо, не волнуйся, большое спасибо за ваш первый ответ, он очень помог! –