当前位置:
首页 >
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
相关代码
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_Hwidget.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操作的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 斯考特·杨(Scott Young)快速
- 下一篇: visibility属性