zoukankan      html  css  js  c++  java
  • Qt QAxObject操作excel文件过程总结(转):

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

      

    配制方面:

    1、确保Excel软件在本地服务器注册成功,没注册成功的可以通过 在运行中"E:program FilesMicrosoft OfficeOffice12EXCEL.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)
    ", (unsigned int)r);
             }
             pApplication = new QAxObject("Excel.Application");
                  if(pApplication == NULL){
                      qWarning("pApplication
    ");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;
    }
  • 相关阅读:
    ffmpeg rtmp推流 视频转码
    java日志发展史 log4j slf4j log4j2 jul jcl 日志和各种桥接包的关系
    nginx stream 流转发,可以转发rtmp、mysql访问流,转发rtmp、jdbc请求
    java web http 转https 通过nginx代理访问
    linux 服务器磁盘挂载
    novnc 通过websockify代理 配置多点访问
    linux 文件服务 minio 安装部署配置
    AOP实现原理,手写aop
    java 泛型
    JAVA反射getGenericSuperclass()用法
  • 原文地址:https://www.cnblogs.com/weizhixiang/p/6201126.html
Copyright © 2011-2022 走看看