0

您好我正在尝试使用 C++ 中的库 Libxl 处理 excel 文件。我正在使用 Ubuntu 18.04。我设法重现了错误,因此附上了代码以及 excel 示例文件。您可以运行代码并查看是否引发了异常。我还附上了输出的屏幕截图,您可以在其中看到引发了异常。

main.cpp中的代码

Book* book = xlCreateXMLBook();
    if(book){
        if(book->load("file2.xlsx")){
        Sheet *sheet = book->getSheet(0);
        if(sheet){
    for(int row = sheet->firstRow(); row < sheet->lastRow(); ++row)
{
   for(int col = sheet->firstCol(); col < sheet->lastCol(); ++col)
     {
          CellType cellType = sheet->cellType(row, col);
          if(sheet->isFormula(row, col))
            {
                //do something here
            }
           else
            {
                if(cellType == CELLTYPE_EMPTY)
                   {
                      ;
                   }
                else if(cellType == CELLTYPE_NUMBER)
                   {
                     ;
                   }
                else if(cellType == CELLTYPE_STRING)
                   {
                      std::cout<<"This is the string: "<<(sheet->readStr(row,col))<<" "<<std::endl;
                      
                      /*
                      const std::string s = sheet->readStr(row,col); //this cause the program to terminate by logic error
                      */
                   }
      
            }}
     }
}
}}

您可以复制粘贴代码并自己尝试,看看它是否给您同样的异常。

示例excel 文件

可以从以下链接下载 excel 文件:file2.xlsx

上述示例 file2.xlsx 上的上述代码输出截图如下所示: 输出截图

另请注意,在上面的代码示例中,我已经注释掉了const std::string s =sheet->readStr(row,col);给出实际逻辑错误的部分。您可以看到错误出现在第 25 行或第 26 行左右。我尝试过使用不同文件的程序,但每个文件都遇到同样的问题。唯一的区别是错误有时出现在第 25 行,有时出现在第 30 行。这似乎是一个随机错误。我该如何解决这个问题?我知道sheet->readStr(row,col)给出 std::nullptr 但问题是它为什么返回 std::nullptr?该单元格有一个字符串值,可以在 excel 表中看到,但 readStr() 仍然返回 std::nullptr。下面我附上了第二个屏幕截图,您可以看到程序在第 38 行崩溃,这与上次在第 26 行崩溃不同。这个错误似乎是随机出现的。 截图 2

以下是来自的输出gdb ./outputGDB 截图

4

0 回答 0