считывание таблицы из xls (Excel) |
Здравствуйте, гость ( Вход | Регистрация )
считывание таблицы из xls (Excel) |
Алексей1153 |
25.3.2013, 11:14
Сообщение
#1
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
задача - считать исходные данные из экселевского файла. Имеется три колонки, каждую нужно поместить в свой вектор
по всяким примерам с форума сделал чтение таким образом
но, блин, так долго вытаскивается даже 1000 значений - капец. Понимаю, что проблема в том, что я по ячейке добываю. Может, как-то не по ячейке можно доставать, а сразу колонку ? |
|
|
lanz |
25.3.2013, 11:51
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Можно получить объект Range, а потом прочитать его value как QVariantList.
Если рэнж прямоугольный, получится QVariantList QVariantList-ов. Не проверял , у меня была обратная задача, я выкидывал данные через qscript (ax - обертка для генератора объектов, SubObj - вызывает querySubObject, table - список списков). Раскрывающийся текст
|
|
|
Алексей1153 |
25.3.2013, 13:40
Сообщение
#3
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
lanz, спасибо. Даже работает ) Только я применил вариант с циферными индексами
Range(Cells(1, 1), Cells(100, 3)) Ужасает только количество delete Но тут, видимо, никак иначе Кстати, он возвращает QVariantList of QVariantList, только это набор строк, что не совсем кузяво (но терпимо). Никак его не заставить возвращать набор колонок ? |
|
|
lanz |
25.3.2013, 14:27
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Не пробовал. Можно посмотреть в сторону свойства Columns или сделать три Range по одному для каждой колонки.
|
|
|
Алексей1153 |
25.3.2013, 19:43
Сообщение
#5
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
оставил так, вроде устраивает
|
|
|
Olga |
24.7.2014, 21:28
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 5.2.2014 Пользователь №: 4048 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый вечер!
Стоит задача считать данные из excel файла и добавить их в БД MySql. В файле содержиться более 30000 строк. Если считываю по ячейки и вставляю в БД, то все это делается ооооооооооооочень медленно. Может есть более быстрый способ??? |
|
|
lanz |
25.7.2014, 23:30
Сообщение
#7
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Можно использовать объект Range, как я уже писал тут выше. Он работает значительно быстрее.
Приведите пример как вы делаете, может можно срезать углы где-то. |
|
|
Pavel12345 |
9.1.2015, 3:27
Сообщение
#8
|
Новичок Группа: Новичок Сообщений: 1 Регистрация: 9.1.2015 Пользователь №: 4311 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вы уверены, что хорошо знаете эксель? Пройдите курс MS Excel Профессионал от специалистов ведущей международной консалтинговой компании. Вы научитесь работать в экселе в 2 раза быстрее и будете уверены, что решаете каждую задачу наиболее эффективным способом. Внимание! Осталось 3 места, до пятницы скидка 20%. Оставьте заявку по ссылке: http://msexcel.pro?ch=frm
|
|
|
Гость_Гость_* |
16.2.2015, 22:03
Сообщение
#9
|
Гости |
Здравствуйте.
Похожая задача. Нужно читать 3 столбца из *.csv файла. Столбцы читаю (вижу в отладчике значения). .................... Файл *.h QVariantList List1; QVariantList List2; QVariantList List3; ............................. Файл *.cpp ...................... 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()")); ............................................................. А как выделить элемен из списка List1, List2, List3 - не знаю. Пробовал по разному: ................................................ QVariantList::const_iterator it = List1.constBegin(); int i=1; while (it != List1.constEnd()) { myVarName[i].setValue((*it).toString());//QVariant myVarName[16000] i++; it++; } Не получается. Нужно преобразов List1 в массив строк, List2 в массив даты времени, List3 в массив значений. В отладчике вижу тип QString, но даже его не могу засунуть в myVarName. Спасибо. |
|
|
lanz |
16.2.2015, 23:45
Сообщение
#10
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Цитата Не получается. Что именно не получается? |
|
|
Текстовая версия | Сейчас: 30.11.2024, 8:59 |