头文件:mainwidget.h
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include <QWidget>
#include <QAxObject>
class MainWidget : public QWidget
{
Q_OBJECT
public:
explicit MainWidget(QWidget *parent = 0);
private:
QAxObject *excelApp;//应用程序
QAxObject *excelWorkbooks;//数据簿管理器
QAxObject *excelWorkbook;//数据簿
QAxObject *excelWorksheets;//数据表管理器
QAxObject *excelWorksheet;//数据表
private:
void CreateExcelApp(const QString &fileName);//新建Excel应用
void AppendExcelWorksheet(const QString &sheetName);//添加工作表
void WriteExcelWorksheet(int row,int column,const QString &dataStr);//向工作表中写数据
void saveExcel(const QString &fileName);//保存Excel
void FreeExcel();//释放Excel对象
signals:
public slots:
};
#endif // MAINWIDGET_H
源文件:mainwidget.cpp
#include "mainwidget.h"
#include <QFile>
#include <QDir>
MainWidget::MainWidget(QWidget *parent) :
QWidget(parent)
{
CreateExcelApp("D:/Datas.xls");//创建文件
WriteExcelWorksheet(1,1,"Hello");
saveExcel("D:/Datas.xls");
FreeExcel();
}
//创建Excel应用,创建Excel工作簿,创建Excel工作表
void MainWidget::CreateExcelApp(const QString &fileName)
{
excelApp = new QAxObject(this);
excelApp->setControl("Excel.Application");//连接Excel控件
excelApp->dynamicCall("SetVisable(bool)",false);//不显示窗体
excelApp->setProperty("DisplayAlerts",false);//不显示警告
//
excelWorkbooks = excelApp->querySubObject("Workbooks");
QFile file(fileName);
if(file.exists()==true)
{
excelWorkbook = excelWorkbooks->querySubObject("Open(const QString &)", fileName);//打开Excel文件
}
else
{
excelWorkbooks->dynamicCall("Add");//添加工作簿
int count = excelWorkbooks->property("Count").toInt();//获取工作簿数目
if(count >= 1)
{
excelWorkbook = excelWorkbooks->querySubObject("Item(int)",1);//获取第一个的工作簿
}
}
excelWorksheets = excelWorkbook->querySubObject("Sheets");//获取工作表管理器
excelWorksheet = excelWorksheets->querySubObject("Item(int)",1);//获取第一个工作表
}
//添加工作表
void MainWidget::AppendExcelWorksheet(const QString &sheetName)
{
int cnt = excelWorksheets->property("Count").toInt();//获取Excel工作表的数目
QAxObject *lastExcelWorksheet = excelWorksheets->querySubObject("Item(int)",cnt);//获取Excel最后一个工作表
excelWorksheets->querySubObject("Add(QVariant)", lastExcelWorksheet->asVariant());
excelWorksheet = excelWorksheets->querySubObject("Item(int)", cnt);//获取最后一个工作表
lastExcelWorksheet->dynamicCall("Move(QVariant)", excelWorksheet->asVariant());
excelWorksheet->setProperty("Name", sheetName);//设置工作表名称
}
//写数据
void MainWidget::WriteExcelWorksheet(int row, int column,const QString &dataStr)
{
QAxObject *range = excelWorksheet->querySubObject("Cells(int,int)", row, column);
range->dynamicCall("Value",dataStr);
}
//保存文件
void MainWidget::saveExcel(const QString &fileName)
{
excelWorkbook->dynamicCall("SaveAs(const QString &)",
QDir::toNativeSeparators(fileName));
}
//退出
void MainWidget::FreeExcel()
{
if(excelApp != NULL)
{
excelApp->dynamicCall("Quit()");
delete excelApp;
excelApp = NULL;
}
}