2014-12-26 76 views
0

我想通過我的Qt應用程序將相當大量的數據寫入excel表格。我目前使用下面的代碼。優化從Qt應用程序寫入excel表格的速度

QAxObject* pExcel = new QAxObject("Excel.Application", 0); 
QAxObject* pWorkbooks = pExcel->querySubObject("Workbooks"); 
QAxObject* pWorkbook = pWorkbooks->querySubObject("Open(const QString&)", s_FilePath); 
QAxObject* pWorksheet = pWorkbook->querySubObject("Worksheets(int)", 1); 

for (int i = 0; i < iColumnCount; ++i) 
{ 
    for (int j = 0; j < iRowCount; ++j) 
    { 
     QAxObject* pCell = pWorksheet->querySubObject("Cells(Int, Int)", i + 1, j + 1); 
     pCell->setProperty("Value", "somevalue"); 
    } 
} 

但是,pCell-> setProperty()非常慢,需要很長時間才能以這種方式設置所有值。

有沒有人知道更快的設置值的更好方法?

+1

如果您有多個內核,請使用線程? – lpapp

回答

0

找到一種方法來批量更新單元格,通過從this後立即更新一系列單元格來解決問題。

以下是從帖子中複製的代碼。

QAxObject* excel = new QAxObject("Excel.Application", 0); 
excel->dynamicCall("SetVisible(bool)",true); 
QAxObject *workbooks = excel->querySubObject("Workbooks"); 
QAxObject *workbook = workbooks->querySubObject("Add()"); 

QAxObject *sheets = workbook->querySubObject("Worksheets"); 

QAxObject *sheet1 = sheets->querySubObject("Item(int)", 1); 
sheet1->dynamicCall("SetName(const QString&)", QVariant(sheet1Name)); 

int n; 
QList< QVariant> table; 
for (int i=0; i<5; i++) 
{ 
    QList row; 
    for (int j=0; j<5; j++) 
    { 
    n = i*5+j; 
    row.append(QVariant(n)); 
    } 
    table.append(QVariant(row)); 
} 

//get a 5x5 range of cells : from A1 to E5 
QAxObject *range = sheet1->querySubObject("Range(const QString&, const QString&)", QString("A1"), QString("E5")); 
QVariant vTable(table); 
range->dynamicCall("SetValue(const QVariant&)", vTable);