qt5开发制作一个把xls格式的文件转换为xlsx格式的桌面应用程序

软件的功能非常简单,双击即可运行。运行后点击“选择文件”按钮,或者将需要转换的xls文件拖动到程序的界面中,就会在原xls文件旁边生成一个同样名字的xlsx文件。
程序界面
软件使用qt5开发,实现的逻辑非常简单,创建了一个label用于显示文字,一个toolbutton用于选择文件。
软件使用微软Excel提供的COM接口,需要在.pro文件中添加

QT       += axcontainer

并且需要添加头文件

#include <QAxObject>

实现核心代码如下:

void MainWindow::Run() //绑定按钮的槽函数
{
    // 打开 xls 文件
    QString fileName1 = QFileDialog::getOpenFileName(this, tr("选择xls文件"), "", tr("Excel Files (*.xls)"));
    if (!fileName1.isEmpty())
    {
        QString fileName2 = fileName1;
        fileName2.replace(".xls",".xlsx");
        fileName2.replace("/","\\");
        qDebug()<<fileName1<<fileName2;
        // 创建 Excel 应用程序对象
        QAxObject excel("Excel.Application", this);
        excel.setProperty("Visible", false); // 隐藏 Excel 窗口
        excel.setProperty("DisplayAlerts", false);

        // 获取 Workbooks 对象
        QAxObject *workbooks = excel.querySubObject("Workbooks");
        if (workbooks)
        {
            // 读取复制后的文件
            QAxObject *workbookCopy = workbooks->querySubObject("Open(const QString&, QVariant)", fileName1);

            if (workbookCopy)
            {
                // 将复制文件另存为 xlsx 格式
                workbookCopy->dynamicCall("SaveAs(const QString&, QVariant)", fileName2 ,51); // 51 表示 xlsx 格式

                // 关闭复制文件
                workbookCopy->dynamicCall("Close(bool)", false);
                delete workbookCopy;
            }

            // 关闭 Excel 应用程序
            excel.dynamicCall("Quit()");
            delete workbooks;


            // 提示保存成功
            QMessageBox::information(this, tr("提示"), tr("文件保存成功!"));
        }
    }
}



void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
    if (event->mimeData()->hasUrls()) {
        event->acceptProposedAction();
    }
}

void MainWindow::dropEvent(QDropEvent *event)//重写事件,实现将拖动文件到窗口中就执行代码
{
    const QMimeData *mimeData = event->mimeData();
    if (mimeData->hasUrls()) {
        QList<QUrl> urlList = mimeData->urls();
        if (urlList.size() == 1) {
            QString fileName1 = urlList.at(0).toLocalFile();
            QFileInfo fileInfo(fileName1);
            QString suffix = fileInfo.suffix();
            qDebug()<<suffix;
            if (suffix=="xls")
            {
                QString fileName2 = fileName1;
                fileName2.replace(".xls",".xlsx");
                fileName2.replace("/","\\");
                qDebug()<<fileName1<<fileName2;
                // 创建 Excel 应用程序对象
                QAxObject excel("Excel.Application", this);
                excel.setProperty("Visible", false); // 隐藏 Excel 窗口
                excel.setProperty("DisplayAlerts", false);

                // 获取 Workbooks 对象
                QAxObject *workbooks = excel.querySubObject("Workbooks");
                if (workbooks)
                {
                    // 读取复制后的文件
                    QAxObject *workbookCopy = workbooks->querySubObject("Open(const QString&, QVariant)", fileName1);

                    if (workbookCopy)
                    {
                        // 将复制文件另存为 xlsx 格式
                        workbookCopy->dynamicCall("SaveAs(const QString&, QVariant)", fileName2 ,51); // 51 表示 xlsx 格式

                        // 关闭复制文件
                        workbookCopy->dynamicCall("Close(bool)", false);
                        delete workbookCopy;
                    }

                    // 关闭 Excel 应用程序
                    excel.dynamicCall("Quit()");
                    delete workbooks;


                    // 提示保存成功
                    QMessageBox::information(this, tr("提示"), tr("文件保存成功!"));
                }
            }
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值