欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Qt Excel操作

发布时间:2023/12/8 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Qt Excel操作 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Qt Excel操作

  • 简单介绍
  • 其他库
  • 基础操作
    • 添加模块
    • 相关代码
  • 遇到的坑

简单介绍

最近在写一个小工具涉及到了Excel操作,顺便学习记录一下。文章内使用的是Windows系统的ActiveX对象(QAxObject)操作Excel。

其他库

Qt操作Excel的库还有很多,可以参考Qt君写的链接: Qt处理Excel的一些库.

基础操作

添加模块

在Qt Creator中使用QAxObject需要先在pro中添加:
QT += axcontainer
在VS中使用的话需要在建工程或者,是项目右键的Qt Moudules中勾选ActiveQt container
包含头文件ActiveQt/QAxObject

include<ActiveQt/QAxObject>

相关代码

widget.h

#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <ActiveQt/QAxObject>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void OpenExcel();void AddNewExcel();void SaveAndClose();int GetRowsCount();QString GetCell(int row, int column);QString GetCell(QString numer);void SetCell(int row, int column, QString value);void SetCell(QString number, QString value);void SetCellColor(int row, int column, QColor color);private:Ui::Widget *ui;QAxObject *m_pExcel;QAxObject *m_pWorkBooks;QAxObject *m_pWorkBook;QAxObject *m_pWorkSheets;QAxObject *m_pWorkSheet; }; #endif // WIDGET_H

widget.cpp

#include "widget.h" #include "ui_widget.h" #include <QDebug> #include <QDir>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), m_pExcel(nullptr), m_pWorkBooks(nullptr), m_pWorkBook(nullptr), m_pWorkSheets(nullptr), m_pWorkSheet(nullptr) {ui->setupUi(this);// 连接excel 控件m_pExcel = new QAxObject("Excel.Application");// m_pExcel->setControl("Excel.Applicatio");// 设置操作excel时不打开excel窗体m_pExcel->dynamicCall("SetVisible(bool Visible)",false);// 设置不显示任何警告信息m_pExcel->setProperty("DisplayAlert",false);}// 打开已有的excel void Widget::OpenExcel() {QString strExcelPath = "C:\\Users\\Qcx\\Desktop\\test.xlsx";// 获取当前工作簿m_pWorkBooks = m_pExcel->querySubObject("WorkBooks");// 打开指定工作簿m_pWorkBook = m_pWorkBooks->querySubObject("Open(const QString&)",strExcelPath);if(m_pWorkBook){qDebug()<<"Open Excel Success!";}// 获取sheetsm_pWorkSheets = m_pWorkBook->querySubObject("Sheets");// 获取某个sheetm_pWorkSheet = m_pWorkSheets->querySubObject("Item(int)",1); }// 创建新的Excel void Widget::AddNewExcel() {// 获取当前工作簿m_pWorkBooks = m_pExcel->querySubObject("WorkBooks");m_pWorkBooks->dynamicCall("Add");m_pWorkBook = m_pExcel->querySubObject("ActiveWorkBook");m_pWorkSheets = m_pWorkBook->querySubObject("Sheets");m_pWorkSheet = m_pWorkSheets->querySubObject("Item(int)",1); }// 保存并关闭Excel void Widget::SaveAndClose() {QString strSavePath = "C:\\Users\\Qcx\\Desktop\\temp.xlsx";// 保存文件,一定要将路径中的'/'转为'\\',前者只能被Qt识别m_pWorkBook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(strSavePath));// 关闭文件m_pWorkBook->dynamicCall("Close()");// 关闭excelm_pExcel->dynamicCall("Quit()");delete m_pExcel;m_pExcel = nullptr; }// 获取行数 int Widget::GetRowsCount() {int iRows = 0;QAxObject *pRows = m_pWorkSheet->querySubObject("Rows");iRows = pRows->property("Count").toInt();return iRows; }// 获取单元格内容,行号+列号 QString Widget::GetCell(int row, int column) {QAxObject *pCell = m_pWorkSheet->querySubObject("Range(int, int)", row, column);return pCell->property("Value").toString(); }// 获取单元格内容,单元格标号如: A1,C5 QString Widget::GetCell(QString number) {QAxObject *pCell = m_pWorkSheet->querySubObject("Range(QString)", number);return pCell->property("Value").toString(); }// 设置单元格内容,行号+列号 void Widget::SetCell(int row, int column, QString value) {QAxObject *pCell = m_pWorkSheet->querySubObject("Range(int, int)", row, column);pCell->setProperty("Value", value); }// 设置单元格内容,单元格标号如: A1,C5 void Widget::SetCell(QString number, QString value) {QAxObject *pCell = m_pWorkSheet->querySubObject("Range(QString)", number);pCell->setProperty("Value", value); }// 设置单元格颜色的方式与设置值的方式一样,都是先获取到单元格,再设置属性 void Widget::SetCellColor(int row, int column, QColor color) {QAxObject *pCell = m_pWorkSheet->querySubObject("Range(int, int)", row, column);QAxObject *pInterior = pCell->querySubObject("Interior");pInterior->setProperty("Color", color); }Widget::~Widget() {delete ui; }

其他更多操作可参考该文章: Qt之操作Excel.

遇到的坑

在进行关闭操作时,明明执行没有任何错误,指针也没有异常,但就是Excel进程没有被杀死,我遇到的情况是电脑安装了福昕阅读器,会占用Excel的com接口。有两种解决方案:
1、暴力简单,直接卸载福昕阅读器;
2、打开Excel --> 选项 --> 加载项 --> 最下方的管理 --> 选中COM加载项 --> 转到 --> 取消FoxitReader PDF Creator COM Add-in。

总结

以上是生活随笔为你收集整理的Qt Excel操作的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。