oleja1ee7
@oleja1ee7

Как сделать вывод в excel из qtableview?

Здравствуйте, как можно организовать сохранение в excel только тех данных, что отображены в таблице, которая показывается нам через TableView. (будет использоваться сортировка и отсеивание данных)
для подключения использовал qvarriant
QString nameExc = ui->name_excel_file->text();
                                                            //QAxObject *excel = new QAxObject("Excel.Application",this);
                                                            //QAxObject *wbooks = excel->querySubObject("Workbooks");
                                                            //QAxObject *wbook = wbooks->querySubObject("Open(const QString&)","C:\\q\\"+nameExc+".xls");
    QAxObject *excel = new QAxObject("Excel.Application",this);
    excel->setProperty("Visible", true);                                            //видимость
    QAxObject *wbooks = excel->querySubObject( "Workbooks" );                       //книга
    QAxObject *shab = wbooks->querySubObject("Add()");                              //, "C:\\q\\q1\\q32.xls");    //файл
    QAxObject *mSheets = shab->querySubObject("Sheets");                            //листы
    QAxObject *StatSheet = mSheets->querySubObject("Item(1)");                      //текущий лист
    StatSheet->dynamicCall("Select()");
  • Вопрос задан
  • 2789 просмотров
Решения вопроса 1
oleja1ee7
@oleja1ee7 Автор вопроса
Решил все таким способом:
заголовок
int rows = ui->tableView->horizontalHeader()->count();
    int columns = ui->tableView->verticalHeader()->count();
    for(int k=1; k<rows;k++)
    {
        QVariant header = ui->tableView->model()->headerData(k, Qt::Horizontal);
        QAxObject *cell = StatSheet->querySubObject("Cells(QVariant,QVariant)", 1, k);
        cell->setProperty("Value", QVariant(header));
        /* 
       тут  65 строчек внешнего оформления (Переносы, цвета, фильтры, границы)
        */
        delete cell;
    }
сами ячейки
for(int i=2; i<=columns+1;i++)//строки
    {
        for(int j=1;j<rows;j++)//столбцы
        {
            QVariant value1 = ui->tableView->model()->data(ui->tableView->model()->index(i-2,j)); //i  - начать с 2 ячейки j - упустить первый столбец
            QAxObject* cell = StatSheet->querySubObject("Cells(QVariant,QVariant)", i, j);
            // вставка значения переменной data (любой тип, приводимый к QVariant) в полученную ячейку
            cell->setProperty("Value", QVariant(value1));
            value1="";
        }

    }
 // освобождение памяти
        delete StatSheet;
        mSheets->dynamicCall("Save()");
        delete mSheets;
        delete shab;//wbook;
        delete wbooks;//wbooks;
        excel->dynamicCall("Quit()");
        ui->name_excel_file->setText("");
        delete excel;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
QAxObject *excel = new QAxObject("Excel.Application",this);

Я бы лучше взял
https://github.com/tfussell/xlnt
Не требует установки оффиса на ПК, но оно только xlsx умеет. С xls не выйдет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы