参考链接:https://blog.csdn.net/czyt1988/article/details/52121360

http://blog.sina.com.cn/s/blog_a6fb6cc90101gv2p.html

1. QAxObject介绍

在QT中,有个自带的QAxObject类,可以直接操作EXCEL

除此之外,当我们操作某个文件夹下的EXCEL的时候,都会在该文件夹下出现一个隐藏文件~$XX.xlsx,如下图所示:

此时,如果我们再用QAxObject去操作这个文件时,该文件是只读的,无法保存成功的,所以我们使用QAxObject时,需要提前判断一次.

2.示例

首先在项目下创建一个模板templatePath.xlsx文件

3.效果如下

4.写代码

#include <QApplication>
#include "widget.h"
#include <QtGui>
#include <QAxObject>
#include <QStandardPaths>
#include <QFileDialog>
#include <QFileDialog> /*excel操作*/
enum EXcel_ColumnType{
ColumnA = ,
ColumnB = ,
ColumnC = ,
ColumnD = ,
ColumnE = ,
ColumnF = ,
ColumnG = ,
ColumnH = ,
ColumnI =
}; QString saveas()
{
QString file;
QString filter; //如果版本低于QT5,则需要将:
// QStandardPaths::writableLocation(QStandardPaths::DesktopLocation),
//改为:QDesktopServices::storageLocation(QDesktopServices::DesktopLocation),
file = QFileDialog::getSaveFileName (
NULL, //父组件
"另存为", //标题
QStandardPaths::writableLocation(QStandardPaths::DesktopLocation), //设置路径, .表示当前路径,./表示更目录
"Excel(*.xlsx)", //过滤器
&filter ); return file;
} //设置EXCEL中单个内容的数据
void Excel_SetCell(QAxObject *worksheet,EXcel_ColumnType column,int row,QColor color,QString text)
{
QAxObject *cell = worksheet->querySubObject("Cells(int,int)", row, column);
cell->setProperty("Value", text);
QAxObject *font = cell->querySubObject("Font");
font->setProperty("Color", color);
} //把QVariant转为QList<QList<QVariant> >,用于快速读出的
void castVariant2ListListVariant(const QVariant &var, QList<QList<QVariant> > &res)
{
QVariantList varRows = var.toList();
if(varRows.isEmpty())
{
return;
} const int rowCount = varRows.size();
QVariantList rowData; for(int i=;i<rowCount;++i)
{
rowData = varRows[i].toList();
res.push_back(rowData);
}
} //把QList<QList<QVariant> > 转为QVariant,用于快速写入的
void castListListVariant2Variant(const QList<QList<QVariant> > &cells, QVariant &res)
{
QVariantList vars;
const int rows = cells.size();
for(int i=;i<rows;++i)
{
vars.append(QVariant(cells[i]));
}
res = QVariant(vars);
} int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString templatePath = "./template.xlsx";
QFileInfo info(templatePath); if(!info.exists())
{
qDebug()<<"template.xlsx is NULL";
return ;
} templatePath = info.absoluteFilePath(); //获取模板的绝地路径
templatePath = QDir::toNativeSeparators(templatePath); //转换一下路径,让windows能够识别 QString ExcelFile = QDir::toNativeSeparators(saveas()); //打开文件保存对话框,找到要保存的位置 if(ExcelFile=="")
return ; QFile::copy(templatePath, ExcelFile); //将模板文件复制到要保存的位置去 info.setFile(ExcelFile);
info.setFile(info.dir().path()+"/~$"+info.fileName()); if(info.exists()) //判断一下,有没有"~$XXX.xlsx"文件存在,是不是为只读
{
qDebug()<<"报表属性为只读,请检查文件是否已打开!";
return ;
} QAxObject *excel = new QAxObject();//建立excel操作对象
excel->setControl("Excel.Application");//连接Excel控件
excel->setProperty("Visible", true);//显示窗体看效果
excel->setProperty("DisplayAlerts", false);//显示警告看效果
QAxObject *workbooks = excel->querySubObject("WorkBooks"); QAxObject* workbook = workbooks->querySubObject("Open(const QString&)",QDir::toNativeSeparators(ExcelFile) ); //打开 excel->setProperty("Caption", "Qt Excel"); //标题为Qt Excel
QAxObject *work_book = excel->querySubObject("ActiveWorkBook"); QAxObject *worksheet = work_book->querySubObject("Sheets(int)",); //获取表单1 Excel_SetCell(worksheet,ColumnB,,QColor(,,),""); //设置B2单元格内容为12345 Excel_SetCell(worksheet,ColumnB,,QColor(,,),"B3"); //设置B3单元格内容 Excel_SetCell(worksheet,ColumnB,,QColor(,,),"B4"); //设置B4单元格内容 /*批量一次性设置A6~I106所在内容*/
QAxObject *user_range = worksheet->querySubObject("Range(const QString&)","A6:I106"); QList<QList<QVariant> > datas;
for(int i=;i<;i++)
{
QList<QVariant> rows;
for(int j=;j<;j++)
{
rows.append(i*j);
}
datas.append(rows);
} QVariant var;
castListListVariant2Variant(datas,var); user_range->setProperty("Value", var); workbook->dynamicCall("Save()" );

