您好我正在尝试使用 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 行崩溃不同。这个错误似乎是随机出现的。