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);
	}
}

 

 

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Video Decoder丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值