Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Артем от Апрель 08, 2017, 20:25



Название: QTableWidget + Excel
Отправлено: Артем от Апрель 08, 2017, 20:25
Возникла необходимость реализовать функцию сохранения: все содержимое QTableWidget необходимо сохранить в MS Excel. Как научить этому QT. Заранее спасибо.


Название: Re: QTableWidget + Excel
Отправлено: gil9red от Апрель 08, 2017, 23:56
Разбейте задачу на 2 части:
1. Получение данных из таблицы (для начала хотя бы в консоль вывести их в табличном виде)
2. Сохранение этих данных в формат excel

В excel можно сохранять 2 способами: через ActiveX (только для виндовс) и через библиотеки, знающие формат Excel
Подробнее о работе с Excel можно на страничке Qt прочитать: http://wiki.qt.io/Handling_Microsoft_Excel_file_format

А еще можно попробовать схитрить и сохранять в формате CSV


Название: Re: QTableWidget + Excel
Отправлено: __Heaven__ от Апрель 09, 2017, 02:29
Можно ещё в csv писать через ;
Или использовать open document format


Название: Re: QTableWidget + Excel
Отправлено: Артем от Апрель 09, 2017, 08:03
Спасибо за советы. Попробовал реализовать через ActiveX, но строчка выделенная жирным шрифтом, где я получаю указатель на список листов, способствует вылету приложения(т.е. оно запускается, но в процессе работы вылетает). В чем может быть причина? Заранее спасибо


    QAxObject* excel = new QAxObject( "Excel.Application", 0 );
      excel->dynamicCall("SetVisible(bool)",true);
      QAxObject *workbooks = excel->querySubObject( "Workbooks" );
      QAxObject *workbook = workbooks->querySubObject( "Open(const QString&)", "C:\\Users\\user\\Desktop\\A.xls" );
      QAxObject *sheets = workbook->querySubObject( "Sheets" );
//      QAxObject *StatSheet = sheets->querySubObject( "Item(const QVariant&)", QVariant("stat") );
//      StatSheet->dynamicCall( "Select()" );
//      QAxObject *range = StatSheet->querySubObject( "Range(const QVariant&)", QVariant( Qstring("A1:A1")));
//      range->dynamicCall( "Clear()" ); // на всякий случай очищаем эту ячейк
//      range->dynamicCall( "SetValue(const QVariant&)", QVariant(5) );//записываем в эту ячейку число 5


Название: Re: QTableWidget + Excel
Отправлено: Пантер от Апрель 09, 2017, 10:18
Лучше сохраняй в csv, это будет самое простое и кросспалтформенное.


Название: Re: QTableWidget + Excel
Отправлено: Артем от Апрель 09, 2017, 15:49
Да, спасибо огромное, получилось


Название: Re: QTableWidget + Excel
Отправлено: titan83 от Апрель 09, 2017, 19:04
Не колхозь, вот xlsx-парсер: https://github.com/VSRonin/QtXlsxWriter
Сможешь еще и нормально форматировать таблицу.