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操作相关推荐

  1. Qt excel 操作使用说明

    一.简单介绍 QAxObject是Qt提供的包装COM组件的类,通过COM通过COM操作使用QAxObject类,使用此类,需要在pro文件中添加 QT += axcontainer 二.与excel ...

  2. Qt之excel 操作使用说明

    学习背景: 适合熟悉些qt开发,但是不是深入了解的开发者学习.具体实现(qt 5.1版本),office2007 Excel做验证,Win 7(64位),如有讲解有误,欢迎斧正! 一.简单介绍 QAx ...

  3. Qt QAxObject操作excel文件过程总结

    最近由于需要Qt来操作Excel文件,所以想把QAxObject用起来,此次使用也是机缘巧合,记录了一下心路历程. 此前走了很多弯路,希望做同样事情的人就别纠缠于同样的错误就好. 配制方面: 1.确保 ...

  4. Qt之操作Excel

    Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件. ...

  5. python数据分析报告的格式_Python数据报表之Excel操作模块用法分析

    本文实例讲述了Python数据报表之Excel操作模块用法.分享给大家供大家参考,具体如下: 一 点睛 Excel是当今最流行的电子表格处理软件,支持丰富的计算函数及图表,在系统运营方面广泛用于运营数 ...

  6. python处理excel表格实例-通过实例学习Python Excel操作

    这篇文章主要介绍了通过实例学习Python Excel操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.python 读取Excel # -* ...

  7. python与excel做数据可视化-Python的Excel操作及数据可视化

    Excel表操作 python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 安装xlrd pip install xlrd 简单的表格读取 ...

  8. python对excel某一列去重-「总结篇」Python中所有的Excel操作技巧

    原标题:「总结篇」Python中所有的Excel操作技巧 Python对于Excel的操作是多种多样的,掌握了相关用法就可以随心所欲的操作数据了! 操作xls文件 xlrd(读操作): import ...

  9. python在excel中的应用-python中的excel操作

    一. Excel在python中的应用 存测试数据 有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到.测试的时候就从数据库中读取出来.这点是非常重要的! 存测试结果 二. Excel中 ...

最新文章

  1. Vision Transformers 大有可为!
  2. 多通道接收机幅相校准测试系统的设计
  3. Linux下的零拷贝
  4. Rise of Shadows 闰年leap year-无法线性筛
  5. 【顶】Asp无组件生成缩略图(1)
  6. 关于计算机英语阅读,一篇摘选的关于计算机的英语阅读材料,对大家的英语也许会有提高!...
  7. python类与对象做项目_python 类和对象
  8. Linux下ip route、ip rule、iptables的关系(转
  9. Linux系统下载镜像
  10. 欧姆龙plc OMRON SYSMAX CP1H-E 使用 CXONE_V4.60 连接和编程
  11. 华为荣耀4X的ROOT
  12. LayoutInflater类的作用与用法
  13. IM通讯系统分析与实战
  14. c语言写长方形体积公式是什么,长方体的体积公式 长方体的体积公式是什么
  15. iOS 图片裁剪功能。
  16. 为什么pdf文件在一个计算机上能打开,拷贝到别的计算机上就打不开,显示文件已损坏?,pdf文件在电脑上打不开怎么办...
  17. etcd之日志和快照管理
  18. 晨曦记账本,记账一目了然
  19. 安卓项目为什么要clean,以及如何clean
  20. omnipeek安装步骤

热门文章

  1. 洛谷 P1162 填涂颜色 C++ 深搜 染色法
  2. 4.1Reduction模型
  3. windows server + documents4j 转excel报错 Could not access target file
  4. Error: spawn cmd ENOENT at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19
  5. 一个产品经理的自我认识
  6. eth_clockgen.v
  7. 用链表实现对二进制数加1的运算
  8. 桔皮加蜂蜜的制作方法?桔皮加蜂蜜泡水喝吗?
  9. java文件中搜索的快捷键_MyEclipse中的查找快捷键
  10. php k线15分钟 30分钟,5分钟K线、15分钟K线、30分钟K线和60分钟K线