QT 使用第三方库QtXlsx操作Excel表

这篇具有很好参考价值的文章主要介绍了QT 使用第三方库QtXlsx操作Excel表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一直以来,都想学习一下C/C++如何操作excel表,在网上调研了一下,觉得使用C/C++去操作很麻烦,遂转向QT这边;QT有一个自带的类QAxObject,可以使用他去操作,但随着了解的深入,觉得他并不是很好,有很多其他缺陷(例如必须电脑安装了办公软件才可以进行操作等),所以继续调研,终于找到了QT的一个第三方库可以很好的实现:QtXlsx


目录

一、下载QtXlsx

二、QtXlsx源码嵌入QTCreator中使用

三、QtXlsx源码编译成为.lib库使用

1. 下载安装Perl

2. 编译QtXlsx

3. 在vs中使用

四、QtXlsx

1. 知识点

2. 使用公式

五、练手小demo


Github下载:https://github.com/dbzhang800/QtXlsxWriter
官方文档:http://qtxlsx.debao.me/

在Github下载后,可以直接添加到QtCreator项目中,也可以编译成lib库后再添加到VS中去使用。


一、下载QtXlsx

点击链接进入Github下载

qtxlsx,Qt,c++,qt,QtXlsx,Excel

下载解压后得到如下文件

qtxlsx,Qt,c++,qt,QtXlsx,Excel


二、QtXlsx源码嵌入QTCreator中使用

新建一个QTCreator窗体项目

将上图src文件夹拷贝到该项目路径中

qtxlsx,Qt,c++,qt,QtXlsx,Excel

之后双击项目中的.pro文件

将如下代码拷贝到.pro文件中

include(src/xlsx/qtxlsx.pri)

qtxlsx,Qt,c++,qt,QtXlsx,Excel

Ctrl + s 保存一下,就可以把QtXlsx源码模块加载进来啦!

可以在项目构造函数中添加如下代码进行测试:

#include "xlsxdocument.h"
#include "xlsxchartsheet.h"
#include "xlsxcellrange.h"
#include "xlsxchart.h"
#include "xlsxrichstring.h"
#include "xlsxworkbook.h"

QXlsx::Document xlsx;
xlsx.write(1, 2, "Hello Qt!");
xlsx.write(2, 2, QString::fromLocal8Bit("中文"));
xlsx.saveAs("Text.xlsx");

编译运行后,就可以在项目路径看到程序创建的Text.xlsx文件,打开后就可以看到写入的 "Hello Qt!"和"中文".


三、QtXlsx源码编译成为.lib库使用

1. 下载安装Perl

下载安装:Perl

下载链接:https://strawberryperl.com/

qtxlsx,Qt,c++,qt,QtXlsx,Excel

注意,这个是一定要下载安装的,否则编译lib库会编译失败!!! 

下载后默认安装即可

qtxlsx,Qt,c++,qt,QtXlsx,Excel

2. 编译QtXlsx

打开下载的QtXlsx文件夹,双击打开.pro

qtxlsx,Qt,c++,qt,QtXlsx,Excel

根据自己安装的vs版本,选择相应的msvc编译

qtxlsx,Qt,c++,qt,QtXlsx,Excel

 打开后直接点击编译

qtxlsx,Qt,c++,qt,QtXlsx,Excel

编译完成后,就可以在相应路径找到编译好的lib库

qtxlsx,Qt,c++,qt,QtXlsx,Excel

3. 在vs中使用

新建vsQT项目,将include文件夹Qt5Xlsxd.dllQt5Xlsxd.lib拷贝到项目路径中;

QtXlsxWriter-master文件夹整个拷贝到项目路径中;

qtxlsx,Qt,c++,qt,QtXlsx,Excel

拷贝之后项目路径文件,下图方框中的就是我们需要拷贝的文件

qtxlsx,Qt,c++,qt,QtXlsx,Excel

右键项目 - 属性 - C/C++ - 常规 - 附加包含目录,把头文件路径添加进来

qtxlsx,Qt,c++,qt,QtXlsx,Excel

