Qt 读取Excel表格数据 生成Excel表格并写入数据

Qt 读取Excel表格数据 生成Excel表格并写入数据

修改.pro文件,增加 axcontainer

QT += axcontainer

导入头文件

#include "QFileDialog"

#include "QAxObject"

生成打开文件窗口

QString strFile = QFileDialog::getOpenFileName(this,QStringLiteral("选择Excel文件"),"",tr("Exel file(*.xls *.xlsx)"));

if (strFile.isEmpty()){

return;

}

定义一个容器,存储读取数据

QVector arr;//存储每一行数据

QVector> array;//将每行数据汇总,类似于二维数组,但不需要手动定义空间大小,造成内存浪费

读Exceld的具体过程

QAxObject excel("Excel.Application"); //加载Excel驱动

excel.setProperty("Visible", false);//不显示Excel界面,如果为true会看到启动的Excel界面

QAxObject *work_books = excel.querySubObject("WorkBooks");

work_books->dynamicCall("Open (const QString&)", strFile); //打开指定文件

QAxObject *work_book = excel.querySubObject("ActiveWorkBook");

QAxObject *work_sheets = work_book->querySubObject("Sheets"); //获取工作表

QString ExcelName;

static int row_count = 0,column_count = 0;

int sheet_count = work_sheets->property("Count").toInt(); //获取工作表数目,如下图,有 3 页

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");

row_count = rows->property("Count").toInt(); //获取行数

QAxObject *column = used_range->querySubObject("Columns");

column_count = column->property("Count").toInt(); //获取列数

//获取第一行第一列数据

ExcelName = work_sheet->querySubObject("Cells(int,int)", 1,1)->property("Value").toString();

//获取表格中需要的数据,此处是从第三行第二列获取数据,具体原因看下图理解,根据自己的需求获取信息

for (int i =3; i <= row_count; i++) {

for (int j = 2; j <= column_count;j++) {

QString txt = work_sheet->querySubObject("Cells(int,int)", i,j)->property("Value").toString(); //获取单元格内容

arr.append(txt);

}

array.append(arr);

arr.clear();//将每行数据存储到array后,清空arr,避免下次循环时数据累计;arr.appeng()是添加不是赋值

}

work_book->dynamicCall("Close(Boolean)", false); //关闭文件

excel.dynamicCall("Quit(void)"); //退出

}

我的Excel表

include "QFile"

设置路径,并生成一个空白Excel

QString desktop_path = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);//获取桌面路径

QString excel_path_1 = desktop_path + "/LCU接线属性表.xlsx"; //设置文件路径、名、格式

QFile file(excel_path_1);

if(file->open(QIODevice::ReadWrite)){//存在则打开,不存在则生成

file1->close();//关闭文件,不关闭会导致后面出错

}

if(!excel_path_1.isEmpty()){

QAxObject *excel = new QAxObject(this);

excel->setControl("Excel.Application");//连接Excel控件

excel->dynamicCall("SetVisible (bool Visible)","false");//不显示窗体

excel->setProperty("DisplayAlerts", true);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示

QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合

workbooks->dynamicCall("Add");//新建一个工作簿

QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿

QAxObject *worksheets = workbook->querySubObject("Sheets");//获取工作表集合

QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);//获取工作表集合的工作表1,即sheet1

//标题行

QAxObject *cell;

cell=worksheet->querySubObject("Cells(int,int)", 1, 1);

cell->dynamicCall("SetValue(const QString&)", "LCU接线属性表");

cell->querySubObject("Font")->setProperty("Size", 11);

//合并标题行

QString cellTitle;

cellTitle.append("A1:");

cellTitle.append(QChar(4 + 'A'));

cellTitle.append(QString::number(1));

QAxObject *range = worksheet->querySubObject("Range(const QString&)", cellTitle);

range->setProperty("WrapText", true);

range->setProperty("MergeCells", true);

range->setProperty("HorizontalAlignment", -4108);//xlCenter

