QT 制作 Excel 表格常用操作方法
Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic Script。1994年发行的Excel 5.0版本中,即具备了VBA的宏功能。
在VBA的参考手册中就可以看到具体函数、属性的用法,Qt操作Excel主要通过 QAxObject + Excel VBA来实现! 关于Qt对Excel的操作,网上的资料挺多的,但大多数都是比较基础的,关于插入工作表(至最后一行)、删除工作表、合并/拆分单元格、设置单元格背景色、设置单元格边框色、设置单元格字体(类型、大小、加粗、斜体、下划线、颜色等)、以及设置单元格对齐方式等用法都没有怎么提到,今天就总结一下有关Qt对Excel的操作。
Qt操作Excel,无论后缀是xls还是xlsx都可以。
如下,是我下载的一个Excel VBA参考手册,内容不算太全!
Excel读取
为了便于测试,假设已存在一个excel文件,操作内容已经被红色标记出来。如下所示:
主要读取内容:
- 标题
- 工作表数目
- 工作表名称
- 起始行
- 起始列
- 行数
- 列数
- 单元格内容
代码如下:
QAxObject excel("Excel.Application");
excel.setProperty("Visible", true);
QAxObject *work_books = excel.querySubObject("WorkBooks");
work_books->dynamicCall("Open (const QString&)", QString("E:/test.xlsx"));
QVariant title_value = excel.property("Caption"); //获取标题
qDebug()<<QString("excel title : ")<<title_value;
QAxObject *work_book = excel.querySubObject("ActiveWorkBook");
QAxObject *work_sheets = work_book->querySubObject("Sheets"); //Sheets也可换用WorkSheets
int sheet_count = work_sheets->property("Count").toInt(); //获取工作表数目
qDebug()<<QString("sheet count : ")<<sheet_count;
for(int i=1; i<=sheet_count; i++)
{
QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", i); //Sheets(int)也可换用Worksheets(int)
QString work_sheet_name = work_sheet->property("Name").toString(); //获取工作表名称
QString message = QString("sheet ")+QString::number(i, 10)+ QString(" name");
qDebug()<<message<<work_sheet_name;
}
if(sheet_count > 0)
{
QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1);
QAxObject *used_range = work_sheet->querySubObject("UsedRange");
QAxObject *rows = used_range->querySubObject("Rows");
QAxObject *columns = used_range->querySubObject("Columns");
int row_start = used_range->property("Row").toInt(); //获取起始行
int column_start = used_range->property("Column").toInt(); //获取起始列
int row_count = rows->property("Count").toInt(); //获取行数
int column_count = columns->property("Count").toInt(); //获取列数
for(int i=row_start; i
{
for(int j=column_start; j
{
QAxObject *cell = work_sheet->querySubObject("Cells(int,int)", i, j);
QVariant cell_value = cell->property("Value"); //获取单元格内容
QString message = QString("row-")+QString::number(i, 10)+QString("-column-")+QString::number(j, 10)+QString(":");
qDebug()<<message<<cell_value;
}
}
}
效果如下:
Excel增、删、改
主要操作:
- 设置标题
- 插入工作表(至最后一行)
- 设置工作表名称
- 删除工作表
- 设置单元格内容
- 设置单元格字体(类型、大小、加粗、斜体、下划线、颜色等)
- 设置单元格对齐方式
- 设置单元格高度、宽度
- 设置单元格背景色、边框色
- 合并/拆分单元格
- 清空单元格
代码如下:
QAxObject excel("Excel.Application");
excel.setProperty("Visible", true);
QAxObject *work_books = excel.querySubObject("WorkBooks");
work_books->dynamicCall("Open(const QString&)", "E:\\test.xlsx");
excel.setProperty("Caption", "Qt Excel");
QAxObject *work_book = excel.querySubObject("ActiveWorkBook");
QAxObject *work_sheets = work_book->querySubObject("Sheets"); //Sheets也可换用WorkSheets
//删除工作表(删除第一个)
QAxObject *first_sheet = work_sheets->querySubObject("Item(int)", 1);
first_sheet->dynamicCall("delete");
//插入工作表(插入至最后一行)
int sheet_count = work_sheets->property("Count").toInt(); //获取工作表数目
QAxObject *last_sheet = work_sheets->querySubObject("Item(int)", sheet_count);
QAxObject *work_sheet = work_sheets->querySubObject("Add(QVariant)", last_sheet->asVariant());
last_sheet->dynamicCall("Move(QVariant)", work_sheet->asVariant());
work_sheet->setProperty("Name", "Qt Sheet"); //设置工作表名称
//操作单元格(第2行第2列)
QAxObject *cell = work_sheet->querySubObject("Cells(int,int)", 2, 2);
cell->setProperty("Value", "Java C++ C# PHP Perl Python Delphi Ruby"); //设置单元格值
cell->setProperty("RowHeight", 50); //设置单元格行高
cell->setProperty("ColumnWidth", 30); //设置单元格列宽
cell->setProperty("HorizontalAlignment", -4108); //左对齐(xlLeft):-4131 居中(xlCenter):-4108 右对齐(xlRight):-4152
cell->setProperty("VerticalAlignment", -4108); //上对齐(xlTop)-4160 居中(xlCenter):-4108 下对齐(xlBottom):-4107
cell->setProperty("WrapText", true); //内容过多,自动换行
//cell->dynamicCall("ClearContents()"); //清空单元格内容
QAxObject* interior = cell->querySubObject("Interior");
interior->setProperty("Color", QColor(0, 255, 0)); //设置单元格背景色(绿色)
QAxObject* border = cell->querySubObject("Borders");
border->setProperty("Color", QColor(0, 0, 255)); //设置单元格边框色(蓝色)
QAxObject *font = cell->querySubObject("Font"); //获取单元格字体
font->setProperty("Name", QStringLiteral("华文彩云")); //设置单元格字体
font->setProperty("Bold", true); //设置单元格字体加粗
font->setProperty("Size", 20); //设置单元格字体大小
font->setProperty("Italic", true); //设置单元格字体斜体
font->setProperty("Underline", 2); //设置单元格下划线
font->setProperty("Color", QColor(255, 0, 0)); //设置单元格字体颜色(红色)
//设置单元格内容,并合并单元格(第5行第3列-第8行第5列)
QAxObject *cell_5_6 = work_sheet->querySubObject("Cells(int,int)", 5, 3);
cell_5_6->setProperty("Value", "Java"); //设置单元格值
QAxObject *cell_8_5 = work_sheet->querySubObject("Cells(int,int)", 8, 5);
cell_8_5->setProperty("Value", "C++");
QString merge_cell;
merge_cell.append(QChar(3 - 1 + 'A')); //初始列
merge_cell.append(QString::number(5)); //初始行
merge_cell.append(":");
merge_cell.append(QChar(5 - 1 + 'A')); //终止列
merge_cell.append(QString::number(8)); //终止行
QAxObject *merge_range = work_sheet->querySubObject("Range(const QString&)", merge_cell);
merge_range->setProperty("HorizontalAlignment", -4108);
merge_range->setProperty("VerticalAlignment", -4108);
merge_range->setProperty("WrapText", true);
merge_range->setProperty("MergeCells", true); //合并单元格
//merge_range->setProperty("MergeCells", false); //拆分单元格
//work_book->dynamicCall("Save()"); //保存文件(为了对比test与下面的test2文件,这里不做保存操作) work_book->dynamicCall("SaveAs(const QString&)", "E:\\test2.xlsx"); //另存为另一个文件
work_book->dynamicCall("Close(Boolean)", false); //关闭文件
excel.dynamicCall("Quit(void)"); //退出
效果如下:
操作前:
操作后:
到这里很多人也许都在纳闷,单元格的宏怎么获取的?比如对齐方式(居中对齐),为什么值是-4108,而不是其他值呢?当然那不是我随便写的,自己可以录制宏,然后跟踪。
看下图:
QT 制作 Excel 表格常用操作方法相关推荐
- 初中计算机表格处理教案,中学信息技术教案《制作excel表格》
如何借助现代网络技术为我们的日常生活带来方便?那么,不得不提的是应学会利用excel,从而进行信息的处理与加工,这只是福建省教师招聘考试的重要考点之一.以下是小编整理的学校信息技术教案<制作ex ...
- QT之Excel表格操作
QT之Excel表格操作 提前准备 打开读取excel文件 写入保存excel文件 提前准备 pro文件中添加: QT += axcontainer 在需要使用excel的文件中添加: #includ ...
- php 表格模板,怎么制作excel表格模板
制作excel表格模板的方法:首先打开Excel软件,新建一个工作表格,在表格中把模板的内容编辑完成:然后点击"另存为"按钮,打开"另存为"页面,设置好保存路径 ...
- 如何用电脑制作Excel表格
电脑制作excel表格全步骤 1.首先新建一个excel表格,然后我们选中需要行和列,如6列10行; 2.选中后,鼠标右键点击,然后选择"设置单元格格式"; 3.在弹出的页面中,我 ...
- excel表格换行快捷键_常州办公excel表格常用技巧, 办公软件常用快捷键【金坛吧】...
办公excel表格常用技巧, 办公软件常用快捷键,word删除空格小技巧 不是有很多人觉得办公软件会不会无所谓的,其实这是一个非常错误的想法,办公软件再我们的日常工作生活中起着至关重要的作用,办公软件 ...
- linux qt写入excel文件内容,Qt 读取Excel表格数据 生成Excel表格并写入数据
Qt 读取Excel表格数据 生成Excel表格并写入数据 Qt 读取Excel表格数据 生成Excel表格并写入数据 修改.pro文件,增加 axcontainer QT += axcontaine ...
- QT读取EXCEL表格日期格式问题解决
QT读取EXCEL表格日期时间格式问题解决 问题: Qaxobject类操作excel表格,读取代码中日期格式读取错误,变为数字 eg:2016/7/23 输出打印值为 42574.524513888 ...
- 用QT导出Excel表格
用QT导出Excel表格 前景描述:作者的需求是要在qt开发环境下能把数据导出到Excel表格,原本是打算是用Qt-QAxObject(QAxObject 是Qt提供的包装COM组件的类,通过COM操 ...
- 安利这几个制作Excel表格的技巧
我们在制作Excel表格的时候经常会需要这样或那样的问题,这篇文章就带你了解一下Excel表格的一些知识,一起来看一看吧. 技巧一:Countif 函数如何对嵌套函数进行计数 案例描述:计算销售额大于 ...
最新文章
- 什么是并发控制?并发控制技术的原理,最基本的分锁模式(排他锁,共享锁)
- Hibernate 一对一注释
- 《Network Warrior中文版(第2版)——思科网络工程师必备手册》一3.3 自动协商故障...
- [Asp.Net Core轻量级Aop解决方案]AspectCore Project 介绍
- Apprentissage du français partie 2
- 抽象类可以用new创建对象吗_宠物可以用人类的湿巾吗?猫咪有泪痕可以用纸巾擦掉吗?...
- 删除oracle补丁包,最新Oracle关键补丁:更新包括248个修复
- JAVA学子商城项目问题集锦(springboot)
- 图像质量评估(4) -- 色差(Chromatic Aberration)
- 《FLUENT 14流场分析自学手册》——第1章 流体力学基础 1.1 流体力学基本概念
- SQL server2012安装
- CryptoJS加密
- SQLServer 查询建表语句
- Rockchip RK3288 Datasheet芯片手册资料
- t3财务软件服务器停止运行,用友T3标准版已停止工作应该怎么办
- 优化器TORCH.OPTIM
- Oracle修改expired状态,Oracle数据库用户账号处于expired状态解决方法
- 从网易云音乐网页版无登陆下载MP3的办法
- UVA1616-Caravan Robbers(二分)
- Error while importing package: Couldn’t decompress package
热门文章
- poj2325 大数除法+贪心
- 铁路轨道交通智慧管理系统
- PMP英文报名时,如何描述自己的项目经验?
- 双十一什么数码好物值得买?双十一最值得买的数码好物分享
- 【路径规划】A*算法方法改进思路简析
- submit的用法实例
- IDEA安装插件提示was not installed: Cannot download解决办法
- 985计算机专业考研难度排名,全国100所大学考研难易排名,985反而更好考,有意思...
- Nginx中文域名配置
- horde groupware php,Horde Groupware 5.0.4安装与配置