Russian Qt Forum
Ноябрь 01, 2024, 06:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Импорт из Excel  (Прочитано 8160 раз)
whirlwind
Гость
« : Ноябрь 03, 2010, 18:04 »

Нужно в программе получить данные из файла Excel.
Использую чуть модифицированный пример http://www.qtcentre.org/threads/33584-Excel-and-Qt?p=155530#post155530
 
Код:
#include <qaxobject>
#include <qaxwidget>
#include <qapplication>

#include <QDebug>

int main(int argc, char *argv[])
{
    QString strVal;
    const char* cp = "Range(B25)";

    QApplication a(argc, argv);
    QAxWidget excel("Excel.Application");

    // because I want to read the file - not display it.
    excel.setProperty("Visible", false);

    QAxObject *workbooks = excel.querySubObject("WorkBooks");
    workbooks->dynamicCall("Open (const QString&)", QApplication::applicationDirPath()+"/ttt.xls");
    QAxObject *workbook = excel.querySubObject("ActiveWorkBook");

    // I need data from the 2nd worksheet (worksheets are numbered starting from 1)
    QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);

    // Read fom the second worksheet the contents of cell E11
    QAxObject *range = worksheet->querySubObject(cp);
    QVariant v = range->property("Value");
    QString s = v.toString() ;
    qDebug() << "main() | s1 is" << s << s.isEmpty() << v.isNull() << v.isValid() << v.typeName() << v.canConvert<QString>();


    QAxObject* cell = worksheet->querySubObject("Cells(QVariant,QVariant)", 12, 1);
    QVariant vv = cell->property("Value");
    QString ss = vv.toString() ;
    qDebug() << "main() | s2 is" << ss << ss.isEmpty() << vv.isNull() << vv.isValid() << vv.typeName() << vv.canConvert<QString>();

    // close the excel file
    excel.dynamicCall("Quit (void)");

    return(0);
}

Проблема в том, что я получаю пустую строку:
Код:
main() | s1 is "" true false true QVariant false 
main() | s2 is "" true false true QVariant false
Хотя в файле в этом месте точно есть какая-то информация.

Еще пытался делать как в здесь http://wiki.crossplatform.ru/index.php/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_MS_Office_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_ActiveQt написано, результат вроде почти такой же

Если установить excel.setProperty("Visible", true); , на пару секунд будет показываться окно Excel с моим файлом (т.е. открывается он вроде бы правильно)

Qt 4.7.0

Что делать, куда бежать?
Записан
whirlwind
Гость
« Ответ #1 : Ноябрь 04, 2010, 17:11 »

Ага, похоже, это баг 4.7.0 http://bugreports.qt.nokia.com/browse/QTBUG-13845

собрал под 4.6.3, оно таки заработало

Записан
Maksim
Гость
« Ответ #2 : Апрель 13, 2011, 14:06 »

BLJAAAAAAAAAAAAAA******
SPASIBO ZA PODSKAZKU!!!!!
U menja uge mozgi sjexali!!! skolko dnje uge ishu, wsö pereprobowal.... Плачущий

budu 4.7.2 ka4at
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.127 секунд. Запросов: 20.