Qt中实现excel文件的写操作

包含头文件

#include <ActiveQt/QAxObject>
在Qt Project Settings的Qt Modules中勾选“ActiveQt container”模块

备注:以下代码实现功能为将float类型数据以列的形式添加写入excel文件中

bool exportToExcel(vector<float2> ch1)
{
QString filepath = QString("D:\\Test.xlsx");
if (!filepath.isEmpty()) 
{
	QAxObject* excel = new QAxObject(this);
	excel->setControl("Excel.Application");
	//连接Excel控件
	//excel->dynamicCall("SetVisible (bool Visible)", "true");
	//不显示窗体
	excel->dynamicCall("SetVisible (bool Visible)", "false");
	//不显示窗体		
	excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
	
	QAxObject* workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合
	//workbooks->dynamicCall("Add");//新建一个工作簿
	workbooks->dynamicCall("Add");//新建一个工作簿

	//4) 打开已存在的工作簿:
	//workbooks->dynamicCall("Open(const QString&)", QString("c:/test.xls"));
	workbooks->dynamicCall("Open(const QString&)", filepath);

	QAxObject* workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿
	QAxObject* worksheets = workbook->querySubObject("Sheets");//获取工作表集合
	QAxObject* worksheet = worksheets->querySubObject("Item(int)", 1);//获取工作表集合的工作表1,即sheet1


	QAxObject* used_range = worksheet->querySubObject("UsedRange");     //获得利用的范围
	QAxObject* rows_1 = used_range->querySubObject("Rows");
	QAxObject* columns = used_range->querySubObject("Columns"); 

	int row_start = used_range->property("Row").toInt();          //获得开始行
	int row_end = rows_1->property("Count").toInt();

	int column_start = used_range->property("Column").toInt();     //获得开始列
	int column_end = columns->property("Count").toInt();
	int columnCount = 0;
	columnCount = column_start + column_end;
	/*if (1 == column_end)
	{
		columnCount = 1;
	}
	else
	{
		columnCount+=2;
	}*/

	printf("\n\n\n\n********row_start = %d, row_end = %d, column_start = %d, column_end = %d********\n\n\n\n",row_start,row_end, column_start, column_end);

	QAxObject* cellA, * cellB, * cellC, * cellD;

	//设置标题
	int cellrow = 1;
	//QString A = "A" + QString::number(cellrow);//设置要操作的单元格,如A1
	//QString B = "B" + QString::number(cellrow);
	/*QString B = "B" + QString::number(row_end+1);
	QString C = "C" + QString::number(cellrow);
	QString D = "D" + QString::number(cellrow);*/
	//cellA = worksheet->querySubObject("Range(QVariant, QVariant)", A);//获取单元格
	//cellB = worksheet->querySubObject("Range(QVariant, QVariant)", B);
	cellB = worksheet->querySubObject("Cells(int,int)", 1, columnCount /*column_end+2*/);

	//QAxObject* range = worksheet->querySubObject("Cells(int,int)", 1, 1);

	/*cellC = worksheet->querySubObject("Range(QVariant, QVariant)", C);
	cellD = worksheet->querySubObject("Range(QVariant, QVariant)", D);*/
	//cellA->dynamicCall("SetValue(const QVariant&)", QVariant(cellTitle));//设置单元格的值
	cellB->dynamicCall("SetValue(const QVariant&)", QVariant(cellTitle));
	/*cellB->dynamicCall("SetValue(const QVariant&)", QVariant(QStringLiteral("用户名")));
	cellC->dynamicCall("SetValue(const QVariant&)", QVariant(QStringLiteral("金额")));
	cellD->dynamicCall("SetValue(const QVariant&)", QVariant(QStringLiteral("日期")));*/
	cellrow++;

	//int rows = this->model->rowCount();
	int rows = ch1.size();
	for (int i = 0; i < rows; i++) {
		//QString A = "A" + QString::number(cellrow);//设置要操作的单元格,如A1
		//QString B = "B" + QString::number(row_end + i);
		//QString B = "B" + QString::number(i);
		//QString B = "B" + QString::number(cellrow);
		//QString C = "C" + QString::number(cellrow);
		//QString D = "D" + QString::number(cellrow);
		//cellA = worksheet->querySubObject("Range(QVariant, QVariant)", A);//获取单元格
		//cellB = worksheet->querySubObject("Range(QVariant, QVariant)", B);
		//cellB = worksheet->querySubObject("Cells(int,int)", 3,i);


		//cellB = worksheet->querySubObject("Cells(int,int)", 3, 1);

		//cellC = worksheet->querySubObject("Range(QVariant, QVariant)", C);
		//cellD = worksheet->querySubObject("Range(QVariant, QVariant)", D);
		//cellA->dynamicCall("SetValue(const QVariant&)", QVariant(this->model->item(i, 0)->data(Qt::DisplayRole).toString()));//设置单元格的值
		//cellB->dynamicCall("SetValue(const QVariant&)", QVariant(this->model->item(i, 1)->data(Qt::DisplayRole).toString()));
		//cellC->dynamicCall("SetValue(const QVariant&)", QVariant(this->model->item(i, 2)->data(Qt::DisplayRole).toString()));
		//cellD->dynamicCall("SetValue(const QVariant&)", QVariant(this->model->item(i, 3)->data(Qt::DisplayRole).toString()));

		//cellA->dynamicCall("SetValue(const QVariant&)", QString("%1").arg(ch1[i].y));//设置单元格的值
		//cellB->dynamicCall("SetValue(const QVariant&)", QString("%1").arg(ch1[i].y));

		//获取单元格
		cellB = worksheet->querySubObject("Cells(int, int", i+2, columnCount /*column_end+2*/);
		//储存一个字符串数据至表格
		cellB->dynamicCall("setValue(const QVariant&", QVariant(ch1[i].y));

		//cellC->dynamicCall("SetValue(const QVariant&)", "1.3");
		//cellD->dynamicCall("SetValue(const QVariant&)", "1.4");

		//cellA = worksheet->querySubObject("Cells(int, int)", i, i + 1);//获取单元格
		//cellA->dynamicCall("SetValue(const QString&)", QString::number(i));//设置单元格的值

		cellrow++;

		printf("cellrow = %d\n", cellrow);
	}

	workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(filepath));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。
	workbook->dynamicCall("Close()");//关闭工作簿

	/*excel->setProperty("DisplayAlerts", 1);
	workbook->dynamicCall("Close (Boolean)", false);*/

	excel->dynamicCall("Quit()");//关闭excel
	delete excel;
	excel = NULL;
}
return true;

}

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值