Qt TableView导出数据到Excel

Qt TableView导出数据到Excel

Qt TableView导出数据到Excel

转自于:http://blog.csdn.net/lazydreamhunter/article/details/8571021

QAxObject对COM对象进行了封装,QAxObject派生自QAxBase,而后者提供了一组API通过IUnknown(不清楚IUnknown的同学可以去看看COM对象模型)指针直接访问COM对象,我们这里讲的excel也是一个COM对象,因此我们可以通过QAxObject来操作它,为了便于理解,我们首先了解一下excel的对象的主要层次结构:
Qt TableView导出数据到Excel_第1张图片
上图是excel对象的层次结构,
1个excel就有1个Application对象;
1个Application对象由多个Workbook对象组成,这些Workbook对象由Workbooks对象统一管理;
Workbook对象下可以包含若干Worksheet,Worksheet对象有一个WorkSheets对象来统一管理;
Range对象,这个对象就对应Worksheet里的表格单元(不使用Range,在数据量大时,导出效率慢)。
ExcelExport.h

#pragma once
#include
#include 
#include 
#include 

class ExcelExport
{
public:
	ExcelExport();
	~ExcelExport();

	void newExcel(const QString &fileName);
	void setCellValue(int row, int column, const QString &value);
	void setCellValue(int row, int column, const int &value);
	
	void saveExcel(const QString &fileName);


	QAxObject *pApplication;
	QAxObject *pWorkBooks;
	QAxObject *pWorkBook;
	QAxObject *pSheets;
	QAxObject *pSheet;

};

ExcelExport.cpp

#include "ExcelExport.h"

ExcelExport::ExcelExport()
{
}

void ExcelExport::newExcel(const QString &fileName)
{
	pApplication = new QAxObject();
	//连接Excel控件
	pApplication->setControl("Excel.Application");
	//false不显示窗体(看具体过程)
	pApplication->dynamicCall("SetVisible(bool)", false);
	//不显示任何警告信息
	pApplication->setProperty("DisplayAlerts", false);
	
	pWorkBooks = pApplication->querySubObject("Workbooks");
	
	QFile file(fileName);
	if (file.exists())
	{
		pWorkBook = pWorkBooks->querySubObject(
			"Open(const QString &", fileName);
	}else {
		pWorkBooks->dynamicCall("Add");
		pWorkBook =
			pApplication->querySubObject("ActiveWorkBook");
	}
	//默认有一个worksheet
	pSheets = pWorkBook->querySubObject("Sheets");
	pSheet = pSheets->querySubObject("Item(int)",1);
}

void ExcelExport::setCellValue(int row, int column
	, const QString &value)
{
	QAxObject *pRange = pSheet->querySubObject("Cells(int,int)"
		, row, column);
	pRange->dynamicCall("Value", value);
	//内容居中
	pRange->setProperty("HorizontalAlignment", -4108);
	pRange->setProperty("VerticalAlignment", -4108);
}

void ExcelExport::setCellValue(int row, int column
	, const int &value)
{
	QAxObject *pRange = pSheet->querySubObject("Cells(int,int)"
		, row, column);
	pRange->setProperty("Value", value);
	//内容居中
	pRange->setProperty("HorizontalAlignment", -4108);
	pRange->setProperty("VerticalAlignment", -4108);
}
void ExcelExport::saveExcel(const QString &fileName)
{
	pWorkBook->dynamicCall("SaveAs(const QString &)",
		QDir::toNativeSeparators(fileName));

	pApplication->dynamicCall("Quit(void)");  //退出
	delete pApplication;
}

ExcelExport::~ExcelExport()
{
}

注意:在VS种使用QAxObject需要进行:

  1. 右键项目,选择“Create Basic .pro File”

Qt TableView导出数据到Excel_第2张图片
在文件中加入

QT += core gui axcontainer
  1. 选择“Qt VS Tools ”->“Qt Project Setting”
    Qt TableView导出数据到Excel_第3张图片
    勾选Qt TableView导出数据到Excel_第4张图片
  2. 在头文件中,加入#include

你可能感兴趣的:(Qt)