Qt之如何写入Excel文件(一)_qt写excel,2024年最新我崩溃了

220 阅读2分钟

Qt之如何写入Excel文件(一)

概述:

前面文章一直分享如何如何读取Excel文件,两种方式
链接: 使用Qt读取Excel.
链接: 使用qtxlsx开源库读取Excel.
今天分享下如何使用Qt写入Excel文件,此案例功能是从文件读取数据加载到界面表格,修改界面表格数据后再将界面表格数据保存到Excel文件。
大家可以关注公众号“Qt幻想家”获取工程源码;

代码:

.cpp

void CExcel::slot\_Save()
{
	//!!!选择要保存的文件
	QString filePath = QFileDialog::getSaveFileName(this, "Save", "", "\*.xlsx");

	//!!!判空处理
	if (filePath.isEmpty())
		return;

	QAxObject excel("Excel.Application");

	//!!!获取工作簿集合
	QAxObject\*workbooks = excel.querySubObject("WorkBooks");
	//!!!新建工作簿
	workbooks->querySubObject("Add");
	//!!!获取当前工作簿
	QAxObject\*workbook = excel.querySubObject("ActiveWorkBook");

	if (workbook == nullptr)
		return;

	//!!!获取表页对象
	QAxObject\*worksheets = workbook->querySubObject("WorkSheets");
	//!!!获取第一页
	QAxObject\*worksheet = worksheets->querySubObject("Item(int)", 1);
	//!!!获取权限
	QAxObject\*usedrange = worksheet->querySubObject("Usedrange");

	//!!!遍历获取数据将数据写入文件
	for (int i = 0;i < ui.tableWidget->rowCount();i++)
	{
		for (int j = 0; j < ui.tableWidget->columnCount()-1; j++)
		{
			//if (i == 0)
			//{
				//worksheet->querySubObject("Cells(int, int)", i + 1, j + 1)->dynamicCall("setValue(const QVariant&)", ui.tableWidget->horizontalHeaderItem(j)->text().toStdString().c\_str());
			//}
			//else
			//{
				//worksheet->querySubObject("Cells(int, int)", i + 1, j+1)->dynamicCall("SetNumberFormatLocal(const QVariant&)", "@");
				worksheet->querySubObject("Cells(int, int)", i + 1, j + 1)->dynamicCall("setValue(const QVariant&)", ui.tableWidget->item(i, j)->text().toStdString().c\_str());

			//}
		}
		//excelDataInfo info;
		//info.num = ui.tableWidget->item(i, 0)->text().toInt();
		//info.x = ui.tableWidget->item(i, 1)->text().toFloat();
		//info.de = ui.tableWidget->item(i, 2)->text();
		//vecData.push\_back(info);
	}
	//!!!保存文件
	workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(filePath));
	workbooks->dynamicCall("Close()");
	excel.dynamicCall("Quit()");
}

.h

#pragma once
/\*
\* @file :CExcel.h
\* @author :Fantast
\* @date :2021-11-23 10:22
\* @version :1.0v
\* @description:win下读取excel文件到界面表格中修改表格内容在保存到excel文件
\*/
#include <QtWidgets/QWidget>
#include "ui\_CExcel.h"


//!!!用来存储每列数据
typedef struct ExcelData
{
	int num;	//!!!孔号
	float x;	//!!!坐标x
	QString de;	//!!!描述
}excelDataInfo;



//!!!excel
#include <ActiveQt/QAxObject>

//!!!打开文件窗口
#include <QFileDialog>

class CExcel : public QWidget
{
	Q_OBJECT

public:
	CExcel(QWidget \*parent = Q_NULLPTR);
	~CExcel();
private:
	//!!!初始化


![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/8f8c28da35cb4744894502aa43ae5da0~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773072774&x-signature=tGL3iGRq1QDYQcdYfJaHjemjolI%3D)
![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/edafb3bbeaf04bdab5e66c69bd4b0bb7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773072774&x-signature=ccqU0XMmxYP4vF8dbE%2BNaqoFarU%3D)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://gitee.com/vip204888)**