如何解决错误报告:Libxl C++ 无法处理某些单元格,抛出逻辑错误,basic_string::_M_construct null 无效
您好,我正在尝试使用 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 行崩溃不同。此错误似乎是随机出现的。
以下是 gdb ./output
的输出:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。