Qt QAxObject操作excel文件過程總結(轉):


  正好同事問道Qt下操作excel. 轉自:http://blog.csdn.net/a156392343/article/details/48092515

  

配制方面:

1、確保Excel軟件在本地服務器注冊成功,沒注冊成功的可以通過 在運行中"E:\program Files\Microsoft Office\Office12\EXCEL.EXE" /regserver 手動注冊,注意路徑要用自己的excel路徑。

2、確保組件配制正確,運行命令:dcomcnfg,查看DCOM配置下是否有Microsoft Excel Application,有的話萬事大吉,開始設置(1)常規,身份驗證:無(2)安全、配制權限自定義,控制權限,完全控制選中,保存

以上確保QAxObject可以正常被調用

程序方面:

1、工程pro文件添加

 

CONFIG += qaxcontainer

2、.h文件添加

 

 

      	 /1./打開
	void newExcel(const QString &fileName);
 
        
       //2.增加1個Worksheet
       void appendSheet(const QString &sheetName,int cnt);
 
        
       //3.向Excel單元格中寫入數據
       void setCellValue(int row, int column, const QString &value);
 
        
       //4.保存Excel
      void saveExcel(const QString &fileName);
 
        
       //5.釋放Excel
       void  freeExcel();

 

 

3、.cpp文件

 

//1.新建一個excel
void MainWindow::newExcel(const QString &fileName)
{        HRESULT r = OleInitialize(0);
         CoInitialize(0);
         if (r != S_OK && r != S_FALSE) {
             qWarning("Qt: Could not initialize OLE (error %x)\n", (unsigned int)r);
         }
         pApplication = new QAxObject("Excel.Application");
              if(pApplication == NULL){
                  qWarning("pApplication\n");return;
              }
    pApplication->dynamicCall("SetVisible(bool)", false);//false不顯示窗體
    pApplication->setProperty("DisplayAlerts", false);//不顯示任何警告信息。
    pWorkBooks = pApplication->querySubObject("Workbooks");
    QFile file(fileName);
    if (file.exists())
    {
        pWorkBook = pWorkBooks->querySubObject("Open(const QString &)", fileName);
    }
    else
    {
         pWorkBooks->dynamicCall("Add");
         pWorkBook = pApplication->querySubObject("ActiveWorkBook");
    }
    pSheets = pWorkBook->querySubObject("Sheets");
    pSheet = pSheets->querySubObject("Item(int)", 1);
}
//2.增加1個Worksheet
void MainWindow::appendSheet(const QString &sheetName,int cnt)
{
    QAxObject *pLastSheet = pSheets->querySubObject("Item(int)", cnt);
    pSheets->querySubObject("Add(QVariant)", pLastSheet->asVariant());
    pSheet = pSheets->querySubObject("Item(int)", cnt);
    pLastSheet->dynamicCall("Move(QVariant)", pSheet->asVariant());
    pSheet->setProperty("Name", sheetName);
}
//3.向Excel單元格中寫入數據
void MainWindow::setCellValue(int row, int column, const QString &value)
{
    QAxObject *pRange = pSheet->querySubObject("Cells(int,int)", row, column);
    pRange->dynamicCall("Value", value);
}
//4.保存Excel
void MainWindow::saveExcel(const QString &fileName)
{
    pWorkBook->dynamicCall("SaveAs(const QString &)",
    QDir::toNativeSeparators(fileName));
}
//5.釋放Excel
void  MainWindow::freeExcel()
{
    if (pApplication != NULL)
    {
        pApplication->dynamicCall("Quit()");
        delete pApplication;
        pApplication = NULL;
    }
}
 
        

 

附上測試的button槽函數

 

void MainWindow::on_pushButton_keting_clicked()
{
 
        
OleInitialize(0);
 
        
QString fileNametmp = "d:/112.xls"; //文件名可從此處修改
    newExcel(fileNametmp);
   // appendSheet("page1");
    setCellValue(3, 3,"34343");
    setCellValue(3, 6,"55555");
    saveExcel(fileNametmp);
    freeExcel();
    return;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM