Qt操作表格

2023-11-07


一、使用QAxObject

1.环境配置

首先在Qt Modules中引入axserver;axcontainer;
在这里插入图片描述
代码中包含相关头文件#include <QAxObject>
头文件

public:
	void OpenExcel(const QString& strExcelPath);
    void AddNewExcel();
    void SaveAndClose(const QString& strExcelPath);
    int GetRowsCount();
    QString GetCell(int row, int column);
    QString GetCell(QString numer);
    void SetCell(int row, int column, QString value);
    void SetCell(QString number, QString value);
    void SetCellColor(int row, int column, QColor color);
private:
	QAxObject* m_pExcel;
    QAxObject* m_pWorkBooks;
    QAxObject* m_pWorkBook;
    QAxObject* m_pWorkSheets;
    QAxObject* m_pWorkSheet;

cpp文件

// 打开已有的excel
void MainWindow::OpenExcel(const QString & strExcelPath)
{
    // 连接excel 控件
    m_pExcel = new QAxObject("Excel.Application");
    // m_pExcel->setControl("Excel.Applicatio");

    // 设置操作excel时不打开excel窗体
    m_pExcel->dynamicCall("SetVisible(bool Visible)", false);

    // 设置不显示任何警告信息
    m_pExcel->setProperty("DisplayAlert", false);

    // 获取当前工作簿
    m_pWorkBooks = m_pExcel->querySubObject("WorkBooks");
    // 打开指定工作簿
    m_pWorkBook = m_pWorkBooks->querySubObject("Open(const QString&)", strExcelPath);

    if (m_pWorkBook)
    {
        qDebug() << "Open Excel Success!";
    }

    // 获取sheets
    m_pWorkSheets = m_pWorkBook->querySubObject("Sheets");
    // 获取某个sheet
    m_pWorkSheet = m_pWorkSheets->querySubObject("Item(int)", 1);
}

// 创建新的Excel
void MainWindow::AddNewExcel()
{
    // 获取当前工作簿
    m_pWorkBooks = m_pExcel->querySubObject("WorkBooks");

    m_pWorkBooks->dynamicCall("Add");
    m_pWorkBook = m_pExcel->querySubObject("ActiveWorkBook");
    m_pWorkSheets = m_pWorkBook->querySubObject("Sheets");
    m_pWorkSheet = m_pWorkSheets->querySubObject("Item(int)", 1);
}

// 保存并关闭Excel
void MainWindow::SaveAndClose(const QString& strExcelPath)
{
    // 保存文件,一定要将路径中的'/'转为'\\',前者只能被Qt识别
    m_pWorkBook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(strExcelPath));
    // 关闭文件
    m_pWorkBook->dynamicCall("Close(Boolean)", false);
    // 关闭excel
    m_pExcel->dynamicCall("Quit()");
    delete m_pExcel;
    m_pExcel = nullptr;
}

// 获取行数
int MainWindow::GetRowsCount()
{
    int iRows = 0;
    QAxObject* pRows = m_pWorkSheet->querySubObject("Rows");
    iRows = pRows->property("Count").toInt();
    return  iRows;
}

// 获取单元格内容,行号+列号
QString MainWindow::GetCell(int row, int column)
{
    QAxObject* pCell = m_pWorkSheet->querySubObject("Range(int, int)", row, column);
    return  pCell->property("Value").toString();
}

// 获取单元格内容,单元格标号如: A1,C5
QString MainWindow::GetCell(QString number)
{
    QAxObject* pCell = m_pWorkSheet->querySubObject("Range(QString)", number);
    return  pCell->property("Value").toString();
}

// 设置单元格内容,行号+列号
void MainWindow::SetCell(int row, int column, QString value)
{
    QAxObject* pCell = m_pWorkSheet->querySubObject("Cells(int, int)", row, column);
    pCell->setProperty("Value", value);
}

// 设置单元格内容,单元格标号如: A1,C5
void MainWindow::SetCell(QString number, QString value)
{
    QAxObject* pCell = m_pWorkSheet->querySubObject("Cells(QString)", number);
    pCell->setProperty("Value", value);
}