右键项目 - 属性 - 链接器 - 输入 - 附加依赖项,添加Qt5Xlsxd.lib

之后,可以加入头文件

#include "xlsxdocument.h"
#include "xlsxchartsheet.h"
#include "xlsxcellrange.h"
#include "xlsxchart.h"
#include "xlsxrichstring.h"
#include "xlsxworkbook.h"

在构造函数中加入代码

	QXlsx::Document xlsx;
	xlsx.write(1, 2, "Hello Qt!");
	xlsx.write(2, 2, QString::fromLocal8Bit("中文"));
	xlsx.saveAs("Text.xlsx");

编译运行,不出意外的话, 在项目路径会一个名为Text.xlsx的文件,双击打开

qtxlsx,Qt,c++,qt,QtXlsx,Excel

数据也已经写入,测试成功! 


四、QtXlsx

1. 知识点

a. 定义

QXlsx::Document xlsx;

QXlsx::Document xlsx("Text.xlsx");

b. 往单元格中写入数据

write

xlsx.write(2, 2, "中文");         参数一是行,参数二是列,参数三是数据

xlsx.write("C3", "C3");        参数一是对应单元格名字,参数二是数据

c. 设置行高

setRowHeight

xlsx.setRowHeight(4, 30);        设置第四行高度为30

d. 设置列宽

setColumnWidth

xlsx.setColumnWidth(3, 50);         设置第三列宽度为50

 e. 设置单元格样式

QXlsx::Format format;

format.setFontColor(Qt::red);                  // 设置字体颜色为红色

format.setFontBold(true);                         // 设置加粗

format.setFontSize(30);                            // 设置字体大小

format.setFontItalic(true);                          // 设置倾斜

format.setFontName("楷体");                     // 设置字体

format.setPatternBackgroundColor(QColor(100, 200, 100));         // 设置单元格背景颜色

format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);      // 设置水平居中,更多参考enum HorizontalAlignment枚举

format.setVerticalAlignment(QXlsx::Format::AlignVCenter);           // 设置垂直居中

format.setBorderColor(QColor(50, 50, 50));                                    // 设置边框颜色

format.setFontUnderline(QXlsx::Format::FontUnderlineDouble);    // 设置双下划线,更多参考enum FontUnderline枚举

format.setFontUnderline(QXlsx::Format::FontUnderlineSingle);      // 设置单下划线

format.setFillPattern(QXlsx::Format::PatternLightUp);                     // 填充方式,更多参考enum FillPattern枚举

xlsx.write("C4", "红色|加粗|30", format);        作为第三个参数

f. 设置单元格方框

setBorderStyle

format.setBorderStyle(QXlsx::Format::BorderThin);        更多参考enum BorderStyle枚举

g. 合并单元格

mergeCells

xlsx.mergeCells("C4:E6");        参数指定那个单元格区间

h. 取消合并

unmergeCells

xlsx.unmergeCells("C4:E6");        参数指定的单元格区间一定是要已经合并的,否则打开xlsx文件报错

i. 读取单元格中的数据

read

QString str1 = xlsx.read(1, 1).toString();        指定行列获取

QString str2 = xlsx.read("B2").toString();        指定单元格名字获取

j. 获得单元格对象

cellAt

QXlsx::Cell *cell = xlsx.cellAt("C4");                获取到的是指针对象

QXlsx::Cell *cell = xlsx.cellAt(1, 1);

cell->value();        可以通过value()函数获取单元格中的值

k. 添加工作表

addSheet

xlsx.addSheet("sheet_2");        添加这一张名为“sheet_2”的工作表

l. 工作表重命名

renameSheet

xlsx.workbook()->renameSheet(1, "sheet_3");        将索引为1(也就是第二张)的工作表命名为“sheet_3”

m. 选择当前工作表

selectSheet

xlsx.selectSheet("sheet_3");        选择名为“sheet_3”的工作表为当前xlsx工作表

n. 获得所有工作表的名字

sheetNames
QStringList sheetList = xlsx.sheetNames();        获取返回的是一个字符串链表

o. 获取工作簿对象

workbook

