Qt 解析EXcel文件
写代码需要将excel中的文件导入到数据库中
网上找到以为大神写的,但是当初没有保存,也没有找到
我几乎是原分不动拔下来的,希望大神莫怪
void AddDialog::readExcel(QString url)
{
QAxObject excel("Excel.Application");
excel.setProperty("Visible",true);
QAxObject *work_books = excel.querySubObject("WorkBooks");
work_books->dynamicCall("Open (const QString&)",QString(url));
QVariant title_value = excel.property("Caption"); //获取标题信息
// qDebug()<<"读取Excel标题为:"<<title_value;
QAxObject *work_book = excel.querySubObject("ActiveWorkBook");
QAxObject *work_sheets = work_book->querySubObject("Sheets"); //Sheets也可以换用WorkSheets
int sheet_count = work_sheets->property("Count").toInt(); //获取工作表数目
// qDebug()<<"当前工作表数目为:"<<sheet_count;
exceltip = new Excel(this);
for(int k=1;k<=sheet_count;k++)
{
QAxObject *work_sheet = work_book->querySubObject("Sheets(int)",k); //Sheets(int)也可以用Worksheets(int)
QString work_sheet_name = work_sheet->property("Name").toString(); //获取工作表名称
QString message = QString("Sheet")+QString::number(k,10)+QString("name");
// qDebug()<<message<<work_sheet_name;
if(sheet_count>0)
{
QAxObject *work_sheet = work_book->querySubObject("Sheets(int)",k);
QAxObject *used_range = work_sheet->querySubObject("UsedRange");
QAxObject *rows = used_range->querySubObject("Rows");
// QAxObject *columns = used_range->querySubObject("Columns");
int row_start = used_range->property("Row").toInt(); //获取起始行
int columns_start = used_range->property("Column").toInt(); //获取起始列
int row_count = rows->property("Count").toInt(); //获取行数
// int column_count = columns->property("Count").toInt(); //获取列数
exceltip->show();
ui->pushButton_Cancle->setEnabled(false);
ui->pushButton_close->setEnabled(false);
ui->pushButton_save->setEnabled(false);
ui->pushButton_Excel->setEnabled(false);
ui->pushButton_update->setEnabled(false);
exceltip->setcount(row_count-1,work_sheet_name);
for(int i=row_start+1;i<=row_count;i++)
{
/***********************************
* 数据解析函数函数
* 将Excel中的数据分条取出
* 的别值得注意的是
* 由于数据主码是一当前时间为主码
* 所以要调用延时函数延时1秒
* 防止数据主码相同为数据加载失败
****************************************************************************************************************/
QAxObject *cell[13];
QVariant cell_value[13]; cell[0] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+0);
cell_value[0] = cell[0]->property("Value"); //获取单元格内容 cell[1] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+1);
cell_value[1] = cell[1]->property("Value"); cell[2] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+2);
cell_value[2] = cell[2]->property("Value"); cell[3] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+3);
cell_value[3] = cell[3]->property("Value"); cell[4] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+4);
cell_value[4] = cell[4]->property("Value"); cell[5] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+5);
cell_value[5] = cell[5]->property("Value"); cell[6] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+6);
cell_value[6] = cell[6]->property("Value"); cell[7] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+7);
cell_value[7] = cell[7]->property("Value"); cell[8] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+8);
cell_value[8] = cell[8]->property("Value"); cell[9] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+9);
cell_value[9] = cell[9]->property("Value"); cell[10] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+10);
cell_value[10] = cell[10]->property("Value"); cell[11] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+11);
cell_value[11] = cell[11]->property("Value"); cell[12] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+12);
cell_value[12] = cell[12]->property("Value"); datasave->CRETM = gettimetss();
datasave->pro_name = cell_value[0].toString();
datasave->PSTM = cell_value[1].toString();
datasave->PETM = cell_value[2].toString();
datasave->Par_name = cell_value[3].toString();
datasave->PARSTM = cell_value[4].toString();
datasave->PARETM = cell_value[5].toString();
datasave->Sta_name = cell_value[6].toString();
datasave->STASTM = cell_value[7].toString();
datasave->STAETM = cell_value[8].toString();
datasave->INFOR = cell_value[9].toString();
datasave->DELTM = cell_value[10].toString();
datasave->REASION = cell_value[11].toString();
datasave->FINTM = cell_value[12].toString();
QString sql_insert = "insert into project values('";
sql_insert +=datasave->pro_name;
sql_insert +="','";
sql_insert +=datasave->PSTM;
sql_insert +="','";
sql_insert +=datasave->PETM;
sql_insert +="','";
sql_insert +=datasave->Par_name;
sql_insert +="','";
sql_insert +=datasave->PARSTM;
sql_insert +="','";
sql_insert +=datasave->PARETM;
sql_insert +="','";
sql_insert +=datasave->Sta_name;
sql_insert +="','";
sql_insert +=datasave->STASTM;
sql_insert +="','";
sql_insert +=datasave->STAETM;
sql_insert +="','";
sql_insert +=datasave->INFOR;
sql_insert +="','";
sql_insert +=datasave->FINTM;
sql_insert +="','";
sql_insert +=datasave->DELTM;
sql_insert +="','";
sql_insert +=datasave->REASION;
sql_insert +="','";
sql_insert +=datasave->CRETM;
sql_insert +="')";
QSqlQuery insert_data(*projectdb);
insert_data.exec(sql_insert);
// qDebug()<<sql_insert;
emit sys_data();
exceltip->setnumber(i);
delaymsec(10);
/****************************************************************************************************************/
}
}
}
exceltip->setfinish(true);
if(exceltip->exec() == QDialog::Accepted)
{
ui->pushButton_Cancle->setEnabled(true);
ui->pushButton_close->setEnabled(true);
ui->pushButton_save->setEnabled(true);
ui->pushButton_Excel->setEnabled(true);
ui->pushButton_update->setEnabled(true);
getname();
}
} /*******************************************************************************/ void AddDialog::on_pushButton_Excel_clicked() //打开一个Excel文件,完了要调用Excel解析函数
{
QString filename = QFileDialog::getOpenFileName(this);
if(!filename.isEmpty())
{
readExcel(filename);
}
}
//自定义延时函数 //无阻塞延时函数
void AddDialog::delaymsec(int msec)
{
QTime dieTime = QTime::currentTime().addMSecs(msec);
while (QTime::currentTime()<dieTime)
{
QCoreApplication::processEvents(QEventLoop::AllEvents,100);
}
}
Qt 解析EXcel文件的更多相关文章
- Java:JXL解析Excel文件
项目中,有需求要使用JXL解析Excel文件. 解析Excel文件 我们先要将文件转化为数据流inputStream. 当inputStream很大的时候 会造成Java虚拟器内存不够 抛出内存溢出 ...
- c++ 读取并解析excel文件方法
用Cocos开发模型特效工具编辑器,跨Mac和windows,当中有个需求是读取并解析excel文件,但网上的查找的例子几乎都只能是在windows下面使用,再或者是命令行脚本之类的.于是,自己写了一 ...
- 解析Excel文件并把数据存入数据库
前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致 ...
- Java通过jxl解析Excel文件入库,及日期格式处理方式 (附源代码)
JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03 xls格式的Excel. 本文是项目中用到的一个实例,先通过上传xls文件(包含日期),再通过jxl进行读取上传 ...
- Jxl创建Excel文件和解析Excel文件
import java.io.File; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; im ...
- nodejs 解析excel文件
app.js: var FileUpload = require('express-fileupload') app.use(FileUpload()); service.js: npm instal ...
- vue下载和上传excle数据文件,解析excel文件数据并存在数据库中
下载: VUE: window.open("xxxx/downloadOldTaskDataFile.do_", "_blank"); JAVA: /** * ...
- 【Java】使用Apache POI生成和解析Excel文件
概述 Excel是我们平时工作中比较常用的用于存储二维表数据的,JAVA也可以直接对Excel进行操作,分别有jxl和poi,2种方式. HSSF is the POI Project's pure ...
- poi解析Excel文件版本问题
poi解析Excel文件时有两种格式: HSSFWorkbook格式用来解析Excel2003(xls)的文件 XSSFWorkbook格式用来解析Excel2007(xlsx)的文件 如果用HSSF ...
随机推荐
- 如何选择PHP项目的开发方案?
我说的项目开发方案并不是谈论到底用不用PHP去开发的问题,而是当你遇到一个项目,已经决定了用PHP,然后才来看的问题:用PHP的什么开发方案. 基本上有这么几种方案.各有各的说法,良莠不齐,我就谈谈我 ...
- Mybatis 和Spring整合之原始dao开发
F:\Aziliao\mybatis\代码\31.mybatis与spring整合-开发原始dao 1.1. SqlMapConfig.xml <?xml version="1.0&q ...
- [转]解決 IE10 瀏覽器無法使用 ASP.NET 表單驗證登入的問題
今天凌晨在客戶端上線,當程式佈署到正式機後發現我們的網站唯獨只有 IE10 瀏覽器無法成功登入,任何其他瀏覽器版本或使用較低的 IE 版本都可以正常登入,使用 IE 相容性檢視也都可以正常登入,想說會 ...
- HTML5——前端预处理技术(Less、Sass、CoffeeScript)
一.Less 1.1.概要 Less是一种动态样式语言,Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展. Less 将 C ...
- 高并发Web服务的演变——节约系统内存和CPU
节约系统内存和CPU http://www.csdn.net/article/2015-02-12/2823952 Web系统大规模并发——电商秒杀与抢购 http://www.csdn.net/ar ...
- LeetCode28.实现strStr() JavaScript
实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...
- 浅谈async函数await用法
今天状态不太好,睡久了懵一天. 以前只是了解过async函数,并还没有很熟练的运用过,所以先开个坑吧,以后再结合实际来更新下,可能说的有些问题希望大家指出. async和await相信大家应该不陌生, ...
- 关于c++随机种子srand( time(NULL) )的设置问题
设置随机种子srand( time(NULL) ) ,在程序中只需要设置一次就好,而且不能被调用多次,直接看列子. a:每次都重新设置随机种子 #include<iostream> #in ...
- 基于jquery,ajax请求及自我终止的函数封装。
场景描述: 在我们平时的开发过程中,经常会遇到这样的情况.在搜索功能中进行模糊搜索或者联想关联. 这就要我们每次对输入框中的数据进行改动时,都要发送一次请求.当在短时间内多次操作改动时,问题就出现了. ...
- 获取地图的信息到input里
在最近项目中,我接触了百度地图的API写法,对其中的代码有了一点兴趣,所以我在完成任务后,在办公室里学习了百度地图的相关引用,并申请了服务秘钥: E7PCho0sv3FdzmjC901ttP0HrS9 ...