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);
                }
            }
        }
    }
  • 相关阅读:
    [WM]谁抢走了应用程序的性能?
    只有更烂的程序员
    [WM]n久以前写的ConnMgr类
    [WM][转]PPC中如何找到正在使用中的网络(源代码)
    让IE6支持minwidth和maxwidth的方法(JS实现) + (CSS实现)
    jQuery tab 切换函数
    wap、3g手机的端的网页头部
    复制到系统剪贴板之IE,ff兼容版
    鼠标滑过展开,js版和jquery版
    JS+CSS实现网页滚动条美化
  • 原文地址:https://www.cnblogs.com/qnkk123/p/8327622.html
Copyright © 2011-2022 走看看