Qt导出数据到EXCEL的两种方式
一、导出到csv格式,这种格式不用安装office
QString DModel::exportDataToCSV(QString lx)
{QString dtStr="d:/"+lx+"DbToExcel"+QDateTime::currentDateTime().toString("yyyyMMddHHmmss")+".csv";//以下是保存csvQFile file;file.setFileName(dtStr);if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){qDebug()<<"open file fail";return "";}QTextStream out(&file); //创建一个文本流,向保存文件中写入文本//写表头out<<tr("编号")<<",";out<<tr("摄像头名称")<<",";out<<tr("检测点名称")<<",";out<<tr("通道")<<",";out<<tr("直")<<",";out<<tr("左")<<",";out<<tr("右")<<",";out<<tr("时间")<<",";out<<tr("计数")<<",";out<<tr("速度")<<",";out<<tr("车道占有率")<<",";out<<"\n";//设置内容for(int i=0;i<m_map.count();++i){QMap<QString,QVariant> temp=m_map[i];out<<temp["Id"].toString()<<",";out<<temp["cameraName"].toString()<<",";out<<temp["checkPointName"].toString()<<",";out<<temp["channelId"].toString()<<",";out<<temp["containStraight"].toString()<<",";out<<temp["containLeft"].toString()<<",";out<<temp["containRight"].toString()<<",";out<<temp["countTime"].toString()+"\t"<<",";out<<temp["todayCount"].toString()<<",";out<<temp["averageSpeed"].toString()<<",";out<<temp["timeShare"].toString()<<",";out<<"\n";}file.close();return dtStr;
}
二、导出到excel格式,这种格式必须安装office,否则崩溃
QString DModel::exportData(QString lx)
{//流程://1.新建一个excel//2.增加1个Worksheet//3.向Excel单元格中写入数据//4.保存Excel//5.释放Excel//注意事项:使用此功能时,每次都用新建文件的方式,否则会崩溃,即把原有文件删除,新建QString dtStr="d:/"+lx+"DbToExcel"+QDateTime::currentDateTime().toString("yyyyMMddHHmmss")+".xlsx";newExcel(dtStr);// appendSheet("车检数据",1);//新建数据的步骤://1、标题//2、内容//设置标题setCellValue(1,1,"编号");setCellValue(1,2,"摄像头名称");setCellValue(1,3,"检测点名称");setCellValue(1,4,"通道");setCellValue(1,5,"直");setCellValue(1,6,"左");setCellValue(1,7,"右");setCellValue(1,8,"时间");setCellValue(1,9,"计数");setCellValue(1,10,"速度");setCellValue(1,11,"车道占有率");//设置内容for(int i=0;i<m_map.count();++i){QMap<QString,QVariant> temp=m_map[i];setCellValue(i+2,1,temp["Id"].toString());setCellValue(i+2,2,temp["cameraName"].toString());setCellValue(i+2,3,temp["checkPointName"].toString());setCellValue(i+2,4,temp["channelId"].toString());setCellValue(i+2,5,temp["containStraight"].toString());setCellValue(i+2,6,temp["containLeft"].toString());setCellValue(i+2,7,temp["containRight"].toString());setCellValue(i+2,8,temp["countTime"].toString());setCellValue(i+2,9,temp["todayCount"].toString());setCellValue(i+2,10,temp["averageSpeed"].toString());setCellValue(i+2,11,temp["timeShare"].toString());
// std::cout<<temp["Id"].toString().toStdString()<<temp["countTime"].toString().toStdString()<<std::endl;}saveExcel(dtStr);freeExcel();return dtStr;
}
void DModel::newExcel(const QString &fileName)
{pApplication = new QAxObject();pApplication->setControl("Excel.Application");//连接Excel控件pApplication->dynamicCall("SetVisible(bool)", false);//false不显示窗体pApplication->setProperty("DisplayAlerts", false);//不显示任何警告信息。pWorkBooks = pApplication->querySubObject("Workbooks");QFile file(fileName);file.remove();
// if (file.exists())
// {// pWorkBook = pWorkBooks->querySubObject("Open(const QString &)", fileName);
// }
// else
// {pWorkBooks->dynamicCall("Add");//新建一个工作簿,如果不新建会崩溃pWorkBook = pApplication->querySubObject("ActiveWorkBook");//获取当前工作簿
// }pSheets = pWorkBook->querySubObject("Sheets");//获取所有工作表sheetpSheet = pSheets->querySubObject("Item(int)", 1);//获取第一个工作表sheet,从1开始
}
void DModel::appendSheet(const QString &sheetName,int cnt)
{QAxObject *pLastSheet = pSheets->querySubObject("Item(int)", cnt);pSheets->querySubObject("Add(QVariant)", pLastSheet->asVariant());pSheet = pSheets->querySubObject("Item(int)", cnt);pLastSheet->dynamicCall("Move(QVariant)", pSheet->asVariant());pSheet->setProperty("Name", sheetName);
}
void DModel::setCellValue(int row, int column, const QString &value)
{ if(column!=8){QAxObject *pRange = pSheet->querySubObject("Cells(int,int)", row, column);pRange->dynamicCall("Value", value);}else{QAxObject *pRange = pSheet->querySubObject("Cells(int,int)", row, column);pRange->dynamicCall("NumberFormatLocal","yyyy-mm-dd HH::mm:ss");//当为日期时间型数据时,按此格式设置pRange->dynamicCall("Value", value);}
}
void DModel::saveExcel(const QString &fileName)
{pWorkBook->dynamicCall("SaveAs(const QString &)", QDir::toNativeSeparators(fileName));
}
void DModel::freeExcel()
{if (pApplication != NULL){pApplication->dynamicCall("Quit()");delete pApplication;pApplication = NULL;}
}
秋风写于淄博,业务联系与技术交流:q375172665
Qt导出数据到EXCEL的两种方式相关推荐
- Qt导出数据到excel
Qt导出数据到excel Qt导出数据到excel,方法有很多,Qt里也有自带的axcontainer模块中的#include<QAxObject>类可以导出数据到excel,但是这种方法 ...
- [转]导出数据到Excel的几种方法
[转]导出数据到Excel的几种方法 [转]C#导出到EXCEL [原] http://community.csdn.net/Expert/topic/4570/4570895.xml?tem ...
- [转]asp.net导出数据到Excel的三种方法
原文出处:asp.net导出数据到Excel的几种方法(1/3) .asp.net导出数据到Excel的几种方法(2/3).asp.net导出数据到Excel的几种方法(3/3) asp.net导出到 ...
- java 导出excel教程,[Java教程]导出大量数据到Excel的一种方式
[Java教程]导出大量数据到Excel的一种方式 0 2012-07-09 17:00:11 在Java Web开发中,经常需要导出大量的数据到Excel,使用POI.JXL直接生成Excel,很容 ...
- java操作Excel有两种方式 方式1:jxl操作Excel jxl的API
java操作Excel有两种方式 方式1:jxl操作Excel 方式2:poi操作Excel 下面介绍jxl API: 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用 ...
- DLL中导出函数的声明有两种方式
本文引用自:VC编程时DLL中导出函数的声明有两种方式 一种方式是:在函数声明中加上__declspec(dllexport): 另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链 ...
- excel下载两种方式(axios和window.open)
excel下载两种方式 1 第一种 调用window.openmethods:{getDown() {window.open(baseUrl+ "/report/data_excel?cur ...
- 数据归一化处理的两种方式
数据归一化处理的两种方式 import pandas as pd import numpy as np test_data = pd.DataFrame([[1,1,1],[2,2,2],[3,3,3 ...
- jsp页面数据加载的两种方式
JSP数据加载的两种方式 第一种: 三层架构写在controller的页面跳转前面,set到request域中 request.setAttribute("name", list) ...
最新文章
- [机器学习] Coursera ML笔记 - 逻辑回归(Logistic Regression)
- Using Preferences(Beginning Android)
- wordpress 首页调用文章 不同样式的方法
- 10 个 GitHub 上超火和超好看的管理后台模版,后台管理项目有着落了
- php提交飞信,php发送飞信消息
- java 调用python_Java平台如何调用Python平台?
- 仿新浪微博滚动,无文字渐显功能
- phpStrom编辑器常用功能教程
- JavaScript应用(重点数组)
- javascript 中的深复制 和 其实现方法
- 【游戏】基于matlab GUI音乐时钟设计【含Matlab源码 1104期】
- 计算机键盘和实验原理图,独立键盘的检测原理及程序实现方法
- 同步软件UltraCompare 64位 软件及注册机
- Spring学习总结01--Spring了解,IOC,DI
- 各个认证记录及说明SRRC与CTA认证
- PS进阶篇——如何PS软件给公司单位图片加版权水印(六)
- Visionpro棋盘格校正
- 中国地理知识大全 中国地理知识集锦
- 用“番茄工作法”克服拖延症
- Arduino uno控制蜂鸣器播放音乐(以《大鱼》为例)
热门文章
- ctr多少正常_亚马逊点击率多少算正常?如何提升亚马逊CTR
- 因为相信所以看见,既然看见注定坚信《16》
- JavaScript:JavaScript特效
- 小米扫地机器人 贴膜_智能家居 篇一:小米扫地机器人
- 宝藏级UI组件库:FirstUI,微信小程序版+uniapp版双版至V1.5.0,完美支持vue3
- report_template
- Word文字添加内容覆盖后续内容解决办法
- 摄影构图_摄影中的构图是什么?
- 三菱PLC编程软件GX works3安装步骤教程【巨详细】附安装包
- DDR,GDDR,LPDDR,QDR...谈谈现在主流的内存