QT应用编程: 导出QTableWidget数据写入到Execl表格

简介: QT应用编程: 导出QTableWidget数据写入到Execl表格

一、环境介绍

操作系统介绍:win10 64位

QT版本: 5.12.6

二、功能介绍

将QTableWidget表格编辑的数据写入到本地execl表格文件中保存。

Header: #include <QAxObject> 
qmake:  QT += axcontainer

三、示例代码

/*
日期: 2020-12-23
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: 导出数据到execl表格
*/
void Widget::SaveExeclData()
{
    int value;
    value=QMessageBox::question(this,"提示","确定导出表格数据到Execl?",
    QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes);
    if(value==QMessageBox::No)return;
    //获取保存的文件路径
    QString filepath = QFileDialog::getSaveFileName(this, "选择保存文件名称",
    QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation),
                        "Excel 文件(*.xls *.xlsx)");
    qDebug()<<"filepath:"<<filepath;
    if(filepath.isEmpty())
    {
        QMessageBox::critical(this,"提示","未选择正确的文件.导出失败.",
        QMessageBox::Ok,QMessageBox::Ok);
        return;
    }
    QAxObject *excel = new QAxObject(this);
    if(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 *worksheet = workbook->querySubObject("Worksheets(int)", 1);
        QTableWidget *table=ui->tableWidget_Measure;
        int i,j,colcount=table->columnCount(),rowcount=table->rowCount();
        QAxObject *cell,*col;
        cell=worksheet->querySubObject("Cells(int,int)", 1, 1);
        cell->dynamicCall("SetValue(const QString&)", "title");
        cell->querySubObject("Font")->setProperty("Size", 18);
        worksheet->querySubObject("Range(const QString&)", "1:1")->setProperty("RowHeight", 60);
        QString cellTitle;
        cellTitle.append("A1:");
        cellTitle.append(QChar(colcount  + 'A'));
        cellTitle.append(QString::number(1));
        QAxObject *range = worksheet->querySubObject("Range(const QString&)", cellTitle);
        range->setProperty("WrapText", true);
        range->setProperty("MergeCells", true);
        range->setProperty("HorizontalAlignment", -4108);
        range->setProperty("VerticalAlignment", -4108);
        //行的表头
        for(i=0;i<colcount;i++)
        {
            QString columnName;
            cell=worksheet->querySubObject("Cells(int,int)", 2, i+2);
            columnName=table->horizontalHeaderItem(i)->text();
            cell->dynamicCall("SetValue(const QString&)", columnName);//打印到excel
            cell->querySubObject("Font")->setProperty("Bold", true);
            cell->querySubObject("Interior")->setProperty("Color",QColor(191, 191, 191));
            cell->setProperty("HorizontalAlignment", -4108);
            cell->setProperty("VerticalAlignment", -4108);
        }
        //列的表头
        for(i=0;i<rowcount;i++)
        {
            //读取
            QString rowName;
            //修改内容
            cell=worksheet->querySubObject("Cells(int,int)", i+3, 1);
            //获取垂直表头
            // rowName=table->verticalHeaderItem(i)->text();
            //horizontalHeaderItem(i)->text();//获取此处的文本内容,i是列号,就是第几列中的文本内容
            //写表头数据
            cell->dynamicCall("SetValue(const QString&)",i);
            cell->querySubObject("Font")->setProperty("Bold", true);
            cell->querySubObject("Interior")->setProperty("Color",QColor(191, 191, 191));
            cell->setProperty("HorizontalAlignment", -4108);
            cell->setProperty("VerticalAlignment", -4108);
        }
        //数据
        for(i=0;i<table->rowCount();i++)
        {
            for (j=0;j<colcount;j++)
            {
                QString rowdata;
                rowdata=table->item(i,j)->text();
                worksheet->querySubObject("Cells(int,int)", i+3, j+2)->dynamicCall("SetValue(const QString&)",rowdata);
            }
        }
        QString lrange;
        lrange.append("A2:");
        lrange.append(colcount + 'A');
        lrange.append(QString::number(table->rowCount() +2));//终止行
        range = worksheet->querySubObject("Range(const QString&)", lrange);
        range->querySubObject("Borders")->setProperty("LineStyle", QString::number(1));
        range->querySubObject("Borders")->setProperty("Color", QColor(0, 0, 0));
        QString rowsName;
        rowsName.append("A2:");
        rowsName.append(colcount + 'A');
        rowsName.append(QString::number(table->rowCount() + 2));
        range = worksheet->querySubObject("Range(const QString&)", rowsName);
        range->setProperty("RowHeight", 20);
        range->setProperty("ColumnWidth", 60);
        workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));
        workbook->dynamicCall("Close()");
        excel->dynamicCall("Quit()");
        delete excel;
        excel=nullptr;
        if(QMessageBox::question(nullptr,"完成","文件已经导出,是否现在打开?",QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes)
        {
            QDesktopServices::openUrl(QUrl("file:///" + QDir::toNativeSeparators(filepath)));
        }
    }
    else
    {
        QMessageBox::warning(nullptr,"错误","未能创建 Excel 对象,请安装 Microsoft Excel。",QMessageBox::Apply);
    }
}


目录
相关文章
|
2月前
|
网络协议 容器
【qt】 TCP编程小项目
【qt】 TCP编程小项目
42 0
|
2月前
|
存储 C++
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
|
2月前
|
API 开发工具 C语言
C语言与图形界面:利用GTK+、Qt等库创建GUI应用。
C语言与图形界面:利用GTK+、Qt等库创建GUI应用。
82 0
关于Qt的pri模块化编程详解
关于Qt的pri模块化编程详解
|
2月前
|
JavaScript Java Go
【Qt】Qt编程注意事项
【Qt】Qt编程注意事项
|
5月前
|
Windows 安全 C++
Qt字符串类应用与常用基本数据类型
Qt字符串类应用与常用基本数据类型
|
5月前
|
开发框架 物联网 云计算
Qt应用领域分析与实践
Qt应用领域分析与实践
162 0
|
3月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
145 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
2月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
50 0
|
4天前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。
下一篇
无影云桌面