вторник, 23 октября 2012 г.

qt + excel часть 3

Коварный шеф сказал что выгрузка неполной тысячи за 25-30 секунд это долго. Пришлось искать так сделать быстрее. Решение было найдено. Не особо быстро, в отличии от скорости работы - 2-3 секунды что всех радует. Решение ниже

Значительно увеличивает скорость вывода в сравнении с поячеечным способом.
// получение указателя на левую верхнюю ячейку [row][col] ((!)нумерация с единицы)
QAxObject* Cell1 = StatSheet->querySubObject("Cells(QVariant&,QVariant&)", row, col);
// получение указателя на правую нижнюю ячейку [row + numRows - 1][col + numCols - 1] ((!) numRows>=1,numCols>=1)
QAxObject* Cell2 = StatSheet->querySubObject("Cells(QVariant&,QVariant&)", row + numRows - 1, col + numCols - 1);
// получение указателя на целевую область
QAxObject* range = StatSheet->querySubObject("Range(const QVariant&,const QVariant&)", Cell1->asVariant(), Cell2->asVariant() );
// список ячеек строки
QList<QVariant> cellsList;
// список строк
QList<QVariant> rowsList;
for (int i = 0; i < numRows; i++)
{
    cellsList.clear();
    for (int j = 0; j < numCols; j++)
        cellsList << i*j;
    // в список строк добавляется QVariant каждой строки
    rowsList << QVariant(cellsList);
}
// собственно вывод
range->setProperty("Value", QVariant(rowsList) );
// освобождение памяти
delete range;
delete Cell1;
delete Cell2;

Утянуто отсюда

Комментариев нет:

Отправить комментарий