Qt之将excel转换为csv

直接上代码,注释都有

bool MainWindow::ExcelToCsvFile(const QString &excelFileName, const QString &csvFileName)
{
    if (!QFile::exists(excelFileName)){
        qDebug() << "excelFileName  " << excelFileName << "exist";
        return false;
    }

    /* 当pApplication析构的时候会将其所有相关的子对象都清理,一种作用域指针 */
    QScopedPointer<QAxObject> excel(new QAxObject());
    /* 连接Excel控件 */
    bool ok = excel->setControl("Excel.Application");
    if (!ok){
        qDebug() << "setControl Excel.Application fail!" ;
        return false;
    }
    /* false表示不显示窗体 */
    excel->dynamicCall("SetVisible(bool)", false);
    /* 不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示 */
    excel->setProperty("DisplayAlerts", false);
     /* 获取工作簿集合(对象) */
    QAxObject *workbooks = excel->querySubObject("Workbooks");
    if (workbooks == nullptr){
        qDebug() << "get workbooks fail!" ;
        return false;
    }
    /* 获取当前工作簿 */
    QAxObject *workbook  = workbooks->querySubObject("Open(const QString &)", excelFileName); // 打开一个Excel文件
    if (workbook == nullptr){
        qDebug() << "get workbook fail!" ;
        return false;
    }
    /* 获取工作表集合的工作表 */
    QAxObject *worksheets = workbook->querySubObject("WorkSheets");
    if (worksheets == nullptr){
        qDebug() << "get worksheets fail!" ;
        return false;
    }
    /* 获取工作表集合的工作表1,即sheet1 */
    QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1);
    if (worksheet == nullptr){
        qDebug() << "get worksheet fail!" ;
        return false;
    }
    /* 另存为文件, 3: txt文件(空格分隔)| 6: csv文件(逗号分隔)*/
    worksheet->dynamicCall("SaveAs(const QString&, int)", QDir::toNativeSeparators(csvFileName), 6);
    /* 关闭工作簿*/
    workbook->dynamicCall("Close()");
    excel->dynamicCall("Quit()");
    qDebug() << "save as success";
    return true;
}

 

    原文作者:Suifqwu
    原文地址: https://blog.csdn.net/qq_41399894/article/details/105008423
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