VS+QT——读、改Excel文件

这篇文章主要是收集、整理一下个人觉得好的读、改Excel文件的博客。

  1. Windows下开发,使用QAxObject第三方库:《https://blog.csdn.net/qq_35040828/article/details/70143692》。该库,只能在Windows使用,因为它调用微软的COM组件。
  2. Windows下开发,使用QAxObject第三方库:《https://blog.csdn.net/x85371169/article/details/79268258》。这篇博客是在上篇博客的基础上进行改进,由于第二篇博客未给全代码,我总结两篇博客重新实现了一下,代码如下文。
  3. Windows下开发,但是支持QT所有支持的平台,包括Linux,使用QTxlsx第三方库:《https://blog.csdn.net/weixin_38294178/article/details/80735763》

《下面代码是  1  2  两篇博客 总结出来的》

//头文件
#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_TestForReadExcel.h"
#include <QAxObject>
#include <QDebug>
#include <QMessageBox>
#include <QFileDialog>
#include <QElapsedTimer>
#include <QElapsedTimer>


class TestForReadExcel : public QMainWindow
{
	Q_OBJECT

public:
	TestForReadExcel(QWidget *parent = Q_NULLPTR);
	~TestForReadExcel();
private:
	Ui::TestForReadExcelClass ui;
	QAxObject *excel = NULL;
public:
	//读取内容
	//void readExcel();
	QVariant readAll();
	void castVariant2ListListVariant(const QVariant &var, QList<QList<QVariant> > &res);
	//写入内容

};
//.cpp文件
#include "TestForReadExcel.h"

TestForReadExcel::TestForReadExcel(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	excel = new QAxObject("Excel.Application");//1800ms
	excel->dynamicCall("SetVisible(bool)", false);

	QList<QList<QVariant>> m_datas;
	QVariant var = readAll();
	castVariant2ListListVariant(var, m_datas);
	for (int i = 0; i < m_datas.size(); i++)
	{
		qDebug() << m_datas[i];
	}
}

TestForReadExcel::~TestForReadExcel()
{
	if (excel != nullptr)
	{
		delete excel;
	}
	excel = nullptr;
}


QVariant TestForReadExcel::readAll()
{
	QAxObject *workbooks = NULL;
	QAxObject *workbook = NULL;
	
	workbooks = excel->querySubObject("WorkBooks");
	workbook = workbooks->querySubObject("Open(QString, QVariant)", QString(tr("d:\\ExcelTest.xlsx")));
	QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", 1);//打开第一个sheet

	QVariant var;
	if (worksheet != NULL && !worksheet->isNull())
	{
		QAxObject *usedRange = worksheet->querySubObject("UsedRange");
		if (NULL == usedRange || usedRange->isNull())
		{
			return var;
		}
		var = usedRange->dynamicCall("Value");
		delete usedRange;
	}
	return var;
}


/***************************************
*函数功能:把QVariant转换为QList<QList<QVariant> >
*输入:
*	var:原QVariant
*	res:新的QList<QList<QVariant> >
*输出:
*	void
*作者:JZQ
*时间版本:2019-05-28-V1.0
***************************************/
void TestForReadExcel::castVariant2ListListVariant(const QVariant &var, QList<QList<QVariant> > &res)
{
	QVariantList varRows = var.toList();
	if (varRows.isEmpty())
	{
		return;
	}
	const int rowCount = varRows.size();
	QVariantList rowData;
	for (int i = 0; i < rowCount; ++i)
	{
		rowData = varRows[i].toList();
		res.push_back(rowData);
	}
}

 

 

 

 

 

全部评论

相关推荐

牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务