1. 程式人生 > >Qt使用QAxObject快速批量讀取Excel內容

Qt使用QAxObject快速批量讀取Excel內容

  網上各種教程用的方法主要是如下這一句:

QAxObject * range = worksheet->querySubObject("Cells(int,int)", 1, 1 );
  這種方法當然也行,可以一項一項地讀,但是當讀取數量很大的時候就很慢了,在我的電腦上測試讀5000個數據大約168s左右。看資料找到一種批量讀取的方法,經測試讀10000行的資料才3s多,效果超級棒,充分發揮了QAxobject讀取的優勢。

  核心程式碼在於這一句:

QAxObject *range = worksheet->querySubObject("Range(QString)", "B13:C1000");
  用Range(QString)實現選取一大塊區域,一次性讀一個數組出來當然快啦。

  附上完整的原始碼供大家交流學習:

  pro中加一句:QT+=axcontainer

  標頭檔案加一個:#include <QAxObject>

  核心程式碼:

// 批量讀取xls到map
int readEnvXlsFile(QString FileName, QMap<QString,float> &map)
{
    QAxObject *excel = NULL;
    QAxObject *workbooks = NULL;
    QAxObject *workbook = NULL;
    excel = new QAxObject("Excel.Application");
    if (!excel)
    {
        qDebug() << "EXCEL物件丟失!";
    }
    excel->dynamicCall("SetVisible(bool)", false);
    workbooks = excel->querySubObject("WorkBooks");
    workbook = workbooks->querySubObject("Open(QString, QVariant)", FileName);
    QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", 1);//開啟第一個sheet
    QAxObject * usedrange = worksheet->querySubObject("UsedRange");//獲取該sheet的使用範圍物件
    QAxObject * rows = usedrange->querySubObject("Rows");
    QAxObject * columns = usedrange->querySubObject("Columns");
    int intRows = rows->property("Count").toInt();
    int intCols = columns->property("Count").toInt();
    qDebug() << "xls行數:"<<intRows;
    qDebug() << "xls列數:"<<intCols;

    // 批量載入資料,這裡預設讀取B13:C最後
    QString Range = "B13:C" +QString::number(intRows);
    QAxObject *allEnvData = worksheet->querySubObject("Range(QString)", Range);
    QVariant allEnvDataQVariant = allEnvData->property("Value");
    QVariantList allEnvDataList = allEnvDataQVariant.toList();

    for(int i=0; i<= intRows-13; i++)
    {
        QVariantList allEnvDataList_i =  allEnvDataList[i].toList() ;
        //qDebug()<< allEnvDataList_i[0].toString()<< allEnvDataList_i[1].toFloat();
        map.insert(allEnvDataList_i[0].toString(),allEnvDataList_i[1].toFloat());
    }
    workbooks->dynamicCall("Close()");
    return 0;
}
  Update 2017-05-06: 看了一下百度的這一篇已經提到了此方法。


相關推薦

Qt使用QAxObject快速批量讀取Excel內容

  網上各種教程用的方法主要是如下這一句: QAxObject * range = worksheet->querySubObject("Cells(int,int)", 1, 1 );  這種方法當然也行,可以一項一項地讀,但是當讀取數量很大的時候就很慢了,在我的

C#利用NPOI逐列讀取excel內容

C# NPOI 讀取excel using System; using System.Collections.Generic; using System.Linq; using System.Text; using NPOI.SS.UserModel; using NPOI.HSSF.U

讀取excel內容轉為二維list

# -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import pandas as pd source_data=pd.read_csv("./crx-noless.xls",hea

django/python excel 上傳後臺 並讀取excel內容,含日期格式解析處理

step1: 讀取上傳的excel資料並存檔 step2: 讀取存入本地的excel檔案,對內容進行處理,其中包含日期格式處理 重點程式碼: issueDate = sheetContent.cell(row,1).value date_value = xlrd.xldate_as_tu

python xlrd模組讀取excel內容

日常工作中,與其他部門協調工作時,就會經常用到python處理excel表中的資料,這個時候操作簡便功能強大的xlrd模組就派上用場了,本文以自己實際工作中碰到的案例為背景,做一些簡單的整理記錄(好記性不如爛筆頭) 1:首先安裝引入xlrd模組 #安裝模

從phpMyAdmin批量匯入Excel內容到MySQL(親測非常簡潔有效)

