qtxlsx读取Excel,无需本地存在excel或者wps驱动,读写操作更方便简洁。

一、 读取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<QString> arr;  //存储每一行数据QVector<QVector<QString>> 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表

二、 将数据导入Excel表,生成一个新表

include "QFile"

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

QString desktop_path = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);//获取桌面路径
QString excel_path_1 = desktop_path + "/LCU接线属性表.xlsx"; //设置文件路径、名、格式

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);//xlCenterrange->setProperty("VerticalAlignment", -4108);//xlCenterQAxObject *cellA,*cellB,*cellC,*cellD,*cellE;//设置标题int cellrow=2;QString A="A"+QString::number(cellrow);//设置要操作的单元格,如A1QString 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);//设置要操作的单元格,如A1QString 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);//xlCenterrange->setProperty("VerticalAlignment", -4108);//xlCentercellB->dynamicCall("SetValue(const QVariant&)",QVariant(array[i][0]));range = worksheet->querySubObject("Range(const QString&)", B); //设置B单元格元素居中显示range->setProperty("HorizontalAlignment", -4108);//xlCenterrange->setProperty("VerticalAlignment", -4108);//xlCentercellC->dynamicCall("SetValue(const QVariant&)",QVariant(array[i][1]));range = worksheet->querySubObject("Range(const QString&)", C); //设置C单元格元素居中显示range->setProperty("HorizontalAlignment", -4108);//xlCenterrange->setProperty("VerticalAlignment", -4108);//xlCentercellD->dynamicCall("SetValue(const QVariant&)",QVariant(array[i][2]));range = worksheet->querySubObject("Range(const QString&)", D); //设置D单元格元素居中显示range->setProperty("HorizontalAlignment", -4108);//xlCenterrange->setProperty("VerticalAlignment", -4108);//xlCentercellE->dynamicCall("SetValue(const QVariant&)",QVariant(array[i][3]));range = worksheet->querySubObject("Range(const QString&)", E); //设置E单元格元素居中显示range->setProperty("HorizontalAlignment", -4108);//xlCenterrange->setProperty("VerticalAlignment", -4108);//xlCenter}workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(excel_path_1));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。workbook->dynamicCall("Close()");//关闭工作簿excel->dynamicCall("Quit()");//关闭exceldelete excel;excel=NULL;QMessageBox::information(NULL,"","LCU接线属性表导出完成");
}

Qt 读取Excel表格数据 生成Excel表格并写入数据相关推荐

  1. linux qt写入excel文件内容,Qt 读取Excel表格数据 生成Excel表格并写入数据

    Qt 读取Excel表格数据 生成Excel表格并写入数据 Qt 读取Excel表格数据 生成Excel表格并写入数据 修改.pro文件,增加 axcontainer QT += axcontaine ...

  2. php怎么把网页生成excel,php网页表格生成excel表格数据-php怎么把数据生成excel表格...

    php导出生成excel表格几种方法介绍 这属于php的技术: php可以用PHPExcel直接导出成excel文件: 代码如下: require_once("../lib/excelcre ...

  3. Html 中表格导出生成excel文件,解决中文导出失败问题。

    Html 中表格导出生成excel文件,解决中文导出失败问题. 网上有Github的jquery插件,但是表格中含有中文的时候,会导出失败,jquery.base64出现INVALID_CHARACT ...

  4. python数据导出excel_python 数据生成excel导出(xlwt,wlsxwrite)代码实例

    这篇文章主要介绍了python 数据生成excel导出(xlwt,wlsxwrite)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 话不多 ...

  5. python 生成excel_python 数据生成excel导出(xlwt,wlsxwrite)代码实例

    这篇文章主要介绍了python 数据生成excel导出(xlwt,wlsxwrite)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 话不多 ...

  6. 接口查询的数据生成excel上传到七牛云

    接口查询的数据生成excel上传到七牛云 一.注册七牛云并新建一个存储空间 我们公司已经有一个七牛云的账号,登录进去之后创建一个新的对象存储空间.命名为eval_mobile.酒会有一个默认的融合 C ...

  7. python根据excel生成报表_Python实现导出数据生成excel报表的方法示例

    本文实例讲述了Python实现导出数据生成excel报表的方法.分享给大家供大家参考,具体如下: #_*_coding:utf-8_*_ import MySQLdb import xlwt from ...

  8. python中excel制作成绩报表,Python实现导出数据生成excel报表的方法示例

    本文实例讲述了Python实现导出数据生成excel报表的方法.分享给大家供大家参考,具体如下: #_*_coding:utf-8_*_ import MySQLdb import xlwt from ...

  9. WPS表格使用VBA往SQLServer中写入数据

    WPS表格使用VBA往SQLServer中写入数据 此代码在WPS表格中运行正常,office Excel中没有测试过,用的都是WPS所以- 需要提前安装WPS VBA插件否则无法运行. A1处如果去 ...

最新文章

  1. 机器学习从Python 2迁移到Python 3,你需要注意的一些事……
  2. 玩转飞书日历,体验高效办公!
  3. 移植ffmpeg到VC环境心得
  4. ORACLE 字符串函数用法(转载)
  5. Oracle的时区问题
  6. innodb和my查询速度_mysql存储引擎MyISAM和InnoDB
  7. jquery网页刷新后控件失效_jquery动态增减控件如何才能不刷新页面
  8. avi编码格式以及查看的视频编码方式的小工具
  9. mysql for mac中文_mysql for Mac 下创建数据表中文显示为?的解决方法
  10. 汇编语言-019(汇编程序与c\c++相互调用)
  11. html边框自动变颜色,css怎么设置边框颜色?
  12. Idea创建简单Java Web项目并部署Servlet
  13. 阿里云DataV与百度Sugar使用比较
  14. 买电梯房几楼才是最好 几个最差楼层千万不能选
  15. 52好压卸载不干净,解压时仍有52好压选项【彻底删除步骤,超详细】
  16. Android安卓身份证识别SDK
  17. k-最近邻聚类k-Nearest Neighbor
  18. 昔日深圳打工妹周群飞或成中国新女首富
  19. 中国强大的希望-浙江大学郑强演讲 转载
  20. 十三、Java高级特性 Lambda表达式 | 接口组成更新 | 方法引用 | 函数式接口

热门文章

  1. Cathy推荐Java面试题
  2. 计算机连接无线网络的步骤,笔记本怎么连接wifi超详细教程
  3. easyexcel 在 设置标题_EasyExcel,让excel导入导出更加简单
  4. 路由器和交换机有什么区别
  5. 国内首个《超融合技术白皮书》出炉,新华三携手产业联盟成员推动全新生态建设
  6. 液晶显示器偏光膜的基本原理
  7. 腾讯云服务器备案要多久?腾讯云小程序备案流程
  8. 人工智能帮助千万用户完成「隐形征信」计算
  9. PPT幻灯片放映不显示备注,只让备注显示在自己屏幕上-投影机 设置
  10. python爬带用户名密码的网页_python爬虫:使用账号、密码和验证码登录知乎网页...