range->setProperty("VerticalAlignment", -4108);//xlCenter

QAxObject *cellA,*cellB,*cellC,*cellD,*cellE;

//设置标题

int cellrow=2;

QString A="A"+QString::number(cellrow);//设置要操作的单元格,如A1

QString B="B"+QString::number(cellrow);

QString C="C"+QString::number(cellrow);

QString D="D"+QString::number(cellrow);

QString E="E"+QString::number(cellrow);

cellA = worksheet->querySubObject("Range(QVariant, QVariant)",A);//获取单元格

cellB = worksheet->querySubObject("Range(QVariant, QVariant)",B);

cellC=worksheet->querySubObject("Range(QVariant, QVariant)",C);

cellD=worksheet->querySubObject("Range(QVariant, QVariant)",D);

cellE=worksheet->querySubObject("Range(QVariant, QVariant)",E);

cellA->dynamicCall("SetValue(const QVariant&)",QVariant("序号"));//设置单元格的值

cellB->dynamicCall("SetValue(const QVariant&)",QVariant("IO面板"));

cellC->dynamicCall("SetValue(const QVariant&)",QVariant("接线板"));

cellD->dynamicCall("SetValue(const QVariant&)",QVariant("KW打包地址"));

cellE->dynamicCall("SetValue(const QVariant&)",QVariant("KW地址"));

for(int i=0;i<120;i++){

QString A="A"+QString::number(i+3);//设置要操作的单元格,如A1

QString B="B"+QString::number(i+3);

QString C="C"+QString::number(i+3);

QString D="D"+QString::number(i+3);

QString E="E"+QString::number(i+3);

cellA = worksheet->querySubObject("Range(QVariant, QVariant)",A);//获取单元格

cellB = worksheet->querySubObject("Range(QVariant, QVariant)",B);

cellC=worksheet->querySubObject("Range(QVariant, QVariant)",C);

cellD=worksheet->querySubObject("Range(QVariant, QVariant)",D);

cellE=worksheet->querySubObject("Range(QVariant, QVariant)",E);

cellA->dynamicCall("SetValue(const QVariant&)",QVariant(i+1));//设置单元格的值

range = worksheet->querySubObject("Range(const QString&)", A); //设置A单元格元素居中显示

range->setProperty("HorizontalAlignment", -4108);//xlCenter

range->setProperty("VerticalAlignment", -4108);//xlCenter

cellB->dynamicCall("SetValue(const QVariant&)",QVariant(array[i][0]));

range = worksheet->querySubObject("Range(const QString&)", B); //设置B单元格元素居中显示

range->setProperty("HorizontalAlignment", -4108);//xlCenter

range->setProperty("VerticalAlignment", -4108);//xlCenter

cellC->dynamicCall("SetValue(const QVariant&)",QVariant(array[i][1]));

range = worksheet->querySubObject("Range(const QString&)", C); //设置C单元格元素居中显示

range->setProperty("HorizontalAlignment", -4108);//xlCenter

range->setProperty("VerticalAlignment", -4108);//xlCenter

cellD->dynamicCall("SetValue(const QVariant&)",QVariant(array[i][2]));

range = worksheet->querySubObject("Range(const QString&)", D); //设置D单元格元素居中显示

range->setProperty("HorizontalAlignment", -4108);//xlCenter

range->setProperty("VerticalAlignment", -4108);//xlCenter

cellE->dynamicCall("SetValue(const QVariant&)",QVariant(array[i][3]));

range = worksheet->querySubObject("Range(const QString&)", E); //设置E单元格元素居中显示

range->setProperty("HorizontalAlignment", -4108);//xlCenter

range->setProperty("VerticalAlignment", -4108);//xlCenter

}

workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(excel_path_1));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。

workbook->dynamicCall("Close()");//关闭工作簿

excel->dynamicCall("Quit()");//关闭excel

delete excel;

excel=NULL;

