Qt实现读取本地文件并导出数据到Excel

以下是使用Qt实现读取本地文件并导出数据到Excel的示例代码,分为头文件和源文件:

**mainwindow.h**

```cpp

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

#include <QStandardItemModel>

QT_BEGIN_NAMESPACE

namespace Ui { class MainWindow; }

QT_END_NAMESPACE

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

MainWindow(QWidget *parent = nullptr);

~MainWindow();

private slots:

void on_btnBrowse_clicked();

void on_btnOutput_clicked();

private:

Ui::MainWindow *ui;

QStandardItemModel *m_fileListModel;

};

#endif // MAINWINDOW_H

```

**mainwindow.cpp**

```cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <QFileDialog>

#include <QAxObject>

#include <QDateTime>

#include <QMessageBox>

MainWindow::MainWindow(QWidget *parent)

: QMainWindow(parent)

, ui(new Ui::MainWindow)

, m_fileListModel(new QStandardItemModel(this))

{

ui->setupUi(this);

ui->listViewFile->setModel(m_fileListModel);

}

MainWindow::~MainWindow()

{

delete ui;

}

void MainWindow::on_btnBrowse_clicked()

{

// 获取多个文件路径

QStringList files = QFileDialog::getOpenFileNames(

this,

"选择文件",

QDir::homePath(),

"所有文件 (*.*)"

);

// 添加文件路径到列表视图

foreach (const QString &file, files) {

QStandardItem *item = new QStandardItem(file);

m_fileListModel->appendRow(item);

}

}

void MainWindow::on_btnOutput_clicked()

{

QAxObject *excel = new QAxObject("Excel.Application");

if (!excel) {

QMessageBox::critical(this, "错误", "无法创建Excel对象");

return;

}

try {

// 创建新工作簿

excel->setProperty("Visible", true);

QAxObject *workbooks = excel->querySubObject("Workbooks");

workbooks->dynamicCall("Add");

QAxObject *workbook = excel->querySubObject("ActiveWorkbook");

QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);

// 设置标题行

QStringList headers = {"时间", "温度(℃)", "透气度"};

for (int col = 0; col < headers.size(); ++col) {

QAxObject *cell = worksheet->querySubObject("Cells(int,int)", 1, col+1);

cell->setProperty("Value", headers[col]);

}

// 生成示例数据(可根据需要替换为实际数据)

for (int row = 2; row <= 5; ++row) {

// 时间列

QAxObject *cell = worksheet->querySubObject("Cells(int,int)", row, 1);

cell->setProperty("Value", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));

// 温度列(示例随机值)

cell = worksheet->querySubObject("Cells(int,int)", row, 2);

cell->setProperty("Value", 20 + qrand() % 10);

// 透气度列(示例随机值)

cell = worksheet->querySubObject("Cells(int,int)", row, 3);

cell->setProperty("Value", 0.5 + (qrand() % 50)/100.0);

}

// 自动调整列宽

QAxObject *range = worksheet->querySubObject("UsedRange");

range->dynamicCall("AutoFit");

// 保存文件

QString filePath = QDir::homePath() + "/ExportData.xlsx";

workbook->dynamicCall("SaveAs(const QString&)", filePath);

workbook->dynamicCall("Close()");

excel->dynamicCall("Quit()");

} catch (...) {

QMessageBox::critical(this, "错误", "操作Excel时发生异常");

}

delete excel;

}

```

**使用说明:**

  1. 在.pro文件中添加:

```qmake

QT += core gui axcontainer

```

  1. 界面设计:
  • 在Qt Designer中添加:

  • 一个ListView对象(命名为listViewFile)

  • 两个PushButton(分别命名为btnBrowse和btnOutput)

  1. 注意:
  • 需要Windows系统和安装Excel才能使用QAxObject

  • 示例中的温度/透气度数据为随机生成,实际应根据需要替换真实数据

  • 要处理Excel操作失败的情况,可能需要更完善的错误处理

**替代方案(跨平台CSV导出):**

如果只需要生成Excel可读的格式,可以替换导出函数为:

```cpp

void MainWindow::on_btnOutput_clicked()

{

QString fileName = QFileDialog::getSaveFileName(

this,

"保存文件",

QDir::homePath(),

"CSV文件 (*.csv)"

);

if (fileName.isEmpty()) return;

QFile file(fileName);

if (!file.open(QIODevice::WriteOnly | QIODevice::Text))

return;

QTextStream stream(&file);

stream << "时间,温度(℃),透气度\n";

// 生成示例数据

for (int i = 0; i < 3; ++i) {

stream << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") << ","

<< 20 + qrand() % 10 << ","

<< 0.5 + (qrand() % 50)/100.0 << "\n";

}

file.close();

QMessageBox::information(this, "成功", "数据已导出到:" + fileName);

}

```

相关推荐
雨落倾城夏未凉1 小时前
7.QObject定时器和QTimer定时器的区别
后端·qt
笑鸿的学习笔记1 小时前
qt-C++语法笔记之Stretch与Spacer的关系分析
c++·笔记·qt
钢铁男儿9 小时前
PyQt5高级界而控件(容器:装载更多的控件QDockWidget)
数据库·python·qt
追烽少年x20 小时前
Qt中的QProcess类
qt
轩情吖1 天前
Qt的第一个程序(2)
服务器·数据库·qt·qt creator·qlineedit·hello world·编辑框
心愿许得无限大1 天前
Qt 常用界面组件
开发语言·c++·qt
机器视觉知识推荐、就业指导1 天前
Qt 与Halcon联合开发八: 结合Qt与Halcon实现海康相机采图显示(附源码)
开发语言·数码相机·qt
charlie1145141911 天前
如何使用Qt创建一个浮在MainWindow上的滑动小Panel
开发语言·c++·qt·界面设计
cpp_learners1 天前
QML与C++交互之创建自定义对象
c++·qt·qml
算法练习生1 天前
Qt核心类QWidget及其派生类详解
开发语言·c++·qt