xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

資源簡介

#Qt Windows 下快速讀寫Excel指南
很多人搜如何讀寫excel都會看到用`QAxObject`來進行操作,很多人試了之后都會發現一個問題,就是慢,非常緩慢!因此很多人得出結論是`QAxObject`讀寫excel方法不可取,效率低。
后來我曾試過用ODBC等數據庫類型的接口進行讀寫,遇到中文嗝屁不說,超大的excel還是會讀取速度慢。
最后,看了一些開源的代碼后發現,Windows下讀取excel,還是用`QAxObject`最快!沒錯,就是用`QAxObject`讀寫最快!!!
大家以后讀取excel時(win下),不用考慮別的方法,用`QAxObject`就行,速度杠杠的,慢是你操作有誤!下面就說說咋能提高其讀取效率。

#讀取excel慢的原因
這里不說如何打開或生成excel,著重說說如何快速讀取excel。
網上搜到用Qt操作excel的方法,讀取都是使用類似下面這種方法進行:

```C
QVariant ExcelBase::read(int row, int col)
{
    QVariant ret;
    if (this->sheet != NULL && ! this->sheet->isNull())
    {
        QAxObject* range = this->sheet->querySubObject("Cells(int, int)", row, col);
        //ret = range->property("Value");
        ret = range->dynamicCall("Value()");
        delete range;
    }
    return ret;
}
```

讀取慢的根源就在于`sheet->querySubObject("Cells(int, int)", row, col)`

試想有10000個單元就得調用10000次`querySubObject`,網絡上90%的教程都沒說這個`querySubObject`產生的`QAxObject*`最好進行手動刪除,雖然在它的父級`QAxObject`會管理它的內存,但父級不析構,子對象也不會析構,若調用10000次,就會產生10000個`QAxObject`對象
得益于[QT快速讀取數據量很大的Excel文件](http://blog.csdn.net/a1069962325/article/details/49514377)此文,下面總結如何快速讀寫excel

#快速讀取excel文件

原則是一次調用`querySubObject`把所有數據讀取到內存中
VBA中可以使用`UsedRange`把所有用到的單元格范圍返回,并使用屬性`Value`把這些單元格的所有值獲取。

這時,獲取到的值是一個table,但Qt把它變為一個變量QVariant來儲存,其實實際是一個`QList<QList<QVariant> >`,此時要操作里面的內容,需要把這個`QVariant`轉換為`QList<QList<QVariant> >`

先看看獲取整個單元格的函數示意(這里ExcelBase是一個讀寫excel的類封裝):

```C
QVariant ExcelBase::readAll()
{
    QVariant var;
    if (this->sheet != NULL && ! this->sheet->isNull())
    {
        QAxObject *usedRange = this->sheet->querySubObject("UsedRange");
        if(NULL == usedRange || usedRange->isNull())
        {
            return var;
        }
        var = usedRange->dynamicCall("Value");
        delete usedRange;
    }
    return var;
}
```

資源截圖

代碼片段和文件信息

#include?“Excelbase.h“
#include?

#include?
#include?
#if?defined(Q_OS_WIN)
#include?ject>
#endif?//?Q_OS_WIN



#define?TC_FREE(x)??{delete?x;?x=NULL;}

class?ExcelbasePrivate
{
????Q_DECLARE_PUBLIC(Excelbase)
public:
????explicit?ExcelbasePrivate(Excelbase*?qptr);
????~ExcelbasePrivate();

????void?construct();
????void?destory();

????Excelbase*?const?q_ptr;

#if?defined(Q_OS_WIN)
????QAxobject*??excel;
????QAxobject*??books;
????QAxobject*??book;
????QAxobject*??sheets;
????QAxobject*??sheet;
#endif
????QString?????filename;
????QString?????sheetName;
};

ExcelbasePrivate::ExcelbasePrivate(Excelbase?*qptr)
????:?q_ptr(qptr)
#if?defined(Q_OS_WIN)
?????excel(NULL)
?????books(NULL)
?????book(NULL)
?????sheets(NULL)
?????sheet(NULL)
#endif?//?Q_OS_WIN
{
}

ExcelbasePrivate::~ExcelbasePrivate()
{
#if?defined(Q_OS_WIN)
????if(excel)
????{
????????if?(!excel->isNull())
????????{
????????????excel->dynamicCall(“Quit()“);
????????}
????}
????TC_FREE

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件??????18972??2018-01-14?19:43??快速讀取excel\pic\01.png

?????文件???????2233??2018-01-14?19:43??快速讀取excel\pic\02.png

?????文件???????4298??2018-01-14?19:43??快速讀取excel\pic\02_0.png

?????文件??????13072??2018-01-14?19:43??快速讀取excel\pic\03.png

?????文件???????8904??2018-01-14?19:43??快速讀取excel\readme.md

?????文件???????8973??2018-01-14?19:43??快速讀取excel\src\fastReadExcelInWindows\Book1.xlsx

?????文件??????12753??2018-01-14?19:43??快速讀取excel\src\fastReadExcelInWindows\Excelbase.cpp

?????文件???????3649??2018-01-14?19:43??快速讀取excel\src\fastReadExcelInWindows\Excelbase.h

?????文件?????654336??2018-01-14?19:43??快速讀取excel\src\fastReadExcelInWindows\excelRWByCztr1988.xls

?????文件????????513??2018-01-14?19:43??快速讀取excel\src\fastReadExcelInWindows\fastReadExcelInWindows.pro

?????文件????????171??2018-01-14?19:43??快速讀取excel\src\fastReadExcelInWindows\main.cpp

?????文件???????2000??2018-01-14?19:43??快速讀取excel\src\fastReadExcelInWindows\MainWindow.cpp

?????文件????????543??2018-01-14?19:43??快速讀取excel\src\fastReadExcelInWindows\MainWindow.h

?????文件???????1821??2018-01-14?19:43??快速讀取excel\src\fastReadExcelInWindows\MainWindow.ui

?????文件???????1850??2018-01-14?19:43??快速讀取excel\src\fastReadExcelInWindows\QVariantListListModel.cpp

?????文件???????1111??2018-01-14?19:43??快速讀取excel\src\fastReadExcelInWindows\QVariantListListModel.h

?????目錄??????????0??2018-02-06?10:59??快速讀取excel\src\fastReadExcelInWindows

?????目錄??????????0??2018-02-06?10:59??快速讀取excel\pic

?????目錄??????????0??2018-02-06?10:59??快速讀取excel\src

?????目錄??????????0??2018-02-06?10:59??快速讀取excel

-----------?---------??----------?-----??----

???????????????735199????????????????????20


評論

共有 條評論