最近由于需要Qt来操作Excel文件,所以想把QAxObject用起来,此次使用也是机缘巧合,记录了一下心路历程。

此前走了很多弯路,希望做同样事情的人就别纠缠于同样的错误就好。

配制方面:

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;
}

此次学习、总结也看了很多人的东西,吸取了它人的一些方法,也改正了部分错误,希望开启顺利之旅!

Qt QAxObject操作excel文件过程总结相关推荐

  1. qt 进程打开excel_Qt QAxObject操作excel文件过程总结(转):(示例代码)

    正好同事问道Qt下操作excel. 转自:http://blog.csdn.net/a156392343/article/details/48092515 配制方面: 1.确保Excel软件在本地服务 ...

  2. Qt中打开excel文件

    qt中打开excel文件有两种方法 第一种,用QAxObject,在使用QAxObject,要在.pro文件中添加QT += axcontainer,同时在调用文件中添加#include <QA ...

  3. C#操作Excel文件(转)

    摘要:本文介绍了Excel对象.C#中的受管代码和非受管代码,并介绍了COM组件在.net环境中的使用. 关键词:受管代码:非受管代码:Excel对象:动态连接库 引言 Excel是微软公司办公自动化 ...

  4. 详解Python操作Excel文件

    前言 本篇文章主要总结了一下利用python操作Excel文件的第三方库和方法. 常见库简介 1.xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. 地 ...

  5. Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  6. abaqus python实例_abaqus Python实例-操作excel文件

    abaqus Python实例--操作excel文件目前处理数据离不开excel,所以pythoner必须学会用python操作excel表格.Python 与excel交互方法也比较多,我一开始就接 ...

  7. 不安装Office操作Excel文件(.xlsx)

    1.使用场景: 在不安装Office组件包的情况下,操作Excel文件(.xlsx).以前做过的好几个项目中,都需要对Excel文件处理,特别是将统计成果按照一定的格式和样式输出到Excel中,或将固 ...

  8. C#操作Excel文件

    C#操作Excel文件 前言 好久没更新博客了,趁着最近经常需要使用到Excel,就随手更新下博客把!由于之前一直使用的是Microsoft.Office.Interop.Excel,但是呢,在使用的 ...

  9. openpythonxl_Python操作Excel文件(3):优雅干将openxlpy

    本文共4000余字,预计阅读时间16分钟,本文知乎连接:Python操作Excel文件(3):优雅干将openpyxl,本文同步发布于silaoA的博客和微信公众号平台. 关注学习了解更多的Cygwi ...

最新文章

  1. python 词云_python数据可视化——词云
  2. 研究揭示动物社交欲望的神经机制
  3. 人生第一次手术:0809
  4. 新版谷歌浏览器怎么查找和改变编码格式
  5. 从零开始搭建一个简单的ui自动化测试框架02(pytest+selenium+allure)
  6. 怎么修改监控服务器的密码,服务器状态监控怎么设置密码
  7. C# VS 调试 动态加载的 DLL
  8. tensorboard 1.14.0 has requirement setuptools>=41.0.0, but you‘ll have setuptools 40.2.0
  9. Nginx+Tomcat代理环境下JS无法完全加载问题
  10. office2010 反应慢_office2010打开时间太慢。怎么办?
  11. Android 原生的人脸识别Camera+FaceDetector示例
  12. SPSS实现两独立样本非参数检验
  13. Qt C++制作桌面天气,无边框、透明窗口,心知天气API,开放源码
  14. 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法代码讲解+资源打包下载】...
  15. 【理财】3.富人思维
  16. 二维码生成器怎么在线制作?制作二维码其实很简单
  17. MPU6050 DMP 代码完全解析 —— dmp_init
  18. 群晖NAS搭建web服务器并公网可访问 1-4
  19. “不安分”的花椒直播,搞了史上首个网红演唱会
  20. Mysql常用命令行大全(三)

热门文章

  1. 高斯-约当(Gauss-Jordan)消元法——c++代码实现
  2. 台式计算机开关键,台式电脑怎么开机
  3. 解决No such file or directory: /turtlebot3/turtlebot3_description/urdf/turtlebot3_.urdf.xacro
  4. 【python教程入门学习】ASCII码一览表,ASCII码对照表
  5. 摩托罗拉刷机维修服务器,摩托罗拉手机通用刷机教程
  6. 在本计算机无法启动用友通服务器,用友通客户端连接不上服务器解决方案
  7. 苹果手机服务器找不到,电脑找不到苹果手机热点
  8. Citrix Receiver卸载方法
  9. 2.JVM垃圾回收机制-什么时候回收内存
  10. ppt中只有声音没有图像处理