我是靠谱客的博主 单薄哈密瓜,这篇文章主要介绍QT 实现excel表格的读取,并处理时间格式的数据,现在分享给大家,希望可以做个参考。

最近的一个需求是从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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部