QMessageBox::information(NULL,"","LCU接线属性表导出完成");

}

Qt 读取Excel表格数据 生成Excel表格并写入数据相关教程

vue + ant-design-vue导出Excel文件流

vue + ant-design-vue导出Excel文件流 //点击导出 exportData(){ this.isLoading = true if(!this.startTime || !this.endTime){ this.$message.warning(请选择开始和结束时间) } else { console.log(this.startTime,this.endTime) httpUtil.axiosHttp({ url:

excel如何删除重复行,保留第一行

excel删除重复行,保留第一行的方法:首先选中单元格后点击表格上方工具栏中的“数据”选项;然后在“数据”选项卡中点击“删除重复值”的选项图标;最后勾选A列和B列,点击确定按钮即可。 excel删除重复行,保留第一行的方法: 1、首先在excel表格中输入两

layui2.x 当表格为空时,无法显示‘暂无相关数据’提示(initSor

layui2.x 当表格为空时,无法显示‘暂无相关数据’提示(initSort初始化排序) 貌似只能删掉以下代码,或者等table.reload()之后了 initSort: { field: 'order_create_time' //排序字段,对应 cols 设定的各字段名 ,type: 'desc' //排序方式 asc: 升序、desc:

Java poi 对 Excel表的增删改查

Java poi 对 Excel表的增删改查 最近因为业务需求,不能使用数据库进行文件存储,需要用Excel表代替数据库进行增删改查操作,先看看Excel表的数据: 以user表为例,进行增删改查 首先是pom.xml dependency groupIdorg.apache.poi/groupId artifactIdooxml-sch

easyexcel设置表头背景颜色

easyexcel设置表头背景颜色 在fillForegroundColor里面设置对应的数值就可以显示表头不同颜色,要想每个表头单元样式不一致,在实体类加@HeadStyle(fillForegroundColor=xxx)即可 颜色对照表: 颜色 测试 Class名称 short Test颜色 Black 8 Test颜色 Brown 6

MySQL练习——数据库、表格的创建

MySQL练习——数据库、表格的创建 一、创建一个年级表 CREATE TABLE grade(gradeid INT(4) NOT NULL COMMENT '年级编号')CHARSET='UTF8' 二、创建课程表 CREATE TABLE SUBJECT(subjectNo INT(4) PRIMARY KEY AUTO_INCREMENT COMMENT '课程编号',subjectName V

外部 DTD: 无法读取外部 DTD ‘XXXXX.dtd‘, 因为 accessExterna

外部 DTD: 无法读取外部 DTD ‘XXXXX.dtd‘, 因为 accessExternalDTD 属性设置的限制导致不允许 如果是使用Ibatis内置的XPathParser的构造方法时,出现的这个错误,则有四种解决方案。 一、也是我最终使用的方法。不远程下载DTD,使用内置的EntityResolver代

你不得不知道的Bootstrap基础之表格、表单(2)

你不得不知道的Bootstrap基础之表格、表单(2) 文章目录 1. Bootstrap表格 代码示例 效果图展示 2. Bootstrap表单 代码示例 效果图展示 代码示例 !DOCTYPE htmlhtml lang=enhead meta charset=UTF-8 titleTitle/title link rel=stylesheet href=https://cdn.

linux qt写入excel文件内容,Qt 读取Excel表格数据 生成Excel表格并写入数据相关推荐

  1. linux下qt浏览word文件内容,Qt获取office文件内容

    Qt获取office文件内容 需要获取word文件的文件内容.网上找了好久,大部分都是excel的.而word的很少.所以在这里记录一下,方便大家查阅和自己使用. 使用的Qt版本是5.4.2 . 下面 ...

  2. linux c编程获取excel文件内容,c读取excel文件内容

    如何用C语言实现读取excel文件中的数据呢? 要做的是在Linux环境下使用C语言实现快速读取excel文件并保存成文本格式基本思路 基础实现方法同上篇文章<直接通过ODBC读.写Excel表 ...

  3. Java 读取 Excel 文件内容, 根据 pdf 模板动态生成对应的 pdf 文件

    1. 下载 adobe acrobat https://www.cr173.com/soft/11135.html 2. 编辑 pdf 模板 1用 acrobat 打开 pdf 编辑模板 添加表单元素 ...

  4. linux qt写入excel文件内容,Qt——读入txt文件,写入到表格

    负责文件的读写,主要有如下三种函数 #include ofstream //文件写操作 内存写入存储设备 ifstream //文件读操作,存储设备读区到内存中 fstream //读写操作,对打开的 ...

  5. 使用POI读取excel文件内容

    1.前言 项目中要求读取excel文件内容,并将其转化为xml格式.常见读取excel文档一般使用POI和JExcelAPI这两个工具.这里我们介绍使用POI实现读取excel文档. 2.代码实例: ...

  6. 通用读取Excel文件内容的模板设计

    Excel格式文件是最为常用的文件之一,在我们开发的软件中,一般需要把一些报表或表格导出为Excel格式文件,也需要读取Excel格式文件中表格数据.因此,Excel格式文件也成为不同软件间数据交换的 ...

  7. Java多线程读取excel文件_解决springboot 多线程使用MultipartFile读取excel文件内容报错问题...

    springboot项目开启多线程 启动类加注解开启 @EnableAsync,实现类方法加注解 @Async 前端页面 报错信息 java.io.FileNotFoundException: C:\ ...

  8. php读取excel文件_PHP如何读取excel文件内容?

    在PHP中可以使用PHPExcelReader或者PHPExcel来读取Excel文件内容,其读取内容的语句代码如"$objPHPExcel->getActiveSheet()-> ...

  9. Java 读取excel文件内容插入到数据库

    Java读写Excel的包是Apache POI. JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel ...

最新文章

  1. centos安装mysql wsl_在 Windows Linux 子系统中安装 CentOS
  2. .团队组建及项目启动
  3. 【转载】增强中调用BAPI并COMMIT使用
  4. java web面试_超实用的Java web面试题
  5. MySql查找几个字段的值一样的记录
  6. thinkphp后台_前后端分离决方案|thinkphpvueadmin 后台接口
  7. java图像处理002---JAVA图片压缩_图片缩放_图片按照比例缩放_图片指定长宽缩放_Java使用google开源工具Thumbnailator实现图片压缩
  8. 倪光南、求伯君“出山”:爱解 Bug、无惧“35岁魔咒”、编码之路痛并快乐!
  9. Promise面试题
  10. SharePoint 2010--为WebPart创建自定义属性
  11. form的get与post方式的区别(转)
  12. 输入网址到出现页面的过程
  13. 浏览器开发者插件集合fehelper
  14. json数据快速格式化
  15. 苹果ipa 安卓apk 和APPX 安全扫码和分析平台
  16. 大一上军事理论网课章测试及见面课答案
  17. 线性和非线性方程数值解法_数值分析计算方法
  18. 大雁塔,青龙寺,樱花舞,落尘香
  19. 计算机的硬件故障维修,计算机硬件故障分析与解决方法
  20. 方兴未艾的计算广告学——微软亚洲研究院高级研究员 刘铁岩

热门文章

  1. openwrt系统下修改网关_OpenWRT路由配置技巧
  2. windows如何使用vnc,只需5步轻松掌握windows下使用vnc
  3. (ZT)杜君立:紧箍咒与纸枷锁
  4. git rebase 与git merge 小结
  5. 大鱼号自媒体怎么赚钱?怎么通过大鱼号赚钱?
  6. 注册测绘师20180301-CNSS
  7. iOS设置主题颜色方便使用
  8. SecurityManager——Java 语言的保护伞
  9. 独家|陆金所IPO幕后事:内部高管看空、P2P存量难消、兑付方案未果
  10. 【Python|密码学】凯撒加密法实验报告