QT 对execl 文件读写并将execl文件转化为PDF

为了方便后期查看,因此文章格式我就不做太多的调整了 (文章牵扯的所有安装程序我都有安装包,如果需要私信我,免费无套路)

一.QT对execl读写第三方库Xlsx库安装过程

        1.下载安装perl,(安装选项默认就行) 我的百度网盘里面的perl正常安装里面有安装包(很多人不会翻墙的话很容易卡在第一步,我这边有安装包,如果有需要的找我私信,免费发,无套路)

        2.下载Qtxlsx 源码 地址 [Xisx第三方库的网址 ]                                                       

        3.使用qt 打开 qtxlsx.pro 使用5.14 版本的 打开后 构建项目 (仅构建)我这边用的是mingw32和64位都可以

        4.进入构建目录(对着操作就可以完成了)

(1)将include文件夹中的QtXlsx 文件夹整个复制到(QT5.14安装目录/编译器/include 文件夹)

(2)将lib 文件夹中prl 文件和.a 后缀的库文件复制到(qt5.14安装目录/编译器/lib)

(3)将lib文件夹中的dll 文件复制到(qt安装目录/编译器/bin)

(4)将mkspecs文件夹中modules子文件夹pri文件复制到(qt安装目录/编译器/mkspecs/modules)

//测试程序如果这个可以运行成功就说明安装没问题
//使用过程:
//在.pro 文件中加入 
QT  += xlsx

//添加头文件
#include <QtXlsx>


在构造函数函数中写
QXlsx::Document test_Xlsx("./Execl/test.Xlsx"); //当前目录的Xlsx文件
test_Xlsx.write(1,2,"测试");
    
test_Xlsx.write("C1","测试");
test_Xlsx.saveAs("./test.Xlsx");

 如何创建一个execl文件

QXlsx::Document xlsx("D:/test/test.xlsx");  //在D盘创建一个execl文件

xlsx.write("A1", "Hello Qt!"); 这个是在A1的格子内写入Hello QT!

xlsx.save();  保存

 对单元格进行操作的

QXlsx::Format style; // 单元格样式
style.setFontBold(true); // 字体加粗
style.setFont(QFont("黑体", 15)); //
style.setHorizontalAlignment(QXlsx::Format::AlignHCenter);// 横向居中
style.setVerticalAlignment(QXlsx::Format::AlignVCenter);// 纵向居中
style.setBorderStyle(QXlsx::Format::BorderThin); // 边框样式
style.setTextWrap(true); // 单元格自动换行

/// 合并单元格操作
xlsx.mergeCells(QXlsx::CellRange(1, 1, 3,1),style); // 1行1列到3行1列合并为一个单元格

 工作簿操作

 /// 添加工作簿 "Sheet2"
 xlsxDoc.addSheet("Sheet2");
 /// 选择当前操作的工作簿为 "Sheet2"
 xlsxDoc.selectSheet("Sheet2");

二 execl 转PDF的操作

下载LibreOffice 我有成品安装包  但是这个很好下载在官网免费的

我这边是依赖了LibreOffice (并且记录他在系统文件的路径!!!)

然后CV下面的demo

//我这边基本都是函数定义内容,没有函数名字,这边自己添加,或者直接在构造里面写
// 主要改这里其他不动 待转化文件名字+路径    PDF的位置

                    这个是 我们需要转化PDF的execl文件的目录
    QString inputFile = "C:/Users/ZC-Hyx/Documents/learn_31/111.xlsx";
    //

    if(inputFile.isEmpty())
        return;
    /*修改文件可读可写的属性start*/
    QFile file(inputFile);
    if (!file.exists()) {
        return ;
    }
    QString tempstr=inputFile;
    QString pdfpath;
    if(tempstr.contains("xlsx"))
        pdfpath = tempstr.replace("xlsx","pdf");
    else if(tempstr.contains("xls"))
        pdfpath = tempstr.replace("xls","pdf");
    QProcess process;

//program  如果修改了  LibreOffice 位置,我们需要更改上述的代码路径
    QString program = "C:/Program Files/LibreOffice/program/soffice.exe"; 
//这个直接CV他的绝对路径就可以了,但是中文路径是否有影响不知道
// LibreOffice的命令行工具名称



    //    "C:\Program Files\LibreOffice\program\soffice.exe"
    QStringList arguments;
    arguments << "--headless"
              << "--convert-to" << "pdf"
              << "--outdir" << QDir::toNativeSeparators(QFileInfo(pdfpath).absolutePath())
              << QDir::toNativeSeparators(inputFile);
    process.start(program, arguments);
    if (!process.waitForFinished()) {
        qDebug() << "转化的文件正在被占用";
    } else {
        int exitCode = process.exitCode();
        if (exitCode == 0) {
            qDebug() << "转化成功!.";
        } else {
            qDebug() << "转化失败(原因):" << exitCode;
        }
    }

 这个就可以转化了,如果要更改转化后的PDF文件名,就可以使用以下代码

下面代码的作用就是转化PDF并且重命名为时间戳,不过需要修改一些内容,在代码里面我已经标了,修改后就可直接使用无需修改,

//这个就是我们execl文件的名字,这个我是在这个位置的

QString inputFile = "C:\\Users\\ZC-Hyx\\Desktop\\xiaofangProject\\PDF_dir\\test.xlsx";
//修改以下 inputFile  这个是execl文件路径    
if(inputFile.isEmpty())
        return;

    QFile file(inputFile);
    if (!file.exists()) {
        qDebug() << "文件不存在:" << inputFile;
        return;
    }
    QDateTime dateTime = QDateTime::currentDateTime();
    QString pdfpath;
    if (inputFile.endsWith("xlsx", Qt::CaseInsensitive))
        pdfpath = inputFile.left(inputFile.lastIndexOf('.')) + ".pdf";
    else if (inputFile.endsWith("xls", Qt::CaseInsensitive))
        pdfpath = inputFile.left(inputFile.lastIndexOf('.')) + ".pdf";

    QProcess process;
    QString program = "C:/Program Files/LibreOffice/program/soffice.exe";
    //这个是你的libreoffice的路径 安装在哪里就改绝对路径就可以了
    QStringList arguments;
    arguments << "--headless"
              << "--convert-to" << "pdf"
              << "--outdir" << QDir::toNativeSeparators(QFileInfo(pdfpath).absolutePath())
              << QDir::toNativeSeparators(inputFile);

    QString customDateTimeString2 = dateTime.toString("dd-MM-yyyy hh-mm-ss");
    
    process.start(program, arguments);
    if (!process.waitForFinished()) {
        qDebug() << "转化的文件正在被占用";
    } else {
        int exitCode = process.exitCode();
        if (exitCode == 0) {
            qDebug() << "转化成功!.";

            // 重命名PDF文件(如果需要)
            qDebug()<<"pdfnaem:"<<pdfpath;
            QString newPdfPath = "C:\\Users\\ZC-Hyx\\Desktop\\xiaofangProject\\PDF_dir\\"+customDateTimeString2 + ".pdf";
            qDebug()<<"new name"<<newPdfPath;
            if (QFile::rename(pdfpath, newPdfPath)) {
                qDebug() << "PDF文件重命名成功:" << newPdfPath;
            } else {
                qDebug() << "PDF文件重命名失败";
            }
        } else {
            qDebug() << "转化失败(原因):" << exitCode;
        }
    }

感谢观看,麻烦你点个赞赞哦!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值