// 设置单元格颜色的方式与设置值的方式一样,都是先获取到单元格,再设置属性
void MainWindow::SetCellColor(int row, int column, QColor color)
{
    QAxObject* pCell = m_pWorkSheet->querySubObject("Cells(int, int)", row, column);
    QAxObject* pInterior = pCell->querySubObject("Interior");
    pInterior->setProperty("Color", color);
}

二、使用QXlsx

推荐两个网站
QT 使用第三方库QtXlsx操作Excel表
Qt Xlsx使用教程
生成动态库的资源文件
QXlsx模块源文件及编译后的文件

复制编译后的文件到本地路径,参考网址:毓树麟风——Qt5下Qxlsx模块安装及使用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt操作表格 的相关文章

  • QGraphicsScene没有删除QWidget的功能

    QGraphicsScene 有一个addWidget QWidget 有函数 但是没有对应的removeWidget QWidget 它只有removeItem QGraphicsItem 如何删除 QWidget 这是一个基本示例 看看
  • Qt 5.5 QOpenGLWidget 链接错误未链接任何 openGL 调用

    我尝试使用 Qt 5 5 1 构建一个简单的 OpenGL 应用程序 一切都很好 直到我尝试使用 glClearColor 等 openGL 本机函数调用 该小部件实际上编译并产生黑屏 但在我尝试使用任何 openGL 本机函数后 它甚至不
  • 如何在qt中进行异步文件io?

    我想知道如何在qt中实现异步文件io 这在普通的 qt 中是否可以实现 或者有人需要使用另一个库 例如 libuv 来实现这样的事情 我正在查看 QDataStream 但即使它是一个 流 它也不是非阻塞的 我想一种解决方案是制作一个在内部
  • 在 Qt 5 中嵌入 Python

    我想将 Python 解释器嵌入到 Qt 5 应用程序中 我在 Qt 5 中有一个工作应用程序 但是当我把 include
  • SWI-Prolog 与 C++ 接口的问题

    我试图让 SWI Prolog 与 C 很好地配合 现在束手无策 现在 在我开始准确解释我的问题是什么之前 我想首先说明我的项目是关于什么的以及我选择了哪些工具来开发解决方案 我的教授分配给我的任务是开发一个 GUI 程序 作为 SWI p
  • 我应该使用 QCoreApplication::processEvents() 还是 QApplication::processEvents()?

    我有一个从两者调用的方法QThreads和主线程 这个方法有时可能需要很长时间才能在循环中进行计算 所以我把QCoreApplication processEvents 这可以防止 GUI 冻结 在某个时刻我已经改变了QCoreApplic
  • 使用 QTextCursor 选择一段文本

    使用 Qt 框架选择文本片段时遇到问题 例如 如果我有这个文件 没有时间休息 我想选择 ime for r 并从文档中删除这段文本 我应该如何使用 QTextCursor 来做到这一点 这是我的代码 QTextCursor cursor n
  • 在哪里可以找到 QT 5.3.0 命令提示符

    用于学习Qt的书 C gui programming with qt 4 2nd 版 我需要Qt的命令提示符 我已经安装了Qt 5 3 0 creator 5 3 0开源 但不知道它的命令提示符在哪里 有人可以帮助我吗 我认为您正在寻找的是
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • 打开和关闭附加窗口 (QML)

    目前我有一个通过以下方式打开的窗口 property variant win Button id testButton MouseArea onClicked var component Qt createComponent test qm
  • 第一次信号发射后自动断开

    我正在从文件加载网页 然后替换其中的一些 html self template web page QtWebKit QWebPage self template web page mainFrame load QtCore QUrl tem
  • 清除pyqt中布局中的所有小部件

    有没有办法清除 删除 布局中的所有小部件 self plot layout QtGui QGridLayout self plot layout setGeometry QtCore QRect 200 200 200 200 self r
  • Retina 显示屏中具有 QOpenGLWIdget 的 Qt MainWindow 显示错误大小

    我有一个 Qt 应用程序MainWindow 我嵌入一个QOpenGLWidget在里面 一切正常 直到我开始使用 Apple Retina 显示屏并在高 DPI 模式下运行我的应用程序 我的QOpenGLWidget只是它应该具有的大小的
  • 完全彻底卸载QT Creator

    问题 如何从 Linux 机器上卸载 QT Creator 我的 Debian Jessie 机器上的安装已损坏 我尝试过重新安装 修复等 但没有成功 建议我完全卸载 获取最新版本并重新安装 问题是我不确定如何执行此操作 每次我尝试时 QT
  • 如何在Qt 5中的paintEvent上使用mouseMoveEvent?

    我是 Qt 和 c 的新手 所以我遇到了一些困难 我正在尝试创建一个小部件 它可以获取 mouseMoveEvent 位置并在鼠标位置的像素图上绘制椭圆 下面你可以看到代码 include myimage h include
  • 如何声明一个带有成员函数指针的函数

    我有一个类 其中的成员变量指向库对象 class myClassA private libraryClass libraryObject 该库类发出事件 以字符串为特征 并提供一种机制 允许客户端类指定在发出事件时应调用的成员函数 因此在m
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 如何doxygen注释Qt属性?

    我想将 Doxygen 注释附加到我的 Q PROPERTY 例如 song h class Song public QObject Q OBJECT private Q PROPERTY QString title READ title
  • PyQt4 信号和槽

    我正在使用 PyQt4 编写我的第一个 Python 应用程序 我有一个 MainWindow 和一个 Dialog 类 它是 MainWindow 类的一部分 self loginDialog LoginDialog 我使用插槽和信号 这
  • Qt(在 Windows 上)将权限级别设置为“requireAdministrator”

    我正在使用 Qt Creator 并努力制作 exe文件默认以管理员身份运行 在线阅读所有解决方案我试图将这一行放入我的 pro file QMAKE LFLAGS MANIFESTUAC level requireAdministrato

