700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > qt实现读取excel文件并使用Qchart画图显示

qt实现读取excel文件并使用Qchart画图显示

时间:2024-02-11 20:14:40

相关推荐

qt实现读取excel文件并使用Qchart画图显示

读取excel函数

void Widget::getExcelContent(QVector<QVector<QString>> &map){QAxObject *excel = NULL;QAxObject *workbooks = NULL;QAxObject *workbook = NULL;QString filePath = QFileDialog::getOpenFileName(this, QStringLiteral("选择Excel文件"),"",QStringLiteral("Excel file(*.xls *.xlsx)"));if(filePath.isEmpty())return;CoInitializeEx(NULL, COINIT_MULTITHREADED);excel = new QAxObject("Excel.Application");if(!excel){qDebug()<<"EXCEL 对象丢失!";}workbooks = excel->querySubObject("Workbooks");//所有excel文件if(0==workbooks){qDebug()<<"Kong000000000";return;}workbook = workbooks->querySubObject("Open (const QString &)",filePath);//按路径获取文件if(0==workbook){qDebug()<<"workbook000000000";return;}QAxObject *worksheet = workbook->querySubObject("WorkSheets(int)", 1);//读取第一个表QAxObject *usedRange = worksheet->querySubObject("UsedRange");//有数据的矩形区域QAxObject * rows = usedRange->querySubObject("Rows");QAxObject * columns = usedRange->querySubObject("Columns");intRows = rows->property("Count").toInt();intCols = columns->property("Count").toInt();//qDebug()<<"行数:"<<intRows;//qDebug()<<"列数:"<<intCols;QVariant var = usedRange->dynamicCall("Value");foreach (QVariant varRow, var.toList()){QVector<QString> vecDataRow;foreach(QVariant var, varRow.toList()){vecDataRow.push_back(var.toString());}map.push_back(vecDataRow);}workbook->dynamicCall("Close()");excel->dynamicCall("Quit()");if(excel){delete excel;excel = NULL;}}

点击按钮调用getExcelContent函数

首先在widget.h中定义全局变量,并设置excel和Qchart所用的头文件

#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include<QtCharts>#include<QChartView>#include<QSplineSeries>#include<QLineSeries>#include<QPushButton>#include<QFileDialog>#include<QAxObject>#include<QList>#include<QDebug>QT_BEGIN_NAMESPACEnamespace Ui { class Widget; }QT_END_NAMESPACEclass Widget : public QWidget{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();QVector<QVector<QString>> exc_res;int intRows;int intCols;//QMap<QString, float> exc_res;void getExcelContent(QVector<QVector<QString>>& result);private:Ui::Widget *ui;QChart *mChart;};#endif // WIDGET_H

widget.cpp调用

connect(ui->btn_open, &QPushButton::clicked, [=](){getExcelContent(exc_res);//exc_res中数据即为excel内容});

对excel数据画图

首先在界面拖入wiget控件,右键控件提升,将类名称写为QChartView

此时运行程序,运行程序会报错,点击问题提示会进入ui mainwindow.h中

添加下面两句到ui widget.h中

#include <QtCharts>QT_CHARTS_USE_NAMESPACE

点击按钮画图到指定控件

connect(ui->btn_show, &QPushButton::clicked, [=](){mChart = new QChart();//qDebug()<<"intCols----"<<intCols;//qDebug()<<"intRows----"<<intRows;for(int j=0; j<intCols; ++j){QSplineSeries *splineSeries = new QSplineSeries();for(int i=0; i<intRows; ++i){//qDebug()<<"j="<<j<<" , i="<<i;splineSeries->append(i,exc_res[i][j].toDouble());}mChart->addSeries(splineSeries);}mChart->setTheme(QChart::ChartThemeLight);mChart->legend()->hide();mChart->setTitle("曲线图图表标题"); // 设置标题mChart->createDefaultAxes();// 基于已添加到图表中的series为图表创建轴。以前添加到图表中的任何轴都将被删除。//mChart->axes(Qt::Vertical).first()->setRange(0, 1); // 设置Y轴的范围ui->widget->setRenderHint(QPainter::Antialiasing); // 设置抗锯齿ui->widget->setChart(mChart);//拖入界面的控件名为widget});

结果展示

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。