LibXL 随机(但始终)无法从 .XLS 中读取字符串或数字

Posted

技术标签:

【中文标题】LibXL 随机(但始终)无法从 .XLS 中读取字符串或数字【英文标题】:LibXL randomly (but consistantly) fails to read a string or number from a .XLS 【发布时间】:2015-10-12 21:45:20 【问题描述】:

好的,事情是这样的:

我开发这个程序已经有一段时间了。它的功能是从各种xls文件中搜索、读取和组织数据。

除了一件事之外,大部分内容都可以编译和工作: 出于某种原因,有时 libXL 只是 不会 从 该 .xls 文件的单元格。我说随机是因为它看起来只是随机的, 但是每次我运行该程序,对于相同的文件,它始终失败 相同的单元格。

我知道这一点是因为我操纵了代码,以便在它无法读取字符串或数字时通知我(“errortype::invalid_string”、“errortype::num==0”)

这个程序是用c++、windows 7、Visual Studio Express 2013

编写的

这是我的 getval() 函数中的代码 sn-p

std::string getval(cell x, libxl::Sheet* y)
std::string header= "none";

if (y->cellType(x.row, x.col) == libxl::CELLTYPE_EMPTY)
    header = "none";

else if (y->cellType(x.row, x.col) == libxl::CELLTYPE_BLANK)
    header = "none";

else if (y->cellType(x.row, x.col) == libxl::CELLTYPE_STRING)
    if (info_level > 2)std::cout << "\n" << "Getting value from cell: (" << x.row << ", " << x.col << ")";

    const wchar_t* s = y->readStr(x.row, x.col);

    if (s)
        std::wstring w = std::wstring(s);
        header = std::string(w.begin(), w.end());
    
    else
        header = "errortype::invalid_string";



else if (y->cellType(x.row, x.col) == libxl::CELLTYPE_NUMBER)
    long long num = 0;
    num = y->readNum(x.row, x.col);
    //int res = int(num);

    if (num != 0)
        std::stringstream ss;
        ss << num;
        header = ss.str();
    
    else
        header = "errortype::num==0";



else if (y->cellType(x.row, x.col) == libxl::CELLTYPE_BOOLEAN)
    header = "errortype::celltype_bool";

else if (y->cellType(x.row, x.col) == libxl::CELLTYPE_ERROR)
    header = "errortype::celltype_error";



    return header;

如果有人对为什么会发生这种情况有所了解,我们将不胜感激。如果您需要更多信息来解决问题,我很乐意提供。

【问题讨论】:

失败的单元格是否总是与工作单元格具有相同的 excel 类型?它们是什么? 哎呀。我的错,对不起。在那种情况下没有遇到这种类型的问题。如果您想避免混乱,请随时删除 - 我也会这样做。 【参考方案1】:

我不确定您使用的是哪个版本的 DLL。

对于整数读取问题,你可以试试

double num = y->readNum(x.row, x.col);

好像我以前也遇到过同样的问题。

类似的尝试改变字符串类型。

【讨论】:

以上是关于LibXL 随机(但始终)无法从 .XLS 中读取字符串或数字的主要内容,如果未能解决你的问题,请参考以下文章

如何在 java 中使用 spark 从 AWS S3 读取 .xls 文件?并且无法读取 sheetName

“无法识别的类型'员工'。忽略。C:/ .....”从.xml读取输入并将输出写入.xls文件+ perl时出错

从python中的xls或xlsx文件读取后将数据转换为字符串

Windows 上 C++ 中的 libxl 库设置

使用 libxl 库写入数据

OleDbDataReader 如何读取数字类型?