3 / 3 / 0
Регистрация: 12.11.2018
Сообщений: 496
1

Импорт и экспорт данных в Excel

23.09.2019, 15:40. Показов 2885. Ответов 8

Принимаю небольшой массив данных через COM порт, который хочу записывать в Excel файл и в дальнейшем с него же и считывать данные, но до этого пока дело не дошло. Гуглил, читал темы на форуме, но все же не нашел примера, который мог бы использовать в качестве основы.
Использую Qt creator 5.11, язык С++, ОС - Windows 8. Опыта использования особо нет. Из найденной информации понял, что можно применить QtXlsxWriter https://github.com/dbzhang800/... e-directly, который необходимо как-то собрать (в прилагаемой инструкции не смог разобраться), так же пытался использовать информацию с данных двух постов на форуме: Работа с QtXlsxWriter в Excel и Qt Запись данных в Excel. Пока безрезультатно. Мне бы сейчас хотя бы просто разобраться как подключается QtXlsxWriter, как создавать файл Excel и записывать туда данные, приходящие в COM порт. Буду благодарен, если кто-нибудь поделится советами или кодом.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2019, 15:40
Ответы с готовыми решениями:

Экспорт,импорт базы данных
Интересуют способы экспорта и импорта базы данных используя Qt(QDatabase,QSqlQuery и т.д.). ...

Импорт/экспорт данных из QtTableWidget в xlsx
Здравствуйте. Меня интересует как сделать импорт/экспорт данных из QtTableWidget в xlsx. Я уже...

Импорт данных из XML файла
Добрый день! Я новичок в Qt. Хочу спросить, каким способом можно организовать импорт данных из XML...

Экспорт sql данных в xml file
Хотел бы сделать экспорт данных в формате xml, но не знаю как подскажите какой-нибудь способ

8
278 / 87 / 37
Регистрация: 10.06.2015
Сообщений: 261
23.09.2019, 15:57 2
Цитата Сообщение от DmitryDDDD Посмотреть сообщение
Принимаю небольшой массив данных через COM порт, который хочу записывать в Excel файл и в дальнейшем с него же и считывать данные
Может стоит ещё раз подумать, что всё-таки действительно нужно? А то пока звучит пугающе.
0
Эксперт .NET
5374 / 4160 / 1193
Регистрация: 12.10.2013
Сообщений: 12,073
Записей в блоге: 2
23.09.2019, 16:07 3
Цитата Сообщение от DmitryDDDD Посмотреть сообщение
Буду благодарен, если кто-нибудь поделится советами или кодом.
Тут посмотрите, вроде все что нужно есть.
0
3 / 3 / 0
Регистрация: 12.11.2018
Сообщений: 496
23.09.2019, 16:14  [ТС] 4
Lolobotik, да это на самом деле звучит только так, если всю задачу разбить на более простые задачи и выполнить каждую из них, то потом все в кучу можно будет собрать. Пока цель создавать файл Excel и записывать туда данные (желательно массив, в который пишутся данные с COM порта).
insite2012, я смотрел данную ссылку, там у меня проблема возникла в том, что я не могу подключить библиотеку qtxlsxwriter, т.е. не понимаю как выполнить Usage(2): Use source code directly.
0
278 / 87 / 37
Регистрация: 10.06.2015
Сообщений: 261
23.09.2019, 16:37 5
Цитата Сообщение от DmitryDDDD Посмотреть сообщение
если всю задачу разбить на более простые задачи и выполнить каждую из них
Вот какраз на сомнительное разбиение я и пытался намекнуть.
Цитата Сообщение от DmitryDDDD Посмотреть сообщение
Пока цель создавать файл Excel и записывать туда данные
Ну это явно не цель, а какой-то промежуточный этап. Ну или, почему-то, намеренно опускается момент, описывающий, на кой этот файл вообще сдался и почему именно excel.
0
Эксперт .NET
5374 / 4160 / 1193
Регистрация: 12.10.2013
Сообщений: 12,073
Записей в блоге: 2
23.09.2019, 16:51 6
Цитата Сообщение от DmitryDDDD Посмотреть сообщение
проблема возникла в том, что я не могу подключить библиотеку qtxlsxwriter
А разве нельзя просто добавить нужные файлы в свой проект, подключить нужные заголовочные файлы и потом использовать в своем коде?
Цитата Сообщение от Lolobotik Посмотреть сообщение
Вот какраз на сомнительное разбиение я и пытался намекнуть
Да, у меня тоже такое чуство, что тут что-то не так.
Цитата Сообщение от Lolobotik Посмотреть сообщение
почему-то, намеренно опускается момент, описывающий, на кой этот файл вообще сдался
Ятд, что тут (на мой взгляд) проблема в отсутствии синхронизма между получением данных и их отрисовкой. Надеюсь, ТС поправит меня, если я не прав. Но в если все обстоит именно так, то использовать файл как промежуточный буфер - идея не очень. Есть масса других способов, начиная с файлов в памяти и заканчивая паттерном Producer-Consumer.
0
3 / 3 / 0
Регистрация: 12.11.2018
Сообщений: 496
23.09.2019, 20:00  [ТС] 7
Lolobotik, insite2012, для полноты картины я опишу всю текущую задачу. На 8 входов микроконтроллера приходят аналоговые сигналы с датчиков, которые оцифровываются 12 битным АЦП и массивом из 16 8-битных чисел передаются по USART в COM порт ПК. Далее необходимо ПО, которое

