zoukankan      html  css  js  c++  java
  • Qt 读取excel

    void CMainWindow::openExcel(QString fileName)
    {
        QAxObject excel("Excel.Application");
        excel.setProperty("Visible", false);
        QAxObject *work_books = excel.querySubObject("WorkBooks");
        work_books->dynamicCall("Open(const QString&)", fileName);
    
        QAxObject *work_book = excel.querySubObject("ActiveWorkBook");
        QAxObject *work_sheets = work_book->querySubObject("Sheets");  //Sheets也可换用WorkSheets
    
        int sheet_count = work_sheets->property("Count").toInt();  //获取工作表数目
        if (sheet_count > 0)
        {
            QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1);
    
            ui.label->setText("文件数据读取中...");
            QVariant var = readAll(work_sheet);
            castVariant2ListListVariant(var);
        }
    
        work_book->dynamicCall("Close(Boolean)", false);  //关闭文件
        excel.dynamicCall("Quit(void)");  //退出
    }
    
    QVariant CMainWindow::readAll(QAxObject *sheet)
    {
        QVariant var;
        if (sheet != NULL && !sheet->isNull())
        {
            QAxObject *usedRange = sheet->querySubObject("UsedRange");
            if (NULL == usedRange || usedRange->isNull())
            {
                return var;
            }
            var = usedRange->dynamicCall("Value");
            delete usedRange;
        }
        return var;
    }
    
    void CMainWindow::castVariant2ListListVariant(const QVariant &var)
    {
        QVariantList varRows = var.toList();
        if (varRows.isEmpty())
        {
            return;
        }
        const int rowCount = varRows.size();
        QVariantList rowData;
        for (int i = 0; i < rowCount; ++i)
        {
            rowData = varRows[i].toList();
    
            if (i == 0)
            {
                QStringList headers;
                for each (auto item in rowData)
                {
                    QString value = item.toString();
                    headers.append(value);
                }
                ui.tableWidget->setColumnCount(headers.size()); //设置列数
                ui.tableWidget->setHorizontalHeaderLabels(headers);
            }
            else
            {
                int row = ui.tableWidget->rowCount();
                ui.tableWidget->setRowCount(row + 1);
                for (int j = 0; j < rowData.size(); j++)
                {
                    QString value = rowData[j].toString();
                    QTableWidgetItem *item = new QTableWidgetItem(value);
                    ui.tableWidget->setItem(row, j, item);
                }
            }
        }
    }
  • 相关阅读:
    HTML中使用Vue+Dhtmlxgantt制作任务进度图
    Vue中使用js-xlsx导出Data数据到Excel
    Vue生命周期
    ajax调用免费的天气API
    maven无法自动下载依赖包settings.xml文件配置
    idea打开项目没有src目录
    java jdk idea maven安装及配置
    CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/pytorch
    The procedure entry point OPENSSL_sk_new_reserve could not be located in the dynamic link library
    Nuget打包没有注释显示
  • 原文地址:https://www.cnblogs.com/qnkk123/p/8327622.html
Copyright © 2011-2022 走看看