// workbook->dynamicCall("Close()"); //关闭文件
// excel->dynamicCall("Quit()");//关闭excel return ; }

未完待续,下章学习Qtxlsx库操作EXCEL: https://www.cnblogs.com/lifexy/p/10743352.html

38.QT-QAxObject快速写入EXCEL示例的更多相关文章

  1. Qt 下快速读写Excel指南(尘中远)

    Qt Windows 下快速读写Excel指南 很多人搜如何读写excel都会看到用QAxObject来进行操作,很多人试了之后都会发现一个问题,就是慢,非常缓慢!因此很多人得出结论是QAxObjec ...

  2. Delphi数据库数据用文件流方式快速写入Excel文件

    在开发数据库应用程序中,经常要将类型相同的数据导出来,放到Excel文件中,利用Excel强大的编辑功能,对数据作进一步的加工处理.这有许多的方法,我们可以使用OLE技术,在Delphi中创建一个自动 ...

  3. Qt使用QAxObject快速批量读取Excel内容

    网上各种教程用的方法主要是如下这一句: QAxObject * range = worksheet->querySubObject("Cells(int,int)", 1, ...

  4. 在Qt中用QAxObject来操作Excel

        目录(?)[+]   下一篇:用dumpcpp工具生成的excel.h/excel.cpp来操纵Excel 最近写程序中需要将数据输出保存到Excel文件中.翻看<C++ GUI Pro ...

  5. 转 在Qt中用QAxObject来操作Excel

    最近写程序中需要将数据输出保存到Excel文件中.翻看<C++ GUI Programming with Qt 4>(Second Edition)发现可以在Qt中运用ActiveX控件, ...

  6. Python中使用第三方库xlrd来写入Excel文件示例

    Python中使用第三方库xlrd来写入Excel文件示例 这一篇文章就来介绍下,如何来写Excel,写Excel我们需要使用第三方库xlwt,和xlrd一样,xlrd表示read xls,xlwt表 ...

  7. [转]Qt 5.5 操作 Excel 的速度 效率问题

    转自:http://blog.csdn.net/li494816491/article/details/50274305 1. QAxObject *_excelObject1 =newQAxObje ...

  8. DataFrame数据转为list,再逐行写入Excel

    首先使用np.array()函数把DataFrame转化为np.ndarray(), 再利用tolist()函数把np.ndarray()转为list, 示例代码如下: # -*- coding:ut ...

  9. Java使用POI读取和写入Excel指南

    Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃 ...

随机推荐

  1. TensorFlow之CNN:运用Batch Norm、Dropout和早停优化卷积神经网络

    学卷积神经网络的理论的时候,我觉得自己看懂了,可是到了用代码来搭建一个卷积神经网络时,我发现自己有太多模糊的地方.这次还是基于MINIST数据集搭建一个卷积神经网络,首先给出一个基本的模型,然后再用B ...

  2. Android 7.0 存储系统—Vold与MountService分析(三)(转 Android 9.0 分析)

    Android的存储系统(三) 回顾:前帖分析了Vold的main()函数和NetlinkManager的函数调用流程,截止到NetlinkHandler的创建和start()调用,本帖继续分析源码 ...

  3. 在javaScript中检测数据类型的几种方式

    类型检测的方法 typeof instanceof Object.protype.toString constructor duck type:鸭子类型 typeof 返回一个字符串,适合函数对象和基 ...

  4. 作为一个零基础的新手,如何系统的自学Java和JavaEE开发技术?

    其实这个问题很简单,我用最简单的语言给大家描述一下,学习一样东西就要了解这样东西学完了要干什么事情,有什么作用.然后就是应该学习哪些必要的内容,该如何运用得当的方法进行有效率的学习不至于自己摸不着头脑 ...

  5. TensorFlow从1到2(二)续讲从锅炉工到AI专家

    图片样本可视化 原文第四篇中,我们介绍了官方的入门案例MNIST,功能是识别手写的数字0-9.这是一个非常基础的TensorFlow应用,地位相当于通常语言学习的"Hello World!& ...

  6. Java面试前需要了解的东西

    一.前言 只有光头才能变强 回顾前面: 广州三本找Java实习经历 上一篇写了自己面试的经历和一些在面试的时候遇到的题目(笔试题和面试题). 我在面试前针对Java基础也花了不少的时间,期间也将自己写 ...

  7. 面试前必须要知道的Redis面试题

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面: 从零单排学Redis[青铜] 从零单排学 ...

  8. kubernetes实践之四:深入理解控制器(workload)

    一.Pod与controllers的关系 controllers:在集群上管理和运行容器的对象 通过label-selector相关联 Pod通过控制器实现应用的运维,如伸缩,升级等 二.Deploy ...

  9. 第14章 纪元时间转换 - IdentityModel 中文文档(v1.0.0)

    JWT令牌使用所谓的Epoch或Unix时间来表示日期/时间. IdentityModel包含用于DateTime和DateTimeOffset转换到/来自Unix时间的扩展方法: var dt = ...

  10. docker(5):数据的管理

    Docker的volume卷 为了能持久话保存和共享容器的数据. 使用docker volume卷的两种方式 1:数据卷 2:数据卷容器 1:数据卷 数据卷:数据卷会绕过docker 的ufs 直接写 ...