为了方便后期查看,因此文章格式我就不做太多的调整了 (文章牵扯的所有安装程序我都有安装包,如果需要私信我,免费无套路)
一.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;
}
}
感谢观看,麻烦你点个赞赞哦!!