《Qt5+QAxObject操作Excel》

2024-03-17 15:30
文章标签 excel 操作 qt5 qaxobject

本文主要是介绍《Qt5+QAxObject操作Excel》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Qt5操作Excel需要用到QAxObject类,还需要在pro文件中添加QT+=axcontainer

QAxObject类

The QAxObject class provides a QObject that wraps a COM object. 

Header:#include <QAxObject>
qmake:QT += axcontainer
Inherits:QObject and QAxBase
Inherited By:

QAxScriptEngine

新建项目 

打开Qt,新建一个Qt Widgets Application项目,转到设计师模式,从左侧工具栏添加两个PushBotton控件到窗口上,调整PushBotton控件的大小,分别为两个PushBotton控件添加槽并修改按钮名字为创建Excel添加数据,具体做法如下:

选中按钮,右键,转到槽...,选择clicked(),OK

添加代码

选择项目文件名,右键,选择添加新文件,类名为Exchange,然后分别添加代码如下:

Pro文件

#-------------------------------------------------
#
# Project created by QtCreator 2018-11-06T14:28:30
#
#-------------------------------------------------
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = QtExcel
TEMPLATE = app
QT+=axcontainer
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \       main.cpp \        
mainwindow.cpp \    
exchang.cpp
HEADERS += \        
mainwindow.h \    
exchange.h
FORMS += \        
mainwindow.ui

exchange.h

#ifndef EXCHANGE_H
#define EXCHANGE_H//添加头文件
#include <QVariant>
#include <ActiveQt/QAxObject>//Excel
#include <QDebug>//debug输出
#include <QDir>//保存路径class Exchange
{
public:Exchange();void SetTitle1(const QVariant &var,const QVariant &value);void SetTitle2(const QVariant &var,const QVariant &value);void SetInteriorColor(const QVariant &var,const QVariant &value);void SetFontProperty(const QVariant &var,const QVariant &value1,const QVariant &value2,const QVariant &value3,const QVariant &value4);void WriteData(const QVariant &var,const QVariant &value);void CreateExcel();void AddData();
};#endif // EXCHANGE_H

exchang.cpp

#include "exchange.h"QAxObject *excel;
QAxObject *workbooks;
QAxObject *workbook;
QAxObject *worksheets;
QAxObject *worksheet;
QAxObject *range;
QAxObject *interior;
QAxObject *cell;
QAxObject *font;
//Excel保存路径QString path="C:/Users/dell/Desktop/Excel.xlsx";
Exchange::Exchange()
{}
/************************************ 函数功能:设置一级标题* var:单元格范围* value:一级标题名称* 创建时间:2018/10/17* 创建者:OYXL
************************************/
void Exchange::SetTitle1(const QVariant &var,const QVariant &value)
{range=worksheet->querySubObject("Range(const QString&)",var);range->setProperty("MergeCells",true);range->setProperty("Value",value);
}
/************************************ 函数功能:设置二级标题* var:单元格范围* value:二级标题名称* 创建时间:2018/10/17* 创建者:OYXL
************************************/
void Exchange::SetTitle2(const QVariant &var,const QVariant &value)
{range=worksheet->querySubObject("Range(const QString&)",var);range->setProperty("Value",value);
}
/************************************ 函数功能:按颜色序号设置背景色* var:单元格范围* value:颜色序号* 创建时间:2018/10/17* 创建者:OYXL
************************************/
void Exchange::SetInteriorColor(const QVariant &var,const QVariant &value)
{range=worksheet->querySubObject("Range(const QString&)",var);interior=range->querySubObject("Interior");interior->setProperty("ColorIndex",value);                              //按颜色序号进行颜色填充
}
/************************************ 函数功能:设置字体属性* var:单元格范围* value1:列宽* value2:自动换行true或者false* value3:加粗true或者false* value4:颜色序号* 创建时间:2018/10/17* 创建者:OYXL
************************************/
void Exchange::SetFontProperty(const QVariant &var,const QVariant &value1,const QVariant &value2,const QVariant &value3,const QVariant &value4)
{range=worksheet->querySubObject("Range(const QString&)",var);range->setProperty("ColumnWidth",value1);range->setProperty("WrapText", value2);range->setProperty("HorizontalAlignment", -4108);//水平对齐:默认=1,居中=-4108,左=-4131,右=-4152range->setProperty("VerticalAlignment", -4108);//垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107font = range->querySubObject("Font");//获取单元格字体font->setProperty("Name", QStringLiteral("微软雅黑"));//设置单元格字体font->setProperty("Bold", value3);//设置单元格字体加粗font->setProperty("Size", 12);//设置单元格字体大小font->setProperty("ColorIndex",value4);//按颜色序号进行颜色填充
}
/************************************ 函数功能:将数据写入EXCEL* var:单元格范围* value:数据值* 创建时间:2018/10/17* 创建者:OYXL
************************************/
void Exchange::WriteData(const QVariant &var,const QVariant &value)
{range=worksheet->querySubObject("Range(const QString&)",var);range->setProperty("Value",value);
}
/************************************ 函数功能:创建EXCEL表格* 创建时间:2018/7/5* 创建者:OYXL
************************************/
void Exchange::CreateExcel()
{Exchange change;excel = new QAxObject("Excel.Application");if (!excel){qDebug()<<"创建Excel失败!";}excel->dynamicCall("SetVisible(bool Visible)", true);       //是否可视化excelexcel->dynamicCall("SetUserControl(bool UserControl)", false);             //是否用户可操作//excel->setProperty("DisplayAlerts", true);                //是否弹出警告窗口workbooks = excel->querySubObject("WorkBooks");             //获取工作簿集合workbooks->dynamicCall("Add");                              //新建一个工作簿workbook = excel->querySubObject("ActiveWorkBook");         //获取当前工作簿worksheets = workbook->querySubObject("Sheets");            //获取工作表格集合worksheet  = worksheets->querySubObject("Item(int)", 1);    //获取当前工作表格1,即sheet1worksheet->setProperty("Name","恋爱数据");                  //修改sheet名称//<添加数据一级标题change.SetTitle1("A1:A2","序号");//<序号change.SetTitle1("B1:B2","时间和日期");//<时间和日期change.SetTitle1("C1:C2","恋爱模式");//<恋爱模式change.SetTitle1("D1:D2","姓名");//<姓名change.SetTitle1("E1:E2","性别");//<性别change.SetTitle1("F1:F2","年龄");//<年龄change.SetTitle1("G1:G2","签名");//<签名change.SetTitle1("H1:K1","爱好");//爱好//<添加数据二级标题change.SetTitle2("H2:H2","运动");//运动change.SetTitle2("I2:I2","音乐");//音乐change.SetTitle2("J2:J2","舞蹈");//舞蹈change.SetTitle2("K2:K2","游戏");//游戏//<颜色填充change.SetInteriorColor("A1:G1",3);change.SetInteriorColor("A2:G2",3);change.SetInteriorColor("H1:K1",4);change.SetInteriorColor("H2:K2",4);change.SetFontProperty("A1:A2",5,true,true,2);change.SetFontProperty("B1:B2",20,true,true,2);change.SetFontProperty("C1:F2",8,true,true,2);change.SetFontProperty("G1:G2",20,true,true,2);change.SetFontProperty("H1:K1",8,true,true,2);change.SetFontProperty("H2:K2",8,true,true,2);workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(path));
}
/** 函数功能:添加实验数据至EXCEL* 创建时间:2018/7/5* 创建者:OYXL
*/
void Exchange::AddData()
{Exchange change;QString rowsNum="3";workbooks->dynamicCall("Open(const QString&)", QDir::toNativeSeparators(path));//打开工作簿workbook = excel->querySubObject("ActiveWorkBook");         //获取当前工作簿worksheets = workbook->querySubObject("Sheets");            //获取工作表格集合worksheet  = worksheets->querySubObject("Item(int)", 1);    //获取当前工作表格1,即sheet1change.WriteData("A"+rowsNum+":"+"A"+rowsNum,"1");//序号change.WriteData("B"+rowsNum+":"+"B"+rowsNum,"2018/11/6");//时间和日期change.WriteData("C"+rowsNum+":"+"C"+rowsNum,"日久生情");//恋爱模式change.WriteData("D"+rowsNum+":"+"D"+rowsNum,"可乐");//姓名change.WriteData("E"+rowsNum+":"+"E"+rowsNum,"女");//性别change.WriteData("F"+rowsNum+":"+"F"+rowsNum,"18");//年龄change.WriteData("G"+rowsNum+":"+"G"+rowsNum,"一只会拆家的二哈");//签名//<CH1实验数据change.WriteData("H"+rowsNum+":"+"H"+rowsNum,"狗刨");change.WriteData("I"+rowsNum+":"+"I"+rowsNum,"God is gril");change.WriteData("J"+rowsNum+":"+"J"+rowsNum,"转圈");change.WriteData("K"+rowsNum+":"+"K"+rowsNum,"LOL");//<整行处理//COLORREF ColorFont1=RGB(255,255,255);change.SetFontProperty("A"+rowsNum+":"+"A"+rowsNum,4,true,false,1);change.SetFontProperty("B"+rowsNum+":"+"B"+rowsNum,20,true,false,1);change.SetFontProperty("C"+rowsNum+":"+"F"+rowsNum,8,true,false,1);change.SetFontProperty("G"+rowsNum+":"+"G"+rowsNum,20,true,false,1);change.SetFontProperty("H"+rowsNum+":"+"K"+rowsNum,8,true,false,1);workbook->dynamicCall("Save()");//保存EXCEL//workbook->dynamicCall("Close()");//关闭工作簿//excel->dynamicCall("Quit()");//退出
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_btnCreateExcel_clicked();void on_btnAddData_clicked();private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "exchange.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}
//创建Excel
void MainWindow::on_btnCreateExcel_clicked()
{Exchange change;change.CreateExcel();
}
//添加数据
void MainWindow::on_btnAddData_clicked()
{Exchange change;change.AddData();
}

显示效果

完整代码

百度网盘链接:https://pan.baidu.com/s/1JXZYTFHb6_wL4_uylqsIYw 
提取码:j76q 

 

这篇关于《Qt5+QAxObject操作Excel》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/819346

相关文章

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时