Qt读取数据保存到excel里面

发布于:2023-04-27 ⋅ 阅读:(553) ⋅ 点赞:(0)

Qt从bin或者txt里读取数据并导入到excel里

代码如下

 void MainWindow::OpenImg2()
{

    QString fileName=NULL;

    for (int i = 0; i < str_path_list.size(); i++)
    {
            QString str_path = str_path_list[i];
            file_list.append(str_path);
    }

    foreach(QString name , file_list)
    {

      qDebug() << name;
      QFile f(name);
      if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
      {
          qDebug()<< "Open failed." << endl;

      }

      QTextStream txtInput(&f);

      int numK= 0;
      int numK2=0;
      QList<QVariant> allRowData,allRowData2,allRowData3,allRowData4;
      while (!txtInput.atEnd())
       {

        numK++;//读取行数
        QString  d = QString::number(numK);
        QStringList D;
        D.append(d);
        allRowData3.append(QVariant(D));//原始数据序号

        QString lineStr;
        QStringList linedata;
        lineStr = txtInput.readLine(); //读取一行
        lineStr.insert(17,"*").insert(20,":").insert(13,"/").insert(16,"/");
        qDebug()<<lineStr;
        //lineStr.replace("*","*'");
        linedata = lineStr.split("*"); //根据空格来分成多个数据
        allRowData.append(QVariant(linedata)); //保存所有行数据
        QString first=linedata.at(0) ;
        double m=first.toDouble();

        threshold=ui->lineEdit->text();
        thresholdValue=threshold.toDouble();
        if(thresholdValue!=0&&m>thresholdValue)
        {
         numK2++;
         allRowData2.append(QVariant(linedata));

         QString  s = QString::number(numK2);
         QStringList S;
         S.append(s);
         allRowData4.append(QVariant(S));//报警数据序号

        }
       }
     

      QAxWidget *excel = NULL;                        //一定要是QAxWidget 本例中,excel设定为Excel文件的操作对象
      QAxObject *workbooks = NULL;
      QAxObject *workbook = NULL;                     //Excel操作对象
      excel = new QAxWidget("Excel.Application");     //连接Excel控件
      excel->dynamicCall("SetVisible(bool)", false);  //true 表示操作文件时可见,false表示为不可见
      excel->setProperty("DisplayAlerts", false);     //excel的对话弹窗关闭
      workbooks = excel->querySubObject("WorkBooks"); //获取工作簿集合

      fileName = name.remove(".txt") + ".xlsx";
      fileName.replace("/", "\\");
      workbooks->dynamicCall("Add");//新建一个工作簿
      workbook = excel->querySubObject("ActiveWorkBook");     //获取当前工作簿
      //如果有excel 就不用这一步创建了 //51是xlsx,csv是6;56表示创建的文件格式为xls
      workbook->dynamicCall("SaveAs (const QString&,int,const QString&,const QString&,bool,bool)",
                                                                fileName, 51, QString(""), QString(""), false, false);

      workbook = workbooks->querySubObject("Open(const QString &)", fileName); //打开
      QAxObject * worksheets = workbook->querySubObject("WorkSheets"); // 获取打开的excel文件中所有的工作sheet
      QAxObject * worksheet = worksheets->querySubObject("Item(int)", 1);//本例获取第一个,最后参数填





      //获取单元格
      QAxObject *cell=NULL;
      QAxObject *cell2=NULL;
      QAxObject *range=NULL;
      QAxObject *range2=NULL;

    /*  QString asd = "A2:B" + QString::number(numK+1);
      QString asd2 ="A2:B" + QString::number(numK2+1);*/

      cell = worksheet->querySubObject("Cells(int, int)", 1, 1);
      cell->dynamicCall("SetValue(const QVariant&)", QVariant("序号"));
      cell = worksheet->querySubObject("Cells(int, int)", 1, 2);
      cell->dynamicCall("SetValue(const QVariant&)", QVariant("测量值"));
      cell = worksheet->querySubObject("Cells(int, int)", 1, 3);
      cell->dynamicCall("SetValue(const QVariant&)", QVariant("日期"));
      cell = worksheet->querySubObject("Cells(int, int)", 1, 4);
      cell->dynamicCall("SetValue(const QVariant&)", QVariant("时间"));
      range=worksheet->querySubObject("Range(const QString&)","C1:C1");
      range->setProperty("ColumnWidth",14);
      range = worksheet->querySubObject("Range(const QString)", "A2:A" + QString::number(numK+1));
      range->dynamicCall("SetValue(const QVariant&)", QVariant(allRowData3));
      range = worksheet->querySubObject("Range(const QString)", "B2:D" + QString::number(numK+1));
      range->dynamicCall("SetValue(const QVariant&)", QVariant(allRowData));
      worksheet->setProperty("Name","原始数据");



      worksheets->querySubObject("Add(QVariant)", worksheet->asVariant());
      QAxObject * worksheet2 = worksheets->querySubObject("Item(int)", 1);
      cell2 = worksheet2->querySubObject("Cells(int, int)", 1, 1);
      cell2->dynamicCall("SetValue(const QVariant&)", QVariant("序号"));
      cell2 = worksheet2->querySubObject("Cells(int, int)", 1, 2);
      cell2->dynamicCall("SetValue(const QVariant&)", QVariant("测量值"));
      cell2 = worksheet2->querySubObject("Cells(int, int)", 1, 3);
      cell2->dynamicCall("SetValue(const QVariant&)", QVariant("日期"));
      cell2 = worksheet2->querySubObject("Cells(int, int)", 1, 4);
      cell2->dynamicCall("SetValue(const QVariant&)", QVariant("时间"));
      range2=worksheet2->querySubObject("Range(const QString&)","C1:C1");
      range2->setProperty("ColumnWidth",14);
      range2 = worksheet2->querySubObject("Range(const QString)", "A2:A" + QString::number(numK2+1));
      range2->dynamicCall("SetValue(const QVariant&)", QVariant(allRowData4));
      range2 = worksheet2->querySubObject("Range(const QString)", "B2:D" + QString::number(numK2+1));
      range2->dynamicCall("SetValue(const QVariant&)", QVariant(allRowData2));
      worksheet2->setProperty("Name","报警数据");

      delete range;
      delete range2;


      workbook->dynamicCall("Save()");
      workbook->dynamicCall("Close()");
      excel->dynamicCall("Quit()");
      if (excel)
      {
         delete excel;
         excel = NULL;
      }


    }
    QFile excelfile(fileName);
    if (excelfile.exists())
    {
    QDesktopServices::openUrl(QUrl::fromLocalFile(fileName));
    }
}
//鼠标触碰散列点显示
void MainWindow::slotPointHoverd(const QPointF &point, bool state)
{
    if (state) {

        m_valueLabel->setText(QString::asprintf("%.3f\n",point.y())+axisX2[int(point.x())]);

        QPoint curPos = mapFromGlobal(QCursor::pos());
        m_valueLabel->move(curPos.x() - m_valueLabel->width() / 2, curPos.y() - m_valueLabel->height());//移动数值

        m_valueLabel->show();//显示出来
    }
    else{
        m_valueLabel->hide();//进行
    }
}

在这里插入图片描述

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看