QXlsx::Workbook *workBook = xlsx.workbook();

p. 获取当前工作簿的第一张sheet工作表

QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(0));

q. 获取当前sheet表所使用到的行数

int row = workSheet->dimension().rowCount();

r. 获取当前sheet表所使用到的列数

int colum = workSheet->dimension().columnCount();

s. 遍历sheet表中有数据的单元格

for (int i = 0; i < row; i++) {                                                               
    for (int j = 0; j < colum; j++) {                                                         
        // 获取单元格                                                                              
        QXlsx::Cell *cell = workSheet->cellAt(i, j);    // 读取单元格                              
        if (cell) {                                                                           
            qDebug() << "(" << i << ", " << j << ")\t" << cell->value().toString().trimmed();    // trimmed 去除字符串两侧的空格                                                                                              
        }                                                                                     
    }                                                                                         
}                                                                                             

t. 删除单元格数据

xlsx.write("G5", "");        直接重新设置为空即可

u. 修改单元格数据

xlsx.write("G6", "修改");        重新对单元格写入数据即可

v. 保存

saveAs

xlsx.saveAs("Text.xlsx");        初始化xlsx对象时没有指定excel文件,那么保存时使用这个

save

xlsx.save();        初始化xlsx对象时,指定了excel文件,那么保存时使用这个

w. 设置单元格中字符串不同字体颜色

RichString

QXlsx::Document xlsx("Text.xlsx");             
                                               
QXlsx::Format blue;     // 设置字体颜色              
blue.setFontColor(Qt::blue);                   
QXlsx::Format red;                             
red.setFontColor(Qt::red);                     
red.setFontSize(20);    // 设置字体大小              
QXlsx::Format bold;                            
bold.setFontBold(true); // 设置字体加粗              
                                               
QXlsx::RichString rich;                        
rich.addFragment("test", blue);                
rich.addFragment("QT", red);                   
rich.addFragment("中文", bold);                  
                                               
xlsx.write("C3", rich);                        
                                               
xlsx.save();                                   

qtxlsx,Qt,c++,qt,QtXlsx,Excel

x. 给单元格命名

xlsx.defineName("Cell_1", "=Sheet1!$A$1:$A$10");    // A1-A10命名为Cell_1
xlsx.defineName("Cell_2", "=Sheet1!$B$1:$B$10", "这是描述信息");  // B1-B10命名为Cell_2

qtxlsx,Qt,c++,qt,QtXlsx,Excel

 y. 赋值

xlsx.defineName("Factor", "=0.5");         // 将0.5赋值给Factor,相当于变量赋值一样,我们就可以使用这个变量了

2. 使用公式

xlsx.write(11, 1, "=SUM(Cell_1)");  // 计算A1-A10数据总和,并写入(11,1)单元格中
xlsx.write(15, 1, "=SUM($A$1:$A$10)");  // 计算A1-A10数据总和,并写入(15,1)单元格中

使用公式和变量

xlsx.write(12, 1, "=SUM(Cell_1)*Factor");   // 计算A1-A10数据总和再乘以0.5,并写入(12,1)单元格中
xlsx.write(16, 1, "=SUM($A$1:$A$10)*Factor"); // 计算A1-A10数据总和再乘以0.5,并写入(16,1)单元格中
xlsx.write(13, 2, "=SUM($B$1:B$10)*0.1");    // B1 - B10 计算总和后乘以0.1

五、练手小demo

自己写的一个小demo,操作excel文件,自动生成该excel文件,然后可以对其插入,删除,保存,刷新的操作!

使用QTCreator进行操作编写!

qtxlsx,Qt,c++,qt,QtXlsx,Excel

 qtxlsx,Qt,c++,qt,QtXlsx,Excel

下载链接:Qtxlsx+QtCreator+自己编写的对excel文件操作小案例-C++文档类资源-CSDN文库文章来源地址https://www.toymoban.com/news/detail-610705.html