随机推荐

  • 计算机组成原理课程设计:运算器、微程序控制器、两个数大小比较

    实验一 运算器 实验二 微程序控制器 实验三 两个数比较大小 机器程序如下 P 00 20 IN R0 P 01 00 P 02 21 IN R1 P 03 00 P 04 84 SUB R0 R1 P 05 F0 BZC P 06 0C
  • 【数据结构】_1.集合与复杂度

    目录 1 集合框架 2 时间复杂度 2 1 时间复杂度和空间复杂度 2 2 时间复杂度的概念 2 3 大O的渐进表示法 2 3 1 精确的时间复杂度表达式 2 3 2 大O渐进表示法的三条规则 2 3 3 时间复杂度的最好 平均与最坏情况
  • kaldi编译报错:找不到库

    https blog csdn net boshuzhang article details 81988264
  • C++ QT 异步之信号槽

    C QT 中的异步执行机制主要是通过信号与槽机制实现的 在 QT 中 信号是一种特殊的函数 它可以在某些条件满足时被触发 槽函数则是与信号相关联的函数 当信号被触发时 与之相关联的槽函数会被执行 通过信号与槽机制 可以实现对象之间的通信 以
  • 2021 年高教社杯全国大学生数学建模竞赛 E 题 中药材的鉴别 第一题

    目录 1 数据预处理 1 1 数据基本信息探索 1 2 数据可视化 1 3 异常值处理 2 数据特征值提取 2 1 数据标准化 2 2 PCA提取特征值 3 数据聚类鉴别药材种类 3 1 肘部图确定K值 3 2 轮廓系数图确定K值 3 3
  • 程序员常用快捷键整理(VS、Windows,提高效率,只有一步之遥)

    前言 本篇博客整理了程序员常用的快捷键 主要包括VS visual studio 编译器的快捷键 Windows操作系统快捷键 由于我目前只是一个刚学了C的程序员小白 对于其他的编译环境的相关快捷键等之后学到后会继续补充在这篇博客 提高编程
  • 浅谈STL

    一 函数对象概念 概念 重载函数调用操作符的类 其对象常称为函数对象 函数对象使用重载的 时 行为类似函数调用 也叫仿函数 本质 函数对象 仿函数 是一个类 不是一个函数 特点 函数对象在使用时 可以像普通函数那样调用 可以有参数 可以有返
  • CentOS中安装Docker

    Docker 要求 CentOS 系统的内核版本高于 3 10 通过 uname r 命令查看你当前的内核版本 uname r 确保 yum 包更新到最新 sudo yum update 移除旧的版本 sudo yum remove doc
  • 【人物访谈·03期】关于对数据分析前辈的一次行业探讨

    小飞象 人物访谈 做一个独立的人 不要依赖别人 独立会给你的魅力加分 出品 小飞象 人物访谈 嘉宾 冰冰老师 采访 整理 木兮 排版 木兮 背景 本期03 访谈邀请到了小飞象社群特别嘉宾 冰冰 个人公众号 冰云数据 作为访谈对象 而且通过此
  • Uncaught TypeError: Cannot read properties of undefined (reading ‘MethodInfo‘)

    VUE前端项目问题记录 vue grpc web 错误描述 user grpc web pb js 95 Uncaught TypeError Cannot read properties of undefined reading Meth
  • 多任务学习中的数据分布问题(一)

    今天这个专题源于我在做分布式多任务学习实验时在选取数据集的时候的疑惑 以下我们讨论多任务学习中 尤其是在分布式的环境下 如何选择数据集和定义任务 多任务学习最初的定义是 多任务学习是一种归纳迁移机制 基本目标是提高泛化性能 多任务学习通过相
  • 打通大前端最后一公里之前端埋点与日志系统架构设计

    什么是埋点 所谓 埋点 是数据采集领域 尤其是用户行为数据采集领域 的术语 指的是针对特定用户行为或事件进行捕获 处理和发送的相关技术及其实施过程 埋点的技术实质 是先监听软件应用运行过程中的事件 当需要关注的事件发生时进行判断和捕获 埋点
  • C51单片机 串口通信RX&TX---适合初学

    原料 keil 仿真软件 虚拟串口工具 群文件里的tools vspdctl dll记得覆盖 说明 串口中断允许位ES 1时 单片机一接收到数据或者发送数据就会进入串口中断函数 我认为是因为SBUF一有动静 便会触发到中断 所以单片机发送数
  • 2022年高考都结束了,还有人真觉得程序员下班后不需要学习吗?

    一转眼 高考已经过去十来天了 近期 各省市也陆续公布了高考成绩 还有今年的各批次录取日程 最近一些有转行想法的 刚毕业想进入这个行业的人 甚至还有刚高考完的小朋友私信问我以后想当去大厂当程序员的话需要提前学些什么 属实 卷 得可以 哈哈前浪
  • windows常见后门隐藏和权限维持方法及排查技术

    https xz aliyun com t 4842 这片文章中隐藏webshell我觉得很nice 进程注入以前试过 wmi 和 bitsadmin 可以了解下 常见backdoor和persistence方式方法 系统工具替换后门 Im
  • linux嵌入式常见面试问题(持续更新)

    1 采用DMA方式进行串口通信 如何解析数据才能提高吞吐量 DMA 直接内存访问 是一种通过硬件控制器直接访问内存的方式 而不需要CPU的干预 在串口通信中 采用DMA方式可以减少CPU的负担 提高数据传输的效率 为了提高吞吐量 需要对DM
  • Python错误:ModuleNotFoundError: No module named ‘keras‘(已解决)

    出现错误 进入 Settings Project interpreter 点击右边 在左边出现的组件中找到keras 点击下方的Install Pakage 安装成功
  • Java 格式化字符串

    7 4 1 常规类型的格式化 String类的format 方法用于创建格式化的字符串以及连接多个字符串对象 熟悉C语言的读者应该记得C语言的sprintf 方法 两者有类似之处 format 方法有两种重载形式 l format Stri
  • java通过redis实现排行榜功能

    1 数据存储规划 在排行榜中 每个用户都会有一个唯一的标识 ID 同时需要记录该用户的积分 Score 因此 我们可以将每个用户的ID作为有序集合中的一个元素 将用户的积分作为该元素的分数 ZADD rank 1000 user1 ZADD
  • Qt操作表格

    文章目录 一 使用QAxObject 1 环境配置 二 使用QXlsx 一 使用QAxObject 1 环境配置 首先在Qt Modules中引入axserver axcontainer 代码中包含相关头文件 include