软件的功能非常简单,双击即可运行。运行后点击“选择文件”按钮,或者将需要转换的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("文件保存成功!"));
}
}
}
}
}