crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Excel и QT, Слияние данных
neue
  опции профиля:
сообщение 15.5.2013, 2:28
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 14.5.2013
Пользователь №: 3834

Спасибо сказали: 0 раз(а)




Репутация:   0  


На работе меня настигла следующая задача:

Есть много-много файлов excel одинаковой структуры. Необходимо собрать данные с итогов всех таблиц, просуммировать и занести в другой файл excel (в конечную таблицу), которым потом пользователь сможет манипулировать. Также необходимо вывести некоторые данные, но для них нет определенной таблицы, и диаграммы. Необходимости в отображении файлов с исходными данными, в принципе, нет, интересуют только итоговые таблицы.

Вроде, задача и не самая сложная, но, учитывая мой крайне небогатый опыт в программировании, меня поставила в некоторый тупик.

Для начала, не могу сообразить, как мне выбрать несколько excel файлов и просуммировать итоги.

Буду рад дельному совету (если возможно, с примером кода), ибо, как обычно это в России бывает, "результат нужен был вчера". <_<


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nikita
  опции профиля:
сообщение 15.5.2013, 7:42
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 34
Регистрация: 19.10.2012
Пользователь №: 3570

Спасибо сказали: 2 раз(а)




Репутация:   0  


На самом деле задача не сложная, при условии одинаковой структуры таблиц во всех файлах!
1. Открываешь файл
2. Пока не конец файла считываешь строку
3. Разбиваешь строку на части по разделителю (чаще всего это ";")
4. Заносишь каждую часть в переменную (суммируешь и т.д.)
5. Открываешь следующий файл (к пункту 1)
6. Открываешь для записи новый файл
7. Заносишь в строку через ";" свои данные и записываешь строку в файл

P.S.: Это алгоритм работы с данными, как нарисовать линии таблиц и т.п. я к сожалению не знаю

вот код по считыванию данных
  QFile f(filename);
  if(f.open(QIODevice::ReadOnly))
  {
      QByteArray arr;
      QString s;
      QStringList sl;
      f.readLine();
      while(!f.atEnd())
      {
          arr = f.readLine();
          s = arr.constData();
          sl = s.split(";");
          if(sl.size() < (Количества столбцов в таблице))
          {
              qDebug()<<QObject::trUtf8("Ошибка!");
            return;
          }
          bool ok;
                //!!!!!!!!!!!!!!!!!!!!!!!!!!! Считывание данных из ячеек!!!!!!!!!!!!!!!!!!!!!!!!!!!!
          double val = sl[1].toDouble(&ok);
      }
  }
  else
      qDebug()<<QObject::trUtf8("Файл не открыт!");
  f.close();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 15.5.2013, 10:50
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Для работы с Excel файлами лучше все го использовать COM (QAxObject)
Вот тут пример кода почти полный:
http://www.forum.crossplatform.ru/index.php?showtopic=9320
Вот тут про объектную модель:
http://msdn.microsoft.com/en-us/library/ws...7(v=vs.80).aspx

EDIT: Кстати возможно это будет проще сделать через powershell например.
EDIT2:
Тут есть все что нужно
http://habrahabr.ru/post/120383/
Еще хорошая ссылка
http://theolddogscriptingblog.wordpress.co...cookbook-ver-2/


Сообщение отредактировал lanz - 15.5.2013, 12:22
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.5.2013, 12:25
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(nikita @ 15.5.2013, 9:42) *
Пока не конец файла считываешь строку
речь не о текстовом файле, а об эксельном


neue, возможно проще будет тут Qt не применять, а пользоватся VB для Экселя. или вообще через сам Эксель:
меню "Данные" -> "Импорт внешних данных" -> "Выбор источника данных"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
neue
  опции профиля:
сообщение 16.5.2013, 0:39
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 14.5.2013
Пользователь №: 3834

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем большое спасибо, буду пробовать! :D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.4.2024, 7:19