Qt中操作Excel表格读写
示例代码(将数据从数据库导入到Excel,将数据从Excel导入到数据库):
void slotExportBtn(){QAxObject *excel = new QAxObject("Excel.Application");if(excel->isNull()){if(excel != NULL){excel->dynamicCall("Quit()");delete excel;}QMessageBox::critical(0, tr("error"), tr("Excel Application is not Exist"));return ;}QAxObject *workbooks = NULL;QAxObject *workbook = NULL;QAxObject *worksheets = NULL;QAxObject *worksheet = NULL;excel->dynamicCall("SetVisible(bool)", false);excel->setProperty("DisplayAlerts", false);workbooks = excel->querySubObject("WorkBooks");if(QFile::exists(fileName)){workbook = workbooks->querySubObject("Open(const QString &)", fileName);}else{workbooks->dynamicCall("Add");workbook = excel->querySubObject("ActiveWorkBook");}worksheets = workbook->querySubObject("Sheets");worksheet = worksheets->querySubObject("Item(int)", 1);QAxObject * usedrange = worksheet->querySubObject("UsedRange");// QAxObject * rows = usedrange->querySubObject("Rows");// QAxObject * columns = usedrange->querySubObject("Columns");int intRowStart = usedrange->property("Row").toInt();int intColStart = usedrange->property("Column").toInt();// int intCols = columns->property("Count").toInt();// int intRows = rows->property("Count").toInt();QAxObject *cell = NULL;QString str;int rowCount = model->rowCount();int colCount = model->columnCount();// // 清空数据// for(int i=intRowStart;i <intRowStart + intRows;i++)// {// for(int j=intColStart ;j<intColStart+intCols;j++)// {// QString a;// switch (j) {// case 1: a = "A" + QString::number(i);// break;// case 2: a = "B" + QString::number(i);// break;// case 3: a = "C" + QString::number(i);// break;// case 4: a = "D" + QString::number(i);// break;// }// str = " ";// cell = worksheet->querySubObject("Range(QVariant, QVariant)",a);// cell->dynamicCall("SetValue(const QVariant&)", str);// }// }//标题行// QAxObject *cell;cell=worksheet->querySubObject("Cells(int,int)", 1, 1);cell->dynamicCall("SetValue(const QString&)", "地址表");cell->querySubObject("Font")->setProperty("Size", 11);//合并标题行QString cellTitle;cellTitle.append("A1:");cellTitle.append(QChar(3 + '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);//xlCenterQString a;a = "A2";cell = worksheet->querySubObject("Range(QVariant, QVariant)",a);cell->dynamicCall("SetValue(const QVariant&)", "id");a = "B2";cell = worksheet->querySubObject("Range(QVariant, QVariant)",a);cell->dynamicCall("SetValue(const QVariant&)", "address");a = "C2";cell = worksheet->querySubObject("Range(QVariant, QVariant)",a);cell->dynamicCall("SetValue(const QVariant&)", "warnmessage");a = "D2";cell = worksheet->querySubObject("Range(QVariant, QVariant)",a);cell->dynamicCall("SetValue(const QVariant&)", "code");// 插入数据for (int i = intRowStart; i < intRowStart + rowCount; i++){for(int j = intColStart; j < intColStart + colCount; j++){QString a;switch (j) {case 1: a = "A" + QString::number(i+2);break;case 2: a = "B" + QString::number(i+2);break;case 3: a = "C" + QString::number(i+2);break;case 4: a = "D" + QString::number(i+2);break;}str = model->record(i-1).value(j-1).toString();cell = worksheet->querySubObject("Range(QVariant, QVariant)",a);cell->dynamicCall("SetValue(const QVariant&)", str);}}// QString a = "A1";// cell = worksheet->querySubObject("Range(QVariant, QVariant)",a);// cell->dynamicCall("SetValue(const QVariant&)", "123456");// worksheet->dynamicCall(pp.toUtf8());workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(fileName));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。workbook->dynamicCall("Close()");//关闭工作簿excel->dynamicCall("Quit()");//关闭exceldelete workbook;delete workbooks;delete excel;QMessageBox::information(0, tr("success"), tr("1111"));
}void slotImportBtn(){QString strFile = QFileDialog::getOpenFileName(this,QStringLiteral("选择Excel文件"),"",tr("Exel file(*.xls *.xlsx)"));if (strFile.isEmpty()){return;}QVector<QString> arr; //存储每一行数据QVector<QVector<QString>> array; //将每行数据汇总,类似于二维数组,但不需要手动定义空间大小,造成内存浪费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("Value2()").toString();// QAxObject *range = work_sheet->querySubObject("Cells(int,int)",1,1); //获取cell的值// QString strVal = range->dynamicCall("Value2()").toString();//获取表格中需要的数据,此处是从第三行第二列获取数据,具体原因看下图理解,根据自己的需求获取信息for (int i =3; i <= row_count; i++) {for (int j = 1; j <= column_count;j++) {// QString txt = work_sheet->querySubObject("Cells(int,int)", i,j)->property("Value2()").toString(); //获取单元格内容// arr.append(txt);// qDebug()<<"lllllllll"<<txt;QAxObject *range = work_sheet->querySubObject("Cells(int,int)",i,j); //获取cell的值QString strVal = range->dynamicCall("Value2()").toString();arr.append(strVal);}array.append(arr);arr.clear(); //将每行数据存储到array后,清空arr,避免下次循环时数据累计;arr.appeng()是添加不是赋值}work_book->dynamicCall("Close(Boolean)", false); //关闭文件excel.dynamicCall("Quit(void)"); //退出}qDebug()<<"lllllllll"<<array;if(!array.isEmpty()){SqlHelper::insertBlockToWarning(array);}
}
Qt中操作Excel表格读写相关推荐
- android jxl.jar 使用,使用jxl.jar在Android中操作Excel表格——重中之重——对隐藏表的处理...
曾简单了解过C#,将Excel(数据库表)表中的数据导入到C#中,使用C#制作的图形化界面进行对Excel表中数据进行操作. 今天想试试,在Android中导入Excel表格进行操作.在网上查阅资料, ...
- python 编辑excel需要什么包_Python 中操作EXCEL表格的包
今天,马云爸爸又来贡献金句了,比王健林公公一亿一个小目标还高,"一个月挣一二十个亿很难受!!!",作为在传统企业主要为电商部门提供数据分析的数据分析师,体验太深刻了. 双11前后, ...
- Qt中操作excel
最近有一个把检测结果导出到excel中的任务,由于对qt比较熟悉,所以打算使用qt来实现.查了一下,使用qt下自带的QAxObject类,实现还是比较简单的. 首先需要在pro文件中添加axconta ...
- pb中操作excel表格函数
Ole_object.Workbooks.add//新建一个Excel文件 Ole_object.Workbooks.Open("FileName")//打开一个已存在Excel文 ...
- 计算机算最大值如何操作,Excel表格中如何通过函数判断数据中的最大值
Excel表格中如何通过函数判断数据中的最大值 腾讯视频/爱奇艺/优酷/外卖 充值4折起 Excel是我们常用的一款数据处理软件,深受大家的欢迎,是我们学习办公的助手,有的朋友想知道怎么通过函数判断数 ...
- java 操作 word 表格和样式,java读取word表格中的表格 java如何读取word中的excel表格数据...
Java 利用poi 可以直接读取word中的表格保持样式生1.读取word 2003及word 2007需要的jar包 读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi ...
- c语言从excal读取字符串,C语言操作EXCEL文件(读写)
C语言操作EXCEL文件(读写) 本文主要介绍通过纯C语言进行EXCEL的读写操作:(修改时间2018.08.28,如果运行结果均是0,请看文章最后一节) C语言读操作 C语言写操作 在之前需要使用C ...
- python openpyxl操作Excel表格
原创:未经允许不得转载,转载需标明出处 打算分为两个部分: 第一部分为:操作Excel表格 第二部分为:操作Excel图表 现在发布为第一部分内容 在最近的项目中的使用到了提取Android帧率日志, ...
- Python Pandas操作Excel表格文件:创建新表格,追加数据
前言: python操作excel表格文件的增删读写,一般需要用到的第三方库有xlwt,xlrd.xlrd负责读取excel,xlwt负责写入excel文件.这种操作方法比较繁琐,效率还不错,通俗易懂 ...
最新文章
- xgboost 正则项_XGBoost入门系列第一讲
- 画一个空心圆_用SolidWorks画一个空心挂钩,这种画法稍微有点麻烦
- ios编译与android编译区别是什么,为iOS和Android编译C ++代码(XCode)。 这是真的吗?...
- php读取文件和读取redis,PHP结合redis实现大文件去重
- u盘往linux考文件过大,U盘拷贝时提示文件过大怎么办,教您如何解决
- 使用ama0实现串口通信_“ AMA”是什么意思,以及如何使用它?
- java程序员的发展之路和职业规划
- C# Winform 窗体美化(十、自定义窗体)
- ajax juey,锋利的qjuey-ajax
- 1003 Emergency
- oracle添加路由,创建持久性(静态)路由
- 通用技术和信息技术合格考知识点_通用技术学考复习_重要知识点汇总
- 详解c语言main函数、printf函数、scanf函数与va家族
- 校园网登录界面打不开,远程计算机或设备不接受链连接
- Composing Programs 2.3 Sequence - 02
- C# 2010 激活码
- 【简洁实用】好用的杀毒软件 【网络安全防护】
- 这家创业公司,为什么会在云栖大会上被反复提及?
- Java pcm/wav文件转mp3(流的方式)
- [示例代码] UG CAM 二次开发创建新的加工坐标系MCS方法,并设置新加工坐标系的位置到当前WCS工作坐标系
热门文章
- 2022-2027年中国行车记录仪行业市场全景评估及发展战略规划报告
- 《花开半夏》--7 谢幕(2)
- ZF2 Session简单使用(Zend\Authentication\Storage\Session.php)
- 计算机主机启动不了系统安装系统安装软件,开不了机怎么用u盘重装系统
- 重装Windows系统教程(U盘制作+重装系统)
- 在线Html转义/反转义工具
- 【科技百咖】曾经的网络安全少帅,今天的移动拓客达人
- 使用html和css做一个美食详情页
- 【行研资料】2021全球媒体发展趋势报告(英文).PDF——附下载
- 【完美解决】解决 不允许粘贴复制的问题