基于Qt实现Excel数据的提取

近期在进行数据处理时遇到这样一个问题,将CAD格式的测井曲线进行矢量化后只能使用List输出,经尝试这也是目前仅有最快捷的方法。List出数据后粘贴到Excel中,比较让人烦恼的有两点:一是CAD List出的数据由“于端点”+“X=”+“Y=”+“Z=”组成;二是List复制粘贴时仅能复制一屏幕内容,因此粘贴的数据中间会出现“按ENTER键继续”这一行。请大家看图片。

今天查阅网上文章,发现Qt可以对Excel数据进行处理,因此使用Qt进行读取Excel并对其进行处理。

(1)Qt读取Excel代码

QAxObject excel("Excel.Application");//连接Excel控件
    excel.setProperty("Visible", false);// 不显示窗体
    excel.setProperty("DisplayAlerts", false);  // 不显示任何警告信息。如果为true, 那么关闭时会出现类似"文件已修改,是否保存"的提示
    QAxObject* workbooks = excel.querySubObject("WorkBooks"); // 获取工作簿集合
    QString shotFile = ui.lineEdit->text();
    QAxObject* workbook = workbooks->querySubObject("Open(const QString&)", (shotFile));//"C:/Users/Administrator/Desktop/excelread/B203.xlsx"
    QAxObject* worksheet = workbook->querySubObject("WorkSheets(int)", 1); // 获取工作表集合的工作表1, 即sheet1
    //获取行数,列数
    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();  // 列数

(2)现在问题来了,读取Excel成功了,可是如何实现对上述格式数据进行分裂并跳过中文字符串?

查阅相关文献后发现,Qt的正则表达式可以提取字符串中的数字(浮点型和整型均可)!!!

//Qt正则表达式提取字符串的数字并存储//
    QAxObject* cell ;
    QString aa;
    QRegExp rx("\\d+\\.\\d+|(\\d+)");    
    for(int j=intColStart;j<1+intColStart;j++)
    {
        for(int i=intRowStart;i<intRow+intRowStart;i++)
        {
            cell = worksheet->querySubObject("Cells(int, int)", i, j);  //获单元格值
            aa=cell->dynamicCall("Value2()").toString();
            int pos = 0;
            int writedata=0;
            while ((pos = rx.indexIn(aa, pos)) != -1)//从指定位置循环查找
            {
                float xx=rx.cap().toFloat();
                pos += rx.matchedLength();//累加匹配的长度,便于下次查找
                fprintf(fp1,"%16.6f",xx);
                writedata=1;
            }
            if(writedata==1)
                fprintf(fp1,"\n");
            else
                continue;
        }
    }
    fclose(fp1);

自此,完成了上述Excel格式数据的提取工作。转换成果如图所示。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一种跨平台的应用程序框架,可以让开发者轻松创建各种类型的软件。Qt提供了许多功能强大的类和库,其中包括读取Excel数据的功能。 读取Excel数据的方法包括使用Qt自带的QAxObject类或使用第三方库QXlsx。QAxObject是Qt中的ActiveX对象类,可以通过使用调用COM接口来操作Excel;而QXlsx是基于QtExcel文件读写库,使用简单,支持Excel 2007及以上版本。 使用QAxObject读取Excel数据需要先创建一个Excel程序对象,然后打开需要读取Excel文件,再打开指定的工作簿,并获取需要的数据。代码示例如下: ```cpp QAxObject excel("Excel.Application", 0); excel.setProperty("Visible", false); QAxObject *workbooks = excel.querySubObject("Workbooks"); QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", "path/to/file.xlsx"); QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1); QVariant var = worksheet->querySubObject("Cells(int, int)", 1, 1)->dynamicCall("Value"); qDebug() << var.toString(); worksheet->dynamicCall("Activate()"); workbook->dynamicCall("Save()"); workbook->dynamicCall("Close()"); excel.dynamicCall("Quit()"); ``` 使用QXlsx读取Excel数据需要先从文件中读取工作簿,再从工作簿中获取需要的数据。代码示例如下: ```cpp QXlsx::Document xlsx("path/to/file.xlsx"); int value = xlsx.read("A1").toInt(); qDebug() << value; double value2 = xlsx.read(1, 2).toDouble(); qDebug() << value2; ``` 无论使用哪种方法,读取Excel数据需要根据实际情况进行调整和优化。开发者可以根据需要使用Qt的其他类和库来进行数据处理和后续操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值