2021-04-15qt对xlsx文件的读取

2021-04-15qt对xlsx文件的读取,第1张

1:在项目文件中添加 QT+=axcontainer模块

2:头文件包含 #include<QAxObject>

3:定义一个QAxObjec对象并且指定父对象

4:连接控件,控件通常有excel和wps两种,大多数是excel,但需注意电脑上是否

安装了excel以及excel是否激活,因为这两种情况都会导致读取失败

实例

//加入用户电脑没有安装excel,setControl的返回值是零

//第二条if语句是判断用户有没有安装wps,有的话就打开wps控件

if (!excel.setControl("Excel.Application"))

    {

        if (!excel.setControl("ket.Application"))  //连接Excel控件

        {

            QMessageBox::about(NULL, "提示", "请安装excel或wps  ")

            return

        }

    }

5:设置读取.xlsx文件对象的属性

实例:

excel.setProperty("Visible", true)//设置.xlsx文件是否可见

6:获取工作簿集合

实例:

  QAxObject *work_books = excel.querySubObject("WorkBooks")

7:通过调用COM中的一个函数来打开我们的.xlsl文件

实例:

work_books->dynamicCall("Open (const QString&)", QString("D:/luohuiqing/qtexcel.xlsx"))

/*调用COM中名为Open的函数,并将第二个参数当做Open的形参传入*/

8:获取活动工作簿

实例:

QAxObject *work_book = excel.querySubObject("ActiveWorkBook")//获取活动工作簿

9:获取所有的工作表

实例:

QAxObject *work_sheets = work_book->querySubObject("WorkSheets")//获取所有的工作表,如图

10:获取工作表数目

实例:

int sheet_count = work_sheets->property("Count").toInt()  //获取工作表数目

11.在判断获取的工作表数目大于零的情况下,对表进行我们想要的 *** 作,如:

11.1:获取我们工作簿中的某张表

实例:

QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1)

/*获取工作簿中的第一张表*/

11.2:获取我们表中值的集合

实例:

QAxObject *usedRange=work_sheet->querySubObject("UsedRange")

QVariant var=usedRange->dynamicCall("value")

11.3:将我们得到的值存入一个QVariantList容器中

实例:

QVariantList varRowContents=var.toList()

11.4:将数据的数量用一个const的整形变量保存下来

11.5:注意数据在容器中的存储顺序是一行一行存储的

12:在我们对.xslx文件 *** 作结束后,应该关闭wps或excel,防止有进程残留

实例:

excel.dynamicCall("Quit(void)")

Qt *** 作Excel,无论后缀是xls还是xlsx都可以。

1.如下,是下载的一个Excel VBA参考手册,内容不算太全!

2.Excel读取

为了便于测试,假设已存在一个excel文件, *** 作内容已经被红色标记出来。如下所示:

主要读取内容:

标题

工作表数目

工作表名称

起始行

起始列

行数

列数

单元格内容

代码如下:

QAxObject excel("Excel.Application")

excel.setProperty("Visible", true)

QAxObject *work_books = excel.querySubObject("WorkBooks")

work_books->dynamicCall("Open (const QString&)", QString("E:/test.xlsx"))

QVariant title_value = excel.property("Caption") //获取标题

qDebug()<<QString("excel title : ")<<title_value

QAxObject *work_book = excel.querySubObject("ActiveWorkBook")

QAxObject *work_sheets = work_book->querySubObject("Sheets") //Sheets也可换用WorkSheets

QStringList referList

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC")

db.setDatabaseName("DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}DBQ=" + dir.filePath("test.xlsx"))

if(db.open())

{

QSqlQuery query("select * from [Sheet1$A:A]",db)// Select range, place A1:B5 after $

while (query.next())

{

QString dataStr= query.value(0).toString()

if(dataStr != "0")

{

referList <<dataStr

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6423226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-21
下一篇 2023-03-21

发表评论

登录后才能评论

评论列表(0条)

保存