先上效果图:
直接上代码,代码有重要API的注释:
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QVariant>
#include <QAxObject>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
exportToExcel();
}
Widget::~Widget()
{
delete ui;
}
void Widget::exportToExcel()
{
//保存文件的路径
QString filepath = QFileDialog::getSaveFileName(this, tr("Save orbit"), ".", tr("Microsoft Office 2019 (*xls, *.xlsx)"));
if(!filepath.isEmpty())
{
QAxObject *excel = new QAxObject(this);
excel->setControl("Excel.Application");
excel->dynamicCall("SetVisible (bool Visible)","false");
excel->setProperty("DisplayAlerts", false);
QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合
workbooks->dynamicCall("Add");//新建一个工作簿
QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿
QAxObject *worksheets = workbook->querySubObject("Sheets");//获取工作表集合
QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);
QAxObject *cellA, *cellB, *cellC;
//设置标题
int cellrow = 1;
QString A = "A" + QString::number(cellrow);
QString B = "B" + QString::number(cellrow);
QString C = "C" + QString::number(cellrow);
cellA = worksheet->querySubObject("Range(QVariant, QVariant)", A);
cellB = worksheet->querySubObject("Range(QVariant, QVariant)", B);
cellC = worksheet->querySubObject("Range(QVarinat, QVariant)", C);
//设置单位的值
cellA->dynamicCall("SetValue(const QVariant&)", QVariant("序号"));
cellB->dynamicCall("SetValue(const QVariant&)", QVariant("名称"));
cellC->dynamicCall("SetValue(const QVariant&)", QVariant("子序号"));
cellrow++;
//插入数据
for(int i = 0; i < 50; ++i)
{
QString A = "A" + QString::number(cellrow);
QString B = "B" + QString::number(cellrow);
QString C = "C" + QString::number(cellrow);
cellA = worksheet->querySubObject("Range(QVariant, QVariant)", A);
cellB = worksheet->querySubObject("Range(QVariant, QVariant)", B);
cellC = worksheet->querySubObject("Range(QVarinat, QVariant)", C);
cellA->dynamicCall("SetValue(const QVariant&)", QVariant(QString::number(cellrow)));
cellB->dynamicCall("SetValue(const QVariant&)", QVariant("飞机系统原理"));
cellC->dynamicCall("SetValue(const QVariant&)", QVariant(QString::number(cellrow) + "." + QString::number(cellrow)));
cellrow++;
}
worksheet->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));
workbook->dynamicCall("Close()");
excel->dynamicCall("Quit()");
delete excel;
excel = NULL;
}
}