Russian Qt Forum

Qt => ActiveX => Тема начата: Kunashir от Апрель 12, 2011, 15:42



Название: Не получает значения ячеек в Excel
Отправлено: Kunashir от Апрель 12, 2011, 15:42
День добрый!

Пытаюсь получить данные из книги Excel:

Код:
void readExcel (QTableWidget* table, QString path)
{
    QAxObject *excel = new QAxObject( "Excel.Application",
                                      table );
    excel->dynamicCall( "SetVisible(bool)", true );
    QAxObject *workbooks = excel->querySubObject( "WorkBooks" );
    QAxObject *workbook = workbooks->querySubObject( "Open(QString)",
                                                     path );
    if (workbook) {
        QAxObject *sheets = workbook->querySubObject( "Sheets" );
        QAxObject *sheet = sheets->querySubObject("Item(1)");

        sheet->dynamicCall( "Select()" );

        int r = 0;
        table->setColumnCount(4);
        table->setRowCount(0);
        QString v = "";
        while(r >= 0) {
            for (int c=0; c<4 && r>=0; ++c){
                QAxObject *cell = sheet->querySubObject(
                    "cells(int, int)", r+1, c+1 );

               //cell->dynamicCall( "Select()" );
                qDebug()<<cell->dynamicCall("Value()").toString();
                if (cell)
                    v = cell->property("Value").toString();
                else
                    v = "";

               qDebug() << r << c << v;
                if (c == 0 && r > 0)
                {
                    if (v.length() != 0 && r < 10000)
                    {
                        table->insertRow(table->rowCount());
                        QAxObject *row = sheet->querySubObject(
                            "rows(int)", r+1 );
                        int points = row->property("Height").toInt();
                        int pixels = points * 1.2;
                        table->setRowHeight(r-1, pixels);
                    }
                    else
                        r = -11111;
                }
                if (r >= 0){
                    QTableWidgetItem *item = new QTableWidgetItem(v);
                    if (r == 0)
                        table->setHorizontalHeaderItem(c, item);
                    else
                        table->setItem(r-1, c, item);
                }
            }
            r++;
        }
    }
    excel->dynamicCall("Quit()");
}
Код работает, но значения ячеек всегда пустые. Не пойму в чем причина.


Название: Re: Не получает значения ячеек в Excel
Отправлено: Kunashir от Апрель 13, 2011, 19:43
Это была ошибка 4.7.0
Поставил 4.7.2 - все заработало!