今天做專案遇到需要用phpMyAdmin批量匯入Excel內容到MySQL資料庫。分析了我的踏坑經歷並且總結一最便捷的一套匯入資料的方法,非常實用簡潔: 1、修改Excel表的資料,使得Excel中的欄位與資料庫欄位要一一對應,並加上自增id。 2、然後excel檔案"-

如何快速批量刪除Excel單元格中的“換行符”

原貼:http://blog.sina.com.cn/s/blog_49f78a4b0102e3br.html 在Excel單元格中按Alt+Enter就會進行換行,就像在Word中按回車鍵一樣。如果許多單元格中都包含這樣的“換行符”,現在要將其全部刪除掉,讓這些單元格中的

c# 32位機和64位機 讀取Excel內容到DataSet

----------------------32位機 //註釋說明 //ExclePath  為Excel路徑     批號  是指Excel檔案中某一列必填項 public static DataSet GetDataTableForExcel(String Excl

VB.NET 開啟Excel檔案,讀取Excel內容,新增到DataGridView中並顯示

'Excel新增:工程->參照追加→COM→Microsoft Excel *.* ObjectLibrary   'DataGridView列列舉型定義PrivateEnumDGV_ENUMCOL_ROWCOL_NAMECOL_AGEEndEnum    'Excel

Unity用Excel.dll簡單讀取Excel內容

tab iou sta pen stream mod 出了 全部 reat Unity用Excel.dll簡單讀取Excel內容 需要Excel.dll 需要如下三個命名空間 using System.IO; using Excel; using System.Data;

EasyExcel 輕鬆靈活讀取Excel內容

寫在前面 Java 後端程式設計師應該會遇到讀取 Excel 資訊到 DB 等相關需求,腦海中可能突然間想起 Apache POI 這個技術解決方案,但是當 Excel 的資料量非常大的時候,你也許發現,POI 是將整個 Excel 的內容全部讀出來放入到記憶體中,所以記憶體消耗非常嚴重,如果同時進行包含大資

讀取Excel中的內容需要的jar

beans comm ooxml -a XML exc 讀取excel ons load 讀取Excel中的內容需要的jargeronimo-stax-api_1.0_spec-1.0.jarpoi-ooxml-3.7-20101029.jarpoi-3.7-2010102

關於jquery讀取excel文件內容 xls xlsx格式

文件大小 raw blog border ice this 自定義 lang eight 在一個項目中需要讀取excel的內容,當然excel是有格式的,格式就是讀取到的第一行會作為屬性(Title) 例如如下excel Language Detil en Eng

如何用PHP讀取Excel文件數據及內容信息

是什麽 getc stc 數量 變量 ret ffice factory 開發 在文章開始介紹前,大家需要了解一下PHPExcel是什麽?PHPExcel 就是一個用來操作Office Excel 文檔的PHP類庫。接下來講解如何利用PHPExcel類庫將Excel表格內的

怎麽利用PHP讀取Excel文件信息及內容

factor data app 文件內容 php active name lena column PHPExcel是什麽?PHPExcel 就是一個用來操作Office Excel 文檔的PHP類庫。在編程技術開發中,我們經常要從程序中讀取Excel文件內容,不過很多初學者

讀取Excel裡面的內容轉為DataTable

using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using System.Linq; using System.Text; namespace ExcelRead {

讀取Excel裏面的內容轉為DataTable

namespace empty shee open() provider bsp emp data except using System; using System.Collections.Generic; using System.Data; using System

python 讀取excel中單元格的內容

                              python 讀取excel中單元格的內容    excel檔

怎麼利用PHP讀取Excel檔案資訊及內容

  PHPExcel是什麼?PHPExcel 就是一個用來操作Office Excel 文件的PHP類庫。在程式設計技術開發中,我們經常要從程式中讀取Excel檔案內容,不過很多初學者都不太會,那麼下面來詳細為大家分析解答一下吧。比如說一個普通的個人資訊表,我們利用PHPExcel類庫將Excel表格內的資訊

java讀取excel檔案內容,並將讀取到的內容寫入到另一檔案中

需要匯入的jar包下載地址https://pan.baidu.com/s/16cTpUfx0KvKkbGYkXAUKMA 程式碼:ReadExcel.java //信1605-3 20163432 張運濤 package domain; import java.io.File; im