Qt在windows 平台操作保存execel的表格(通过QAxObject来操作)

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt在windows 平台操作保存execel的表格(通过QAxObject来操作)相关的知识,希望对你有一定的参考价值。

  • 粗略操作
QT       += core gui sql

CONFIG += qaxcontainer

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("./sql/contact.db");
    if(!db.open())
    {
        qDebug()<<"open sql failed !";
        return;
    }
    model = new QSqlQueryModel(ui->tableview);
    model->setQuery(QString("select * from phonebook;"));
    model->setHeaderData(0,Qt::Horizontal,QObject::tr("Name"));
    model->setHeaderData(1,Qt::Horizontal,QObject::tr("Tel"));
    ui->tableview->setModel(model);
    db.close();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QString filepath=QFileDialog::getSaveFileName(this,tr("Save orbit"),".",tr("Microsoft Office 2007 (*.xlsx)"));//获取保存路径
    if(!filepath.isEmpty()){
        QAxObject *excel = new QAxObject(this);
        excel->setControl("Excel.Application");//连接Excel控件
        excel->dynamicCall("SetVisible (bool Visible)","false");//不显示窗体
        excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示

        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);//获取工作表集合的工作表1,即sheet1
        QAxObject *cellX,*cellY;
        for(int i=0;i<model->rowCount();i++){
            QString X="A"+QString::number(i+1);//设置要操作的单元格,如A1
            QString Y="B"+QString::number(i+1);
            cellX = worksheet->querySubObject("Range(QVariant, QVariant)",X);//获取单元格
            cellY = worksheet->querySubObject("Range(QVariant, QVariant)",Y);
            cellX->dynamicCall("SetValue(const QVariant&)",QVariant(model->record(i).value("Name").toString()));//设置单元格的值
            cellY->dynamicCall("SetValue(const QVariant&)",QVariant(model->record(i).value("Tel").toString()));
        }

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

http://www.heilqt.com/topic/56e90da0e498871267b374cf

以上是关于Qt在windows 平台操作保存execel的表格(通过QAxObject来操作)的主要内容,如果未能解决你的问题,请参考以下文章

windows平台下基于QT和OpenCV搭建图像处理平台

QT中键盘钩子的使用

在嵌入式 linux 平台上运行使用 QT 在 windows 中创建的应用程序

Qt 程序在 Windows 下的发布

Qt 框架适用于这个 Windows 和 Mac GUI?

Qt 5.3.1 应用程序错误:无法找到或加载 Qt 平台插件“windows”