最近的一个需求是从excel表格中读取数据,进行比较。怕时间长忘记这部分代码,先记录下。
Excel表格数据如下:
要获取时间、lat、lon数据,代码如下:
void FileHandle::handleExcel()
{
/* 1:连接控件Excel
2: 打开工作簿(新建或打开Excel文件)
3: 打开sheet
4: 获取行数,列数
5: 读和写
6:设置样式
7: 保存文件
8:另存为*/
//1:连接控件Excel
QAxObject excel("Excel.Application");//连接Excel控件
excel.setProperty("Visible", false);// 不显示窗体
excel.setProperty("DisplayAlerts", false); // 不显示任何警告信息。如果为true, 那么关闭时会出现类似"文件已修改,是否保存"的提示
//2: 打开工作簿(新建或打开Excel文件)
QAxObject* workbooks = excel.querySubObject("WorkBooks"); // 获取工作簿集合
//2.2打开
QAxObject* workbook = workbooks->querySubObject("Open(const QString&)", ("E:/QTCode/2G201012.xlsx"));
//3: 打开sheet
QAxObject* worksheet = workbook->querySubObject("WorkSheets(int)", 1); // 获取工作表集合的工作表1, 即sheet1
//4: 获取行数,列数
QAxObject* usedrange = worksheet->querySubObject("UsedRange"); // sheet范围
int intRowStart = usedrange->property("Row").toInt(); // 起始行数 为1
//int intColStart = usedrange->property("Column").toInt(); // 起始列数 为1
QAxObject *rows, *columns;
rows = usedrange->querySubObject("Rows"); // 行
columns = usedrange->querySubObject("Columns"); // 列
int intRow = rows->property("Count").toInt(); // 行数
//int intCol = columns->property("Count").toInt(); // 列数
// 5.1读取单元格方式1
for(int i=intRowStart;i<intRow+intRowStart;i++)
{
//获取时间
QAxObject* cellTime = worksheet->querySubObject("Cells(int, int)", i, 3); //获单元格值
QString time= cellTime->dynamicCall("text").toString();
QString hour=time.mid(0,2);
QString minute=time.mid(3,2);
QString second=time.mid(6,2);
//首字符的0的替换
if(hour.startsWith("0"))
{
hour=hour.remove(0,1);
//hour=temp.trimmed();
}
else if(minute.startsWith("0"))
{
minute=minute.remove(0,1);
}
else if(second.startsWith("0"))
{
second=second.remove(0,1);
}
unsigned secondsExcel=hour.toUInt()*3600+minute.toUInt()*60+second.toUInt();
//获取纬度
QAxObject* cellLat= worksheet->querySubObject("Cells(int, int)", i, 4);
//获单元格值
double Lat= cellLat->dynamicCall("Value2()").toDouble();
QAxObject* cellLon= worksheet->querySubObject("Cells(int, int)", i, 5);
//获单元格值
double Lon= cellLon->dynamicCall("Value2()").toDouble();
latLonUTCexcel.UTCExcelToSeconds=secondsExcel;
latLonUTCexcel.gpslatExcel=Lat;
latLonUTCexcel.gpslonExcel=Lon;
//存储同一时刻的UTC秒、经纬度
LatLonTimeExcel.append(latLonUTCexcel);
}
}
注意:
1.获取的时间问题, QString time= cellTime->dynamicCall("text").toString(); dynamicCall()中要写成”text”,不然读出来的时间是0.584944这种类似的小数问题。
最后
以上就是单薄哈密瓜最近收集整理的关于QT 实现excel表格的读取,并处理时间格式的数据的全部内容,更多相关QT内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复