网站首页 > 博客文章 正文
一、打开Excel文件
- 首先在.pro文件加入:QT += axcontainer
- 引入头文件: #include <QAxObject>
qDebug() << "尝试打开Excel" << path << endl;
// 操作Excel的对象
QAxObject *excel = NULL;
// workbook对象
QAxObject *workbooks = NULL;
// workbook对象
QAxObject *workbook = NULL;
excel = new QAxObject("Excel.Application");
//true 表示操作文件时可见,false表示为不可见
excel->dynamicCall("SetVisible(bool)", true);
workbooks = excel->querySubObject("WorkBooks");
// 指定路径打开Excel
workbook = workbooks->querySubObject("Open(QString&)", path);
二、获取worksheet
// 获取所有worksheets
QAxObject * worksheets = workbook->querySubObject("WorkSheets");
// count属性获取worksheet数量
int iWorkSheet = worksheets->property("Count").toInt();
qDebug() << QString("Excel文件中表的个数: %1").arg(QString::number(iWorkSheet));
// 取得第一个worksheet
QAxObject * worksheet = worksheets->querySubObject("Item(int)", 1);
// 根据名称获取worksheet
QAxObject* pWorkSheet = NULL;
try {
pWorkSheet = worksheets->querySubObject("Item(QString)", name);
} catch (...) {
qCritical()<<"获取sheet失败...";
}
三、数据读取
// 获取有数据的区域
QAxObject * usedrange = worksheet->querySubObject("UsedRange");
// 通过rows获取行数
QAxObject * rows = usedrange->querySubObject("Rows");
int iRows = rows->property("Count").toInt();
qDebug() << QString("行数为: %1").arg(QString::number(iRows));
// 通过Columns获取列数
QAxObject * columns = usedrange->querySubObject("Columns");
int iColumns = columns->property("Count").toInt();
qDebug() << QString("列数为: %1").arg(QString::number(iColumns));
//————————数据的起始行———
int iStartRow = rows->property("Row").toInt();
qDebug() << QString("起始行为: %1").arg(QString::number(iStartRow));
//————————数据的起始列————————————
int iColumn = columns->property("Column").toInt();
qDebug() << QString("起始列为: %1").arg(QString::number(iColumn));
// 将所有的数据读取到QVariant容器中保存
QVariant var = usedrange->dynamicCall("Value");
// 将QVariant转换为Qlist的二维数组
QVariantList varRows=var.toList();
if(varRows.isEmpty())
{
qDebug() << "没有数据" << endl;
}else{
const int row_count = varRows.size();
QVariantList rowData;
// 转换过程
for(int i=0;i<row_count;++i)
{
rowData = varRows[i].toList();
excel_list.push_back(rowData);
}
}
// 另一种方式获取单元格值
QAxObject *cellA;
// 设置要操作的单元格,如A1
QString A = "A" + QString::number(cellrow);
// 获取单元格内容
cellA = worksheet->querySubObject("Range(QVariant, QVariant)",A);
// 设置值
cellA->dynamicCall("SetValue(const QVariant&)",QVariant("新值"));
四、数据写入
// 不显示任何警告信息。如果为true在关闭是会出现类似“文件已修改,是否保存”的提示
excel->setProperty("DisplayAlerts", false);
// 保存数据
workbook->dynamicCall("Save()");
// 另存
// workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));
五、添加worksheet
QAxObject *pWorkSheet = NULL;
try {
//获取工作表数目
int count = worksheets->property("Count").toInt();
// 取得最后一个表
QAxObject *pLastSheet = worksheets->querySubObject("Item(int)", count);
// 新增一个表
pWorkSheet = worksheets->querySubObject("Add(QVariant)", pLastSheet->asVariant());
// 移动位置
pLastSheet->dynamicCall("Move(QVariant)", pWorkSheet->asVariant());
// 设置工作表名称
pWorkSheet->setProperty("Name", name);
} catch (...) {
qCritical() <<"创建sheet失败..." << endl;
}
六、根据名称删除表
try {
QAxObject *pFirstSheet = worksheets->querySubObject("Item(QString)", name);
pFirstSheet->dynamicCall("delete");
} catch (...) {
qCritical()<<"删除sheet失败...";
return false;
}
return true;
七、按索引删除表
try {
QAxObject *pFirstSheet = worksheets->querySubObject("Item(int)", index);
pFirstSheet->dynamicCall("delete");
} catch (...) {
qCritical()<<"删除sheet失败...";
}
// 操作成功
八、释放Excel对象
Excel对象如果没有释放,会造成进程里Excel相关进程无法自动退出。
// 关闭workbook
workbook->dynamicCall("Close()");
// 关闭excel
excel->dynamicCall("Quit()");
if (excel)
{
delete excel;
excel = NULL;
}
九、QT其它操作Excel的方法
1. QtXlsx
网址:http://qtxlsx.debao.me
可以不安装Excel就能方便地对Excel文件进行操作。
2. ODBC操作Excel文件
须安装MS Access数据库引擎。
其它库功能对比:
- 上一篇: Qt 工程 pro文件(qt工程文件.pro在哪儿找)
- 下一篇: Qt——内存回收(qti内存)
猜你喜欢
- 2024-09-08 Qt 贪吃蛇制作(含源码)(qt编写贪吃蛇)
- 2024-09-08 qt 提示“启动程序失败,路径或者权限错误?”解决方法
- 2024-09-08 电脑文件不小心删除了怎么办?两个方法教你秒恢复
- 2024-09-08 Qt——内存回收(qti内存)
- 2024-09-08 Qt 工程 pro文件(qt工程文件.pro在哪儿找)
- 2024-09-08 Qt中的快捷键汇总(qtcreator快捷键)
- 2024-09-08 Qt中文乱码解决思路(vscode终端中文乱码怎么解决)
- 2024-09-08 Qt5+VS2015编程实例:下拉列表框QComboBox控件使用
- 2024-09-08 Qt编程进阶(87):基于HTTP协议的网络文件下载
- 2024-09-08 第5篇 基础(五)Qt布局管理器(qt常用的布局管理器)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)