LibXL случайно (но последовательно) не может прочитать строку или число из .XLS

Хорошо, вот в чем дело:

Я давно занимаюсь разработкой этой программы. Его функция заключается в поиске, чтении и организации данных из различных файлов xls.

Все компилируется и работает по большей части, за исключением одного:
Почему-то иногда libXL просто НЕ БУДУ читать строку или целое число из
ячейка для этого файла .xls. И я говорю случайно, потому что это только кажется случайным,
но КАЖДЫЙ РАЗ Я запускаю программу, она последовательно терпит неудачу для тех же файлов на
те же клетки.

Я знаю это, потому что я установил код, чтобы сообщить мне, когда ему не удалось прочитать строку или число («errortype :: invalid_string», «errortype :: num == 0»)

Эта программа написана на C ++, Windows 7, Visual Studio Express 2013

Вот фрагмент кода из моего GETVAL () функция

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;}

Если у кого-то есть понимание того, почему это может происходить, это очень ценится. Если вам потребуется дополнительная информация для решения проблемы, я с удовольствием предоставлю ее.

0

Решение

Я не уверен, какую версию DLL вы используете.

Для проблемы целочисленного чтения, вы можете попробовать

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

Кажется, я испытывал ту же проблему раньше.

Аналогичная пробная версия для изменения типа строки.

0

Другие решения


По вопросам рекламы [email protected]