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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget + Excel  (Прочитано 5353 раз)
Артем
Гость
« : Апрель 08, 2017, 20:25 »

Возникла необходимость реализовать функцию сохранения: все содержимое QTableWidget необходимо сохранить в MS Excel. Как научить этому QT. Заранее спасибо.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Апрель 08, 2017, 23:56 »

Разбейте задачу на 2 части:
1. Получение данных из таблицы (для начала хотя бы в консоль вывести их в табличном виде)
2. Сохранение этих данных в формат excel

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

А еще можно попробовать схитрить и сохранять в формате CSV
« Последнее редактирование: Апрель 09, 2017, 00:03 от gil9red » Записан

__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Апрель 09, 2017, 02:29 »

Можно ещё в csv писать через ;
Или использовать open document format
Записан
Артем
Гость
« Ответ #3 : Апрель 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
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Апрель 09, 2017, 10:18 »

Лучше сохраняй в csv, это будет самое простое и кросспалтформенное.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Артем
Гость
« Ответ #5 : Апрель 09, 2017, 15:49 »

Да, спасибо огромное, получилось
Записан
titan83
Гость
« Ответ #6 : Апрель 09, 2017, 19:04 »

Не колхозь, вот xlsx-парсер: https://github.com/VSRonin/QtXlsxWriter
Сможешь еще и нормально форматировать таблицу.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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