到了这里,关于QT 使用第三方库QtXlsx操作Excel表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 保姆式教程-Qt配置QtXlsx库

    Qt Xlsx 模块提供了一组类来读写 Excel 文件。它不需要 Microsoft Excel,可以在 Qt5 支持的任何平台上使用。 该库可用于: 生成一个新的 .xlsx 文件 从现有的 .xlsx 文件中提取数据 编辑现有的 .xlsx 文件 以上介绍节选自官方文档 Qt Xlsx源代码下载链接 3.1.1 查看是否安装了Perl 如果前期

    2024年02月04日
    浏览(40)
  • C#使用第三方库ExcelDataReader读取excel数据并呈现

    之前有使用Oledb读取Excel的代码:C#读取excel数据并呈现 使用这种方式读取存在需要安装数据库引擎的隐患(如需要自取)

    2024年02月13日
    浏览(44)
  • windows下qt使用第三方库(静态链接库lib)、静态库和动态库区别、动态库的使用。

    这里主要是讲述windows下qt使用第三方库。 windows下qt使用第三方库(静态链接库lib)。 为了能够使测试更准确,首先自己用qt创建了一个已经封装好的lib库。 然后让另一个项目去链接这个lib静态库,并且去调用里面的方法。 目的: 使 untitled项目 能够使用 myllplib.lib 静态库,这

    2023年04月17日
    浏览(96)
  • Qt添加第三方字体

    最近开发项目时,据说不能用系统自带的微软雅黑字体,于是找一个开源的字体,思源黑体,这个是google和Adobe公司合力开发的可以免费使用。本篇记录一下Qt使用第三方字体的方式。字体从下载之家下载http://www.downza.cn/soft/266042.html。下载解压后有8种字体 代码实现 运行效果

    2024年02月16日
    浏览(70)
  • C++读写excel文件的的第三方库

    用于读取、写入、创建和修改 Microsoft Excel® (.xlsx) 文件的 C++ 库。 xlnt 是一个现代 C++ 库,用于操作内存中的电子表格以及从 XLSX 文件读取/写入它们,如ECMA 376 第 4 版中所述。xlnt 1.0 版的首次公开发布是在 2017 年 5 月 10 日。目前的工作重点是增加兼容性、提高性能以及集思广

    2024年02月05日
    浏览(50)
  • 第三方开发工具—PyCharm(安装、使用、汉化)超详细、图超多、注脚特多(Windows操作系统)

    目录 前言 一、PyCharm安装 安装地址 安装步骤 二、第一次启动 三、使用(开始编程) 1.第一个文件夹 2.第一个程序 3.运行第一个程序 四、汉化插件 五、总结 做任何事情时,舒适的环境是非常重要的。一个好的软件开发环境能给人带来不一样的体验。 先让我们来看看PyCharm的

    2024年02月03日
    浏览(80)
  • QT---将第三方软件窗口嵌入窗口中

    通过Windows API获取窗口句柄。 代码如下:

    2024年02月12日
    浏览(80)
  • redis(其它操作、管道)、django中使用redis(通用方案、 第三方模块)、django缓存、celery介绍(celery的快速使用)

    1 redis其它操作 2 redis管道 3 django中使用redis 3.1 通用方案 3.2 第三方模块 4 django缓存 5 celery介绍 5.1 celery的快速使用

    2024年02月07日
    浏览(50)
  • Qt Creator导入第三方so库和jar包——Qt For Android

    之前了解了在Android Studio下导入so库和jar包,现在实现如何在Qt上导入so库和jar包。 下面是我安卓开发(需调用安卓接口的代码)的目录(图1),此目录结构和原生态环境(Android Studio)下开发的结构很相似: 图1 在Qt  Creator上导入so库和jar包,比在Android Studio上简单很多,只需

    2024年04月29日
    浏览(48)
  • 深入解析C#中的第三方库NPOI:Excel和Word文件处理的利器

    一、引言 在.NET开发中,操作Office文档(特别是Excel和Word)是一项常见的需求。然而,在服务器端或无Microsoft Office环境的场景下,直接使用Office Interop可能会面临挑战。为了解决这个问题,开源库NPOI应运而生,它提供了无需安装Office即可创建、读取和修改Excel (.xls, .xlsx) 和

    2024年03月18日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包