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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-04-15qt对xlsx文件的读取相关的知识,希望对你有一定的参考价值。

参考技术A 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创建的.xlsx文件打不开

提示:microsoft excel 文件格式和扩展名不匹配。用的是12.0的ODBC Excel驱动,2013版本的excel

Microsoft Excel 2010 单击“文件”选项卡,然后单击“选项”。 单击“高级”,然后单击“常规”区域中的“忽略其他使用动态数据交换 (DDE) 的应用程序”复选框,以取消选择。 单击“确定”。Microsoft Office Excel 2007</b> 单击“Microsoft Office 按钮”,然后单击“Excel 选项”。 单击“高级”,然后单击“常规”区域中的“忽略其他使用动态数据交换 (DDE) 的应用程序”复选框,以取消选择。 单击“确定”。Microsoft Office Excel 2003 或 Excel 的早期版本</b> 在工具菜单上单击选项。 单击“常规”选项卡。 单击“忽略其他使用动态数据交换 (DDE) 的应用程序”复选框,以取消选择,然后单击“确定”。执行此操作后,您应该可以通过在 Windows 资源管理器中双击工作簿来将其打开。追问

本来就没有勾选这个选项。谢谢你。

参考技术A 你把它保存为12.0的ODBC Excel驱动追问

把excel文件保存为驱动??我怎么不能理解、、

参考技术B 大哥,这个问题解决了吗?我用的win10的excel2016调用workbooks->dynamicCall("Open(const QString&)"获取不到当前的工作簿,但软件在win7下excel2016可用 参考技术C 你用wps试试看 啊追问

大哥,写软件一般都是给别人用的,,,

追答

你在编写软件吗?是不是手机上面用的

追问

不是,是电脑上面用的

以上是关于2021-04-15qt对xlsx文件的读取的主要内容,如果未能解决你的问题,请参考以下文章

使用POI读取xlsx文件,包含对excel中自定义时间格式的处理

R读取xlsx文件

r语言 读取xlsx文件,时间变成了43435 怎么解决?

DevExpress VCL最新版本支持读取xlsx格式的Excel文件吗

使用python读取和保存为excelcsvtxt文件以及对DataFrame文件的基本操作

如何才能拿R读取Excel文件