1) примет данный массив;
2) преобразует из 16ти 8-битных чисел массива новый массив из 8ми 16-битных чисел (данные АЦП 12 битные, т.е. первые 2 бита массива это первое число, вторые 2 бита - второе и тд). Массив имеет вид типа такого:
1- FF
2- 0F
......
15- A2
16-00
Надо:
1- FFF
....
8- A20
3) Полученный массив необходимо записывать в файл, выбрал Excel, т.к. в нем удобнее обрабатывать данные.
Запись в Excel должна иметь вид:
строка - время, в которое пришли данные (количество строк зависит от времени измерения)
столбца - сами данные (соответственно 8 столбцов)
Измерения проводятся 1 раз в 500 млсек
4) По-хорошему помимо записи в файл Excel, еще было бы не плохо, чтобы потом строился график по всем этим данным, но это уже не обязательно.
Вот такая задача, постарался максимально детально описать, поэтому я и разбил на подзадачи, т.к. думал выполнить каждую из них по отдельности, потом соединить и отладить. С Qt и С++ почти не работал, все изучаю на ходу. Программа на МК написана, там все работает, сколхозил подобие терминала, на основе найденного примера, данные принимает, код привожу ниже:

UART1_0.pro
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#-------------------------------------------------
#
# Project created by QtCreator 2019-09-12T15:41:08
#
#-------------------------------------------------
 
QT       += core gui
 
#---------------------------------------------------------------------------------------------------------
QT += serialport                                 # USART
#---------------------------------------------------------------------------------------------------------
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 
TARGET = UART1_0
TEMPLATE = app
 
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
 
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 
CONFIG += c++11
 
SOURCES += \
        main.cpp \
        mainwindow.cpp
 
HEADERS += \
        mainwindow.h
 
FORMS += \
        mainwindow.ui
 
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target


mainwindow.h
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
//-----------------------------------------------------------------------------------------------------------------------
    private slots:
    void serialReceived();                                  // USART
//-----------------------------------------------------------------------------------------------------------------------
 
 
private:
    Ui::MainWindow *ui;
};
 
#endif // MAINWINDOW_H


main.cpp
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "mainwindow.h"
#include <QApplication>
 
//---------------------------------------------------------------
#include <QLabel>   // Библиотека для текстовых надписей
//---------------------------------------------------------------
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
 
    return a.exec();
}


mainwindow.cpp
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
//-----------------------------------------------------------------------------------------------------------------------
// USART
#include <QSerialPort>
#include <QDebug>
static QSerialPort *serial;
//-----------------------------------------------------------------------------------------------------------------------
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
//-----------------------------------------------------------------------------------------------------------------------
// USART
   serial = new QSerialPort(this);
   serial->setPortName("com3");
   serial->setBaudRate(QSerialPort::Baud9600);
   serial->setDataBits(QSerialPort::Data8);
   serial->setParity(QSerialPort::NoParity);
   serial->setStopBits(QSerialPort::OneStop);
   serial->setFlowControl(QSerialPort::NoFlowControl);
   serial->open(QIODevice::ReadWrite);
//   serial->write("ok*");                                                   // Transmiting "ок" to COM Port
   connect(serial, SIGNAL(readyRead()), this, SLOT(serialReceived()));
//-----------------------------------------------------------------------------------------------------------------------
}
 
MainWindow::~MainWindow()
{
    delete ui;
 
//-----------------------------------------------------------------------------------------------------------------------
    serial->close();                                                      // UART PART
//-----------------------------------------------------------------------------------------------------------------------
}
 
//-----------------------------------------------------------------------------------------------------------------------
// USART
// Receiving data from COM3 and writing it in "label"
void MainWindow::serialReceived()
{
    QByteArray Data;
    Data=serial->readAll();
    ui->label->setText(Data);
    qDebug()<<Data;
}
//-----------------------------------------------------------------------------------------------------------------------


Данные выводятся в label.
0
866 / 527 / 174
Регистрация: 30.07.2015
Сообщений: 1,728
23.09.2019, 20:26 8
DmitryDDDD,
Цитата Сообщение от DmitryDDDD Посмотреть сообщение
Полученный массив необходимо записывать в файл, выбрал Excel, т.к. в нем удобнее обрабатывать данные.
Так вы руками хотите данные потом обрабатывать? Или ваша программа будет обрабатывать? Если второе, то зачем хранить в экселе?
Принимайте свои данные и выводите на график и пишите в файл. 32 байта в секунду не такое большое количество данных чтобы выдумывать какие то сложности.
0
3 / 3 / 0
Регистрация: 12.11.2018
Сообщений: 496
24.09.2019, 05:20  [ТС] 9
_SayHello, пока что да, вручную. Я понимаю, что данную задачу можно оптимизировать, но мне хотелось бы пока что выполнить ее именно в приведенной выше концепции, там где я описал 4 пункта (первый в принципе сделан). Тут еще такой момент, все это носит образовательный характер, я особо не работал в Qt и с C++? поэтому для меня сейчас стоит вопрос как это реализовать, т.е. код, примеры, ссылки на рабочую информацию и тд.

Добавлено через 2 минуты
insite2012,
А разве нельзя просто добавить нужные файлы в свой проект, подключить нужные заголовочные файлы и потом использовать в своем коде?
Я думаю можно, только вопрос: какие нужные файлы добавить и в какую часть проекта?
Просто опыта подключения библиотек в Qt нет.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2019, 05:20

Экспорт-импорт данных Excel-Access-Excel
Доброе время суток уважаемые форумчане. Приходит информация в экселевской таблице. Скидываю её в...

Импорт/Экспорт данных Excel
Просьба помочь начинающим. Пытаюсь сделать импорт/экспорт с экселем но пока тщетно. Знания на...

Экспорт и импорт данных в Excel
Всем привет. Есть задание В проект добавьте команду/кнопку экспорта данных выборки из БД в файл...

Импорт экспорт данных из Access в Excel и обратно
Вот код: ('Select * INTO Лист IN '+''''+'C:\Данные.xls'+''''+' From Таблица'); им я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru