《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,右=-4152
    range->setProperty("VerticalAlignment", -4108);//垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107
    font = 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);       //是否可视化excel
    excel->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,即sheet1
    worksheet->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,即sheet1

    change.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_OBJECT

public:
    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 

 

  • 13
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
您好!要在Excel中为多列添加边框,您可以使用QAxObject操作Excel对象。下面是一个示例代码,用于给多列添加边框: ```cpp // 引入QAxObject头文件 #include <QAxObject> // 创建Excel对象 QAxObject *excel = new QAxObject("Excel.Application", this); excel->dynamicCall("SetVisible(bool)", false); QAxObject *workbooks = excel->querySubObject("Workbooks"); QAxObject *workbook = workbooks->querySubObject("Add"); QAxObject *worksheets = workbook->querySubObject("Worksheets"); QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1); // 获取列数 int columnCount = 5; // 获取Range对象 QAxObject *range = worksheet->querySubObject("Range(QString, QString)", "A1", QString(QChar('A' + columnCount - 1)) + "1"); // 添加边框 QAxObject *borders = range->querySubObject("Borders"); borders->setProperty("LineStyle", 1); // 设置边框线型为连续线条 borders->setProperty("Weight", 2); // 设置边框线粗细为2 // 释放对象 delete borders; delete range; delete worksheet; delete worksheets; delete workbook; delete workbooks; excel->dynamicCall("Quit()"); delete excel; ``` 这段代码创建了一个Excel应用程序对象,添加了一个工作簿,并获取第一个工作表。然后,使用Range对象选择要添加边框的区域,设置边框的线型和粗细。最后,释放相关的对象并关闭Excel应用程序。 请注意,这里的示例使用的是Qt中的QAxObject类,您需要在项目中添加Qt的相关依赖。如果您是使用其他编程语言或框架,可以参考其提供的API文档,进行相应的操作。 希望能帮到您!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值