首页 > 其他分享 >Qt Excel读写 QXlsx的安装配置以及测试

Qt Excel读写 QXlsx的安装配置以及测试

时间:2024-04-30 10:35:23浏览次数:11  
标签:QXlsx Qt xlsx int Excel cell include

引言
  Qt无自带的库处理Excel 文件,但可通过QAxObject 借助COM接口进行Excel的读写1。亦可使用免费的开源第三方库:QXlsx,一个基于Qt库开发的用于读写Microsoft Excel文件的C++库。它提供了一组简单易用的API,可以方便地创建、修改和操作Excel文件。

一、安装配置
1.下载源码,如下图所示,QXlsx就是核心代码,里面还包含了很多示例。

2.创建一个工程,控制台或者带界面的都可以,将QXlsx复制到工程目录下。

3.在.pro文件中添加以下语句,将QXlsx添加到工程中,保存pro文件 (自动会执行qmake 或自己手动执行) :

1 # QXlsx code for Application Qt project
2 QXLSX_PARENTPATH=./QXlsx/         # current QXlsx path is . (. means curret directory)
3 QXLSX_HEADERPATH=./QXlsx/header/  # current QXlsx header path is ./header/
4 QXLSX_SOURCEPATH=./QXlsx/source/  # current QXlsx source path is ./source/
5 include(./QXlsx/QXlsx.pri)

二、简单测试

1.创建一个.xlsx文件,对单元格赋值,保存到磁盘上。

 1 #include "mainwindow.h"
 2 #include <QApplication>
 3 
 4 // QXlsx
 5 #include "xlsxdocument.h"
 6 #include "xlsxchartsheet.h"
 7 #include "xlsxcellrange.h"
 8 #include "xlsxchart.h"
 9 #include "xlsxrichstring.h"
10 #include "xlsxworkbook.h"
11 
12 int main(int argc, char *argv[])
13 {
14 //    QApplication a(argc, argv);
15 //    MainWindow w;
16 //    w.show();
17 
18 //    return a.exec();
19     // 测试QXlsx
20     QXlsx::Document xlsx;
21     xlsx.write("A1", "A1");   // (A,1)  第一行第一列
22     xlsx.write(1, 2, "A2");   // (A,2)  第一行第二列
23     xlsx.saveAs("Test.xlsx"); // 保存
24     return 0;
25 }

2.读取一个.xlsx文件,输出到控制台。(使用官方的ShowConsole代码)
修改官方代码.pro文件,配置添加QXlsx。修改xlsxFileName为刚才生成的Test.xlsx,运行即可。

  1 // main.cpp
  2 
  3 #include <iostream>
  4 #include <vector>
  5 
  6 #include <QCoreApplication>
  7 #include <QDebug>
  8 #include <QDir>
  9 #include <QVariant>
 10 #include <QtCore>
 11 #include <QtGlobal>
 12 using namespace std;
 13 
 14 // [0] include QXlsx headers
 15 #include "xlsxcellrange.h"
 16 #include "xlsxchart.h"
 17 #include "xlsxchartsheet.h"
 18 #include "xlsxdocument.h"
 19 #include "xlsxrichstring.h"
 20 #include "xlsxworkbook.h"
 21 using namespace QXlsx;
 22 
 23 #include "fort.hpp" // libfort
 24 
 25 int main(int argc, char *argv[])
 26 {
 27     QCoreApplication app(argc, argv);
 28 
 29     // get xlsx file name
 30     QString xlsxFileName = "Test.xlsx";
 31     qDebug() << xlsxFileName;
 32 
 33     // tried to load xlsx using temporary document
 34     QXlsx::Document xlsxTmp(xlsxFileName);
 35     if (!xlsxTmp.isLoadPackage()) {
 36         qCritical() << "Failed to load" << xlsxFileName;
 37         return (-1); // failed to load
 38     }
 39 
 40     // load new xlsx using new document
 41     QXlsx::Document xlsxDoc(xlsxFileName);
 42     xlsxDoc.isLoadPackage();
 43 
 44     int sheetIndexNumber = 0;
 45     foreach (QString curretnSheetName, xlsxDoc.sheetNames()) {
 46         QXlsx::AbstractSheet *currentSheet = xlsxDoc.sheet(curretnSheetName);
 47         if (NULL == currentSheet)
 48             continue;
 49 
 50         // get full cells of sheet
 51         int maxRow = -1;
 52         int maxCol = -1;
 53         currentSheet->workbook()->setActiveSheet(sheetIndexNumber);
 54         Worksheet *wsheet = (Worksheet *) currentSheet->workbook()->activeSheet();
 55         if (NULL == wsheet)
 56             continue;
 57 
 58         QString strSheetName = wsheet->sheetName(); // sheet name
 59 
 60         // display sheet name
 61         std::cout << std::string(strSheetName.toLocal8Bit()) << std::endl;
 62 
 63         QVector<CellLocation> clList = wsheet->getFullCells(&maxRow, &maxCol);
 64 
 65         QVector<QVector<QString>> cellValues;
 66         for (int rc = 0; rc < maxRow; rc++) {
 67             QVector<QString> tempValue;
 68             for (int cc = 0; cc < maxCol; cc++) {
 69                 tempValue.push_back(QString(""));
 70             }
 71             cellValues.push_back(tempValue);
 72         }
 73 
 74         for (int ic = 0; ic < clList.size(); ++ic) {
 75             // cell location
 76             CellLocation cl = clList.at(ic);
 77 
 78             int row = cl.row - 1;
 79             int col = cl.col - 1;
 80 
 81             // https://github.com/QtExcel/QXlsx/commit/9ab612ff5c9defc35333799c55b01be31aa66fc2
 82             // {{
 83             // QSharedPointer<Cell> ptrCell = cl.cell; // cell pointer
 84             std::shared_ptr<Cell> ptrCell = cl.cell; // cell pointer
 85 
 86             // value of cell
 87             // QVariant var = cl.cell.data()->value();
 88             QVariant var = ptrCell->value();
 89             // }}
 90 
 91             QString str = var.toString();
 92 
 93             cellValues[row][col] = str;
 94         }
 95 
 96         fort::table fortTable;
 97         for (int rc = 0; rc < maxRow; rc++) {
 98             for (int cc = 0; cc < maxCol; cc++) {
 99                 QString strTemp = cellValues[rc][cc];
100                 fortTable << std::string(strTemp.toLocal8Bit()); // display value
101             }
102             fortTable << fort::endr; // change to new row
103         }
104 
105         std::cout << fortTable.to_string() << std::endl; // display forttable row
106 
107         sheetIndexNumber++;
108     }
109 
110     return 0;
111 }

 

标签:QXlsx,Qt,xlsx,int,Excel,cell,include
From: https://www.cnblogs.com/ybqjymy/p/18167336

相关文章

  • Qt Excel的读写
    在Qt中,可以使用第三方库来处理Excel文件,常用的库包括:QXlsx:一个基于Qt的Excel文件处理库,支持读写Excel文件。LibXL:一个商业的Excel文件处理库,支持多种编程语言,包括C++。OpenXLSX:一个开源的Excel文件处理库,支持读写Excel文件,支持多种操作系统。下......
  • 多人同时导出 Excel 干崩服务器!新来的阿里大佬给出的解决方案太优雅了!
    来源:juejin.cn/post/7259249904777838629前言业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比较大;结合以上原因,对导出操作进行排队;刚开......
  • Qt Creator + MSVC2017编译器配置指南
    QtCreator+MSVC2017编译器配置指南下载和安装MSVC2017编译器下载下载MSVC编译器安装工具:https://docs.microsoft.com/zh-tw/previous-versions/visualstudio/visual-studio-2017/install/use-command-line-parameters-to-install-visual-studio?view=vs-2017安装安......
  • 给Qt搭建一个简单的Json服务器用于软件调试
    一.vscode+nodejs+npm安装二.nodejs服务器开启打开vscode-终端-新建终端进入json_server目录cdD:\json_server运行启动命令,启动json-server服务器npmrunjson:server效果如下:PSD:\json_server>npmrunjson:server>[email protected]:se......
  • Qt-Model/View综合示例
    相关类简介Qt和Model/View模式相关的类比较多,但一般存在继承关系,按model(模型),view(视图),delegate(委托)划分为如下几种:类型类名简介父类modelQAbstractItemModel(抽象类)常用的Model的基类QObjectQStandardItemModel通用model可以实现以下任意类型......
  • Qt控件QSplitter的用法
    简介继承自QFrame构造创建竖排分割窗口(一列多行)QSplitter*splitterVertical=newQSplitter(Qt::Vertical,nullptr);创建横排分割窗口(一行多列)QSplitter*splitterHorizontal=newQSplitter(Qt::Horizontal,nullptr);添加部件以子控件的方式添加QTex......
  • 通过Http链接地址爬取有赞微信商城商品信息及下载至EXCEL
    一、环境开发环境:MicrosoftVisualStudioProfessional2022(2)(64位)-Current版本17.7.7.netcore6.0AngleSharp1.1.2AngleSharp.Js0.15.0Downloder3.0.6Magicodes.IE.Excel2.7.5.1二、添加winform项目 三、添加html操作类 四、添加http请求帮助类......
  • Qt QSettings读写ini时 General 读不出来值
    简述我有一个配置文件,其中一个组General,怎么都读不出正确的值,全是空,但是别的组能读出来,改General2试试,果然可以,就怀疑是不是组名称被内置了。打开QSettings的帮助文档,搜索General,有内容,看下解释TheINIfileformathassevererestrictionsonthesyntaxofakey.Qt......
  • 解决PHPExcel超时、内存超出的问题
    一、PHPExcel导出数据量大的时候容易超时、内存使用超出限制。以前都是将PHP内存使用限制不断增大,超时时间不断增大来应对,但即使如此,web端导出时,浏览器依然会超时。考虑了Jquery+Ajax+table导出,数据量依然会使浏览器卡死,经尝试可以用以下方法,//打开PHP文件句柄,php://output......
  • Excel 图片
    /***获取图片*Excel文件中某一列都为图片多列图片这里需要读取指定的列c1**@paramworkbookworkbook*@paramsiteImgMapMap<Integer,List<byte[]>>siteImgMap多图片*/privatevoidarrangeExcelImg(XSSFWorkbookworkboo......