![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Алексей1153 |
![]()
Сообщение
#1
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
задача - считать исходные данные из экселевского файла. Имеется три колонки, каждую нужно поместить в свой вектор
по всяким примерам с форума сделал чтение таким образом
но, блин, так долго вытаскивается даже 1000 значений - капец. Понимаю, что проблема в том, что я по ячейке добываю. Может, как-то не по ячейке можно доставать, а сразу колонку ? |
|
|
![]() |
Гость_Гость_* |
![]()
Сообщение
#2
|
Гости ![]() |
Это моя первая работа с Qt (моя специальность электроник, программировал в MSVC 6 более 10 лет назад).
Есть файл *.csv. В нем записана информация о работе оборудования (переменная, время, значение переменной). Данная информация собирается с интервалом в 5 секунд. Мне нужно построить график для отображения изменения переменной во времени. Я создал три массива QVariantList List1, List2, List3 и три массива QVariant myVarName[20000], QVariant myDataTime[20000], QVariant myVarValue[20000]. (Количество переменных в массивах QVariant 20000 - это пока для теста, желательно сделать динамический массив в зависимости от количества строк. Кол-во строк я получаю, а как сделать динамический массив пока точно не знаю.) Я посмотрел примерыи написал несколько вариантов программы: 1. Сначало читал весь файл - 16000 строк 5 столбцов занимает по времени 12 секунд ................................... if( fileName.contains(reg) ){ QMessageBox::information(this,"Файл открыт","Все успешно"); QTextStream stream(&mFile); QString buffer = stream.readAll(); ui->textEdit_3->setText(buffer); mFile.flush(); mFile.close(); ................................ 2. Потом читал по ячейкам (это вообще долго): ................................... for(countRow; countRow < iAllRow; ++countRow){ myVarName[countRow] = worksheet->querySubObject("Cells( int, int)", countRow, 1)->property("Value").toString(); myDataTime[countRow] = worksheet->querySubObject("Cells( int, int)", countRow, 2)->property("Value").toString(); myVarValue[countRow] = worksheet->querySubObject("Cells( int, int)", countRow, 3)->property("Value").toFloat(); } ................................................................................ ..... 3. Сейчас остановился на вашем варианте (читает бысто, выжу в отладчике): QAxObject *range1 = worksheet->querySubObject("Range(const QVariant&)","A1:A16000"); QAxObject *range2 = worksheet->querySubObject("Range(const QVariant&)","B1:B16000"); QAxObject *range3 = worksheet->querySubObject("Range(const QVariant&)","C1:C16000"); List1 = qvariant_cast<QVariantList> (range1->dynamicCall("Value()")); List2 = qvariant_cast<QVariantList> (range2->dynamicCall("Value()")); List3 = qvariant_cast<QVariantList> (range3->dynamicCall("Value()")); ................................................................................ .................................. Сейчас мне нужно из списков QVariantList List1, List2, List3 занести значения (типы Sting, DataTime, Float) соответственно в массивы myVarName[], myDataTime[], myVarValue[]. То есть, создаю итератор QList<QVariant>::iterator it = List1.begin();, указывающий на первый элемент списка List1. А вот как Первый элемент списка занести в первый элемент массива QVariant - не знаю. Пробовал по разному, не получается. ................................................................. while (it != List1.end()) { myVarName[i].setValue((*it).toString()); str1=qvariant_cast<QString>(*it); ui->textEdit_4->append(str1); i++; it++; } Как правильно перенести значения из списков QVariantList в массивы QVariant? |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 23.6.2025, 7:57 |