excel 操作

发布于:2025-04-16 ⋅ 阅读:(17) ⋅ 点赞:(0)
//xlsxexportor.h



#ifndef XLSXEXPORTOR_H
#define XLSXEXPORTOR_H

#include <QWidget>
#include "QXlsx/header/xlsxdocument.h"
#include "QDebug"
#include "qaxobject.h"
#include "qjsonobject.h"

namespace Ui {
class XlsxExportor;
}

class XlsxExportor : public QWidget
{
    Q_OBJECT

public:
    explicit XlsxExportor(QWidget *parent = nullptr);
    ~XlsxExportor();
    void init_date_time_edit(void);
    void get_already_params(void);
    QList<QStringList> get_record_msg( QString startDate,QString stopDate );
    void set_ui_controls(qint16 pageNo);   //
    void initListView(void);
    void get_docs_to_fill(QDate start_time,QDate stopTime);
    void get_docs_to_fill(QString sampleUnit);
    void initial(void);
    QJsonObject get_experment_params(void);
    void printExcel(QString path);
    void launchWpsWithPrintPreview( QString excelFilePath);
    void bringExcelToFront(QAxObject *excel);
    void setExcelBoreds(QAxObject* bordersRange);
    void closeExcel() ;

public slots:
    void export_test_table(QStringList tableHeadInfo,QList<QStringList> recordToExport);

    void set_ui_on_top(bool flag);

    void calculate_reses(QString temperatureVal,QString id,QList<QStringList>dtas);

    QStringList caculate_permeability(QStringList caculParams);

    QJsonObject get_efficient_params(void);

    QStringList caculate_permeability_t20(float currentTemper,float efficientT);

    void on_sig_is_experment_run(bool runOrNot);

    void fill_other_report_params(QStringList params);

    void fill_form_complete(QString id,QString timeStr);
    void make_report(void);
    void slot_set_res(QString id,QList<QStringList> recordToExport);

signals:
     void sig_print_excel_finish(void);
     void sig_is_experment_run(void);
     void sig_dta_is_ready(QString id);

private slots:
    void on_pushButton_4_clicked();
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_5_clicked();



private:
    Ui::XlsxExportor *ui;
public:
    QList<QStringList> resCaculatedForExp;   //23al; log; coefficientT; coefficient20;ratio; usedtime;starttime;stoptime;starthead;stophead;temperature;



};

#endif // XLSXEXPORTOR_H

//xlsxexportor.cpp 
#include "xlsxexportor.h"
#include "ui_xlsxexportor.h"
#include "const_def.h"
#include "util.h"
#include "dbmanager.h"
#include "QXlsx/header/xlsxcellrange.h"
#include "qdesktopservices.h"
#include "qprinter.h"
#include "qprintdialog.h"
#include "QTableWidget"
#include "qpainter.h"
#include "qaxobject.h"
#include "qsplashscreen.h"
#include "qprocess.h"
#include "QtTest/qtest.h"
#include <windows.h>
#include "qmath.h"

XlsxExportor::XlsxExportor(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::XlsxExportor)
{
    ui->setupUi(this);
//    this->setWindowFlags(QWidget::windowFlags() | Qt::WindowStaysOnTopHint);
    this->setWindowFlags(QWidget::windowFlags() &~Qt::WindowMinMaxButtonsHint);
    this->setWindowTitle(QString("报表文件信息"));
    this->setFixedSize(1186,392);
    set_ui_controls(0);
    init_date_time_edit();

    initListView();
//    initial();

}

XlsxExportor::~XlsxExportor()
{
    delete ui;
}



void XlsxExportor::slot_set_res(QString id,QList<QStringList> recordToExport)
{
resCaculatedForExp=recordToExport;

//fill_form_complete(id,recordToExport);
//make_report();
emit sig_dta_is_ready(id);
}

void XlsxExportor::fill_other_report_params(QStringList params)
{

    if(params.count()<8){
        qDebug()<<__FUNCTION__<<"user message is not enough!";
        return ;
    }
    ui->lineEdit_1->setText(params.at(1));    //工程名称
    ui->lineEdit_4->setText(params.at(5));   //表号
    ui->lineEdit_5->setText(params.at(3));         //土样编号
    ui->lineEdit_7->setText(params.at(2));       //孔隙比
    ui->lineEdit_8->setText(params.at(7));     //试验者(计算)
    ui->lineEdit_11->setText(params.at(4));    //土样说明
    ui->lineEdit_12->setText(params.at(6));   //核校者

    QDateTime tmpDateTime=QDateTime::fromString(params.at(8),"yyyy-MM-dd hh:mm:ss");
    QString timeStr=tmpDateTime.toString("yyyy-MM-dd-hh-mm-ss");

    QString reportName = QString("%1-%3-%2").arg(params.at(0)).arg(timeStr).arg(params.at(1));
    ui->lineEdit_13->setText(reportName);   //报表名
//qDebug()<<__FUNCTION__<<params<<reportName<<"glmhh";

}

void XlsxExportor::fill_form_complete(QString id,QString timeStr)
{

    QString paramFName= QString("expermentparam%1.json").arg(id.trimmed());
    QString paramsStr=QDir::currentPath()+"/data/device/"+paramFName;

    //QJsonObject tmpObj;

    QJsonObject expParams=Util::get_json_root_obj(paramsStr);

    ui->lineEdit_2->setText(timeStr);
    ui->lineEdit_3->setText(expParams.value("areaA").toString());
    ui->lineEdit_6->setText(expParams.value("pipearea").toString());
    ui->lineEdit_10->setText(expParams.value("earthlength").toString());
    ui->lineEdit_9->setText(id.trimmed());

}

void XlsxExportor::make_report(void)
{
on_pushButton_4_clicked();
on_pushButton_3_clicked();
}

void XlsxExportor::calculate_reses(QString temperatureVal,QString id,QList<QStringList> dtas)
{
        int resNum=0;
        QDateTime startTime=QDateTime::fromString(dtas.at(0).at(3),"yyyy-MM-dd hh:mm:ss");
        QDateTime stopTime=QDateTime::fromString(dtas.at(dtas.count()-1).at(3),"yyyy-MM-dd hh:mm:ss");

//        long secsByPass=stopTime.secsTo(startTime);

        //resNum=secsByPass/(RESINTERVAL*60);
        //int restNums=secsByPass%(RESINTERVAL*60);
        //if(restNums!=0&&resNum==0)resNum=1;

        //int resIndexInterval=dtas.count()/resNum;

        //QList<int> resParamIndex

        QList<QStringList> resParams;

//        if(secsByPass<=RESINTERVAL*60){
//            resParams.append(dtas.at(0));
//            resParams.append(dtas.at(dtas.count()-1));
//        }
//        else
//        {

//        }

        QString paramsStr1=QDir::currentPath()+EXPERMENTPARAMS;
        //QJsonObject tmpObj;

        QJsonObject expParams1=Util::get_json_root_obj(paramsStr1);

        int j=0;
        resParams.append(dtas.at(0));
        for(int i=1;i<dtas.count();++i){           
                if(QDateTime::fromString(resParams.at(j).at(3),"yyyy-MM-dd hh:mm:ss").secsTo(QDateTime::fromString(dtas.at(i).at(3),"yyyy-MM-dd hh:mm:ss"))>=expParams1.value("readinterval").toString().toInt()){
                    j++;
                    resParams.append(dtas.at(i));
                }
                else if(i==dtas.count()-1){
                    resParams.append(dtas.at(i));
                }
        }

        QString paramFName= QString("expermentparam%1.json").arg(id.trimmed());
        QString paramsStr=QDir::currentPath()+"/data/device/"+paramFName;

        //QJsonObject tmpObj;

        QJsonObject expParams=Util::get_json_root_obj(paramsStr);

        QList<QStringList> resCaculated;

        //pressureObject=expParams.value("density").toString().toFloat()*expParams.value("g").toString().toFloat()*expParams.value("waterlevelh").toString().toFloat()/100000;
        //warterDropObject=expParams.value("density").toString().toFloat()*expParams.value("g").toString().toFloat()*expParams.value("waterlevell").toString().toFloat()/100000;
            emit_gas_flag=expParams.value("emitgasnum").toString().toInt();
        //emitgasobject=warterDropObject;

        //waterHLevel=expParams.value("waterlevelh").toString().toFloat();
        //waterLLevel=expParams.value("waterlevell").toString().toFloat();
        //pipeArea=expParams.value("pipearea").toString().toFloat();
        //sampleLength=expParams.value("earthlength").toString().toFloat();
        //sampleA=expParams.value("areaA").toString().toFloat();
        //wash_time=expParams.value("washtime").toString().toInt();
        //wash_time_delay=WASHDELAY; //expParams.value("washtimedelay").toString().toInt();



        for(int i=0;i<resParams.count();i++){
        if(i>0){
            int waterdropusedtime=QDateTime::fromString(resParams.at(i-1).at(3),"yyyy-MM-dd hh:mm:ss").secsTo(QDateTime::fromString(resParams.at(i).at(3),"yyyy-MM-dd hh:mm:ss"));
             QStringList caculatedReses=caculate_permeability(QStringList()<<resParams.at(i-1).at(2)<<resParams.at(i).at(2)<<expParams.value("pipearea").toString()<<expParams.value("earthlength").toString()<<expParams.value("areaA").toString()
                                  <<QString::number(waterdropusedtime));

            QStringList coefficient20=caculate_permeability_t20(temperatureVal.trimmed().toFloat(),caculatedReses.at(caculatedReses.count()-1).toFloat());
            caculatedReses.append(coefficient20);
            caculatedReses.append(QString::number(waterdropusedtime));
            caculatedReses.append(resParams.at(i-1).at(3));
            caculatedReses.append(resParams.at(i).at(3));
            caculatedReses.append(QString::number(resParams.at(i-1).at(2).toFloat()*100,'f',2));
            caculatedReses.append(QString::number(resParams.at(i).at(2).toFloat()*100,'f',2));
            caculatedReses.append(temperatureVal);
            resCaculated.append(caculatedReses);
//23al; log; coefficientT; coefficient20;ratio; usedtime;starttime;stoptime;starthead;stophead;temperature;
        }
        }

        resCaculatedForExp=resCaculated;

        ui->lineEdit_2->setText(dtas.at(0).at(3));
        ui->lineEdit_3->setText(expParams.value("areaA").toString());
        ui->lineEdit_6->setText(expParams.value("pipearea").toString());
        ui->lineEdit_10->setText(expParams.value("earthlength").toString());
        ui->lineEdit_9->setText(id.trimmed());

}

QStringList XlsxExportor::caculate_permeability_t20(float currentTemper,float efficientT)
{
    qDebug()<<__FUNCTION__;

    QJsonObject tmpObj = get_efficient_params();

    QStringList tmpList;
    if(tmpObj.isEmpty()||efficientT==-1){
        qDebug()<<__FUNCTION__<<QString("error: param is empty!");
        return tmpList;
    }

    int lastNumOfTemper=(int)(currentTemper*10)%10;
    float roundRes=0;
    if(currentTemper<5){
        roundRes=5;
    }
    else if(currentTemper>35){
        roundRes=35;
    }
    else if(currentTemper<23){
        if(lastNumOfTemper<2.5)
        {
            roundRes=qFloor(currentTemper);

        }
        else if(lastNumOfTemper<=7.5)
        {
//            int test=qFloor(currentTemper);
            roundRes=qFloor(currentTemper)+0.5;
        }
        else {
            roundRes=qCeil(currentTemper);
        }
    }
    else
    {
        if(lastNumOfTemper<5)
        {
            roundRes=qFloor(currentTemper);

        }
        else {
            roundRes=qCeil(currentTemper);
        }
    }

    float tmpTemper=roundRes;

    float  coefficientT=0;
    for(int i=0;i<tmpObj.count();++i){

        if(tmpObj.value(QString::number(i+1)).toString().split("-").at(1).toFloat()==tmpTemper){
            coefficientT=tmpObj.value(QString::number(i+1)).toString().split("-").at(3).toFloat();

            break;
        }
    }

    float cofficient20=-1;
    cofficient20=efficientT*coefficientT;
    qDebug()<<__FUNCTION__<<cofficient20<<efficientT<<coefficientT;
    return QStringList()<<QString::number(cofficient20)<<QString::number(coefficientT);

}

QJsonObject XlsxExportor::get_efficient_params(void)
{
    qDebug()<<__FUNCTION__;
    QString efficients=QDir::currentPath()+ COEFFICIENTS ;

    QJsonObject tmpEfficients;
    QFileInfo tmpFil1(efficients);
    if(tmpFil1.exists()){

        tmpEfficients=Util::get_json_root_obj(efficients);
    }

    return tmpEfficients;

}

QStringList XlsxExportor::caculate_permeability(QStringList caculParams)
{
    QStringList result;
    if(caculParams.isEmpty())result ;
    float waterHLevelPro,waterLLevelPro;
    waterHLevelPro=caculParams.at(0).toFloat()*100;
    waterLLevelPro=caculParams.at(1).toFloat()*100;
//    expermentOutPut.insert("RealWaterH",QString::number(waterHLevelPro*100));
//    expermentOutPut.insert("RealWaterL",QString::number(waterLLevelPro*100));
     float res=0;
     float num1,num2,num3,num4,num5,num6;
     num1=2.3*caculParams.at(2).toFloat()*caculParams.at(3).toFloat()*qLn((float)waterHLevelPro/waterLLevelPro);
     num2=caculParams.at(4).toFloat()*caculParams.at(5).toFloat()*qLn(10);

     num3=2.3*caculParams.at(2).toFloat()*caculParams.at(3).toFloat();
     num4=caculParams.at(4).toFloat()*caculParams.at(5).toFloat();
     num5=qLn((float)waterHLevelPro/waterLLevelPro)/qLn(10);
     num6=num3/num4;

     result.append(QString::number(num6));    //23al
     result.append(QString::number(num5));   //log
     if(num2<=0){
        result.append(QString("-1"));
        return result;
     }
     res=num1/num2;
//     qDebug()<<__FUNCTION__<<res<<num1<<num2<<pipeArea<<sampleLength<<waterHLevelPro<<waterLLevelPro<<qLn(waterHLevelPro/waterLLevelPro)<<waterDropUsedTime;
     result.append(QString::number(res));
     return result;
}
void XlsxExportor::closeExcel()
{
    QProcess *process = new QProcess();
    QString program = "taskkill";
    QStringList arguments;
    arguments << "/F" << "/IM" << "EXCEL.EXE";
    process->start(program, arguments);
    if (process->waitForFinished()) {
        qDebug() << "Excel has been closed.";
    } else {
        qDebug() << "Failed to close Excel.";
    }
    delete process;
}

void XlsxExportor::setExcelBoreds(QAxObject* bordersRange)
{
    //区域内部水平框线
    QAxObject* borders_inside_hor = bordersRange->querySubObject("Borders(xlInsideHorizontal)");
    //区域内部垂直框线
    QAxObject* borders_inside_ver = bordersRange->querySubObject("Borders(xlInsideVertical)");
    //左边框线
    QAxObject* borders_left = bordersRange->querySubObject("Borders(xlEdgeLeft)");
    //右边框线
    QAxObject* borders_right = bordersRange->querySubObject("Borders(xlEdgeRight)");
    //顶边框线
    QAxObject* borders_top = bordersRange->querySubObject("Borders(xlEdgeTop)");
    //下边框线
    QAxObject* borders_bottom = bordersRange->querySubObject("Borders(xlEdgeBottom)");

    QList<QAxObject*>  border_list = {borders_left, borders_right, borders_top, borders_bottom};
    for (auto& one : border_list) {
        one->setProperty("Color", QColor(0, 0, 0));//设置颜色
        one->setProperty("LineStyle",1);//设置线型实线
        one->setProperty("Weight",2);//设置宽度
        one->setProperty("ColorIndex",1);
    }
}
void XlsxExportor::export_test_table(QStringList tableHeadInfo,QList<QStringList> recordToExport)
{
//qDebug()<<__FUNCTION__<<recordToExport<<tableHeadInfo;
    closeExcel();
    QString tmpXlsPath=QDir::currentPath()+QString(TESTTABLE)+"/"+tableHeadInfo.at(12)+".xlsx";//"-"+QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss")+".xlsx";

                    QFile tmpFile(tmpXlsPath);
                 if(tmpFile.exists()){
                     tmpFile.remove();
                 }
        QFile::copy(QDir::currentPath()+EXCELTEMPLATE,tmpXlsPath);
    QAxObject *excel=NULL;
    excel = new QAxObject("Excel.Application");
    if(!excel){
     QMessageBox::warning(this,"警告","Excel未安装,请安装Excel!","确定");
     return ;
    }

//    excel->setProperty("DisplayAlerts",false);

    excel->dynamicCall("Quit()");

        excel->setProperty("Visible", true);

        QAxObject *workbooks = excel->querySubObject("Workbooks");
        workbooks->dynamicCall("Open (const QString&)", tmpXlsPath);
                QAxObject *workbook = excel->querySubObject("ActiveWorkBook");
                QAxObject *sheets = workbook->querySubObject("Sheets");
                QAxObject *sheet = sheets->querySubObject("Item(int)", 1);


                QAxObject *range15 = sheet->querySubObject("Range(const QString&)", QString("B2"));
                range15->dynamicCall("SetValue(const QVariant&)", tableHeadInfo.at(0));

                QAxObject *range16 = sheet->querySubObject("Range(const QString&)", QString("G2"));
                QStringList timeStr3=tableHeadInfo.at(1).split(" ");
                QString tmpStr3;
                tmpStr3=timeStr3.at(0)+QString("-")+timeStr3.at(1);
                range16->dynamicCall("SetValue(const QVariant&)", tmpStr3);

                QAxObject *range17 = sheet->querySubObject("Range(const QString&)", QString("M2"));
                range17->dynamicCall("SetValue(const QVariant&)", tableHeadInfo.at(3));

                QAxObject *range18 = sheet->querySubObject("Range(const QString&)", QString("B3"));
                range18->dynamicCall("SetValue(const QVariant&)", tableHeadInfo.at(4));

                QAxObject *range19 = sheet->querySubObject("Range(const QString&)", QString("G3"));
                range19->dynamicCall("SetValue(const QVariant&)", tableHeadInfo.at(5));

                QAxObject *range20 = sheet->querySubObject("Range(const QString&)", QString("J3"));
                range20->dynamicCall("SetValue(const QVariant&)", tableHeadInfo.at(6));

                QAxObject *range21 = sheet->querySubObject("Range(const QString&)", QString("M3"));
                range21->dynamicCall("SetValue(const QVariant&)", tableHeadInfo.at(7));

                QAxObject *range22 = sheet->querySubObject("Range(const QString&)", QString("B4"));
                range22->dynamicCall("SetValue(const QVariant&)", tableHeadInfo.at(8));

                QAxObject *range23 = sheet->querySubObject("Range(const QString&)", QString("G4"));
                range23->dynamicCall("SetValue(const QVariant&)", tableHeadInfo.at(9));

                QAxObject *range24 = sheet->querySubObject("Range(const QString&)", QString("J4"));
                range24->dynamicCall("SetValue(const QVariant&)", tableHeadInfo.at(10));

                QAxObject *range25 = sheet->querySubObject("Range(const QString&)", QString("M4"));
                range25->dynamicCall("SetValue(const QVariant&)", tableHeadInfo.at(11));

                QAxObject *range26 = sheet->querySubObject("Range(const QString&)", QString("J2"));
                range26->dynamicCall("SetValue(const QVariant&)", tableHeadInfo.at(2));

                float tmpListForAver=0;
                for(int i=0;i<recordToExport.count();++i){
                   QAxObject *range = sheet->querySubObject("Range(const QString&)", QString("A%1").arg(8+i));
                   QStringList timeStr1=recordToExport.at(i).at(6).split(" ");
                   QString tmpStr1;
                   tmpStr1=timeStr1.at(0)+QString("\n")+timeStr1.at(1);
                   range->dynamicCall("SetValue(const QVariant&)", tmpStr1);
                   setExcelBoreds(range);

                   QAxObject *range1 = sheet->querySubObject("Range(const QString&)", QString("B%1").arg(8+i));
                   QStringList timeStr2=recordToExport.at(i).at(7).split(" ");
                   QString tmpStr2;
                   tmpStr2=timeStr2.at(0)+QString("\n")+timeStr2.at(1);
                   range1->dynamicCall("SetValue(const QVariant&)", tmpStr2);
                   setExcelBoreds(range1);

                   QStringList tmpTime=Util::secondsToHMS(recordToExport.at(i).at(5).toFloat());
                   QAxObject *range2 = sheet->querySubObject("Range(const QString&)", QString("C%1").arg(8+i));
                   range2->dynamicCall("SetValue(const QVariant&)", tmpTime.at(0));
                   setExcelBoreds(range2);
                   QAxObject *range3 = sheet->querySubObject("Range(const QString&)", QString("D%1").arg(8+i));
                   range3->dynamicCall("SetValue(const QVariant&)", tmpTime.at(1));
                   setExcelBoreds(range3);

                   QAxObject *range4 = sheet->querySubObject("Range(const QString&)", QString("E%1").arg(8+i));
                   range4->dynamicCall("SetValue(const QVariant&)", recordToExport.at(i).at(8));
                   setExcelBoreds(range4);

                   QAxObject *range5 = sheet->querySubObject("Range(const QString&)", QString("F%1").arg(8+i));
                   range5->dynamicCall("SetValue(const QVariant&)", recordToExport.at(i).at(9));
                   setExcelBoreds(range5);

                   QAxObject *range6 = sheet->querySubObject("Range(const QString&)", QString("G%1").arg(8+i));
                   range6->dynamicCall("SetValue(const QVariant&)", QString::number(recordToExport.at(i).at(0).toFloat(),'E',3));
                   setExcelBoreds(range6);

                   QAxObject *range7 = sheet->querySubObject("Range(const QString&)", QString("H%1").arg(8+i));
                   range7->dynamicCall("SetValue(const QVariant&)", QString::number(recordToExport.at(i).at(1).toFloat(),'E',3));
                   setExcelBoreds(range7);

                   QAxObject *range8 = sheet->querySubObject("Range(const QString&)", QString("I%1").arg(8+i));
                   range8->dynamicCall("SetValue(const QVariant&)", QString::number(recordToExport.at(i).at(2).toFloat(),'E',3));
                   setExcelBoreds(range8);

                   QAxObject *range9 = sheet->querySubObject("Range(const QString&)", QString("J%1").arg(8+i));
                   range9->dynamicCall("SetValue(const QVariant&)", recordToExport.at(i).at(10));
                   setExcelBoreds(range9);

                   QAxObject *range10 = sheet->querySubObject("Range(const QString&)", QString("K%1").arg(8+i));
                   range10->dynamicCall("SetValue(const QVariant&)", recordToExport.at(i).at(4));
                   setExcelBoreds(range10);

                   QAxObject *range11 = sheet->querySubObject("Range(const QString&)", QString("L%1").arg(8+i));
                   if(recordToExport.count()>5){
                       if(i>recordToExport.count()-5-1)
                           tmpListForAver+=recordToExport.at(i).at(3).toFloat();
                   }
                   else{
                       if(i==recordToExport.count()-1)
                           tmpListForAver+=recordToExport.at(i).at(3).toFloat();
                   }
                   range11->dynamicCall("SetValue(const QVariant&)", QString::number(recordToExport.at(i).at(3).toFloat(),'E',3));
                   setExcelBoreds(range11);

                   QAxObject *range12 = sheet->querySubObject("Range(const QString&)", QString("M%1").arg(8+i));
//                   range12->dynamicCall("SetValue(const QVariant&)", QString("=AVERAGE(L8:L%1)").arg(8+i));
                   float averValue=0;
                   if(recordToExport.count()>5){
                       if(i>recordToExport.count()-5-1){
                            averValue = tmpListForAver/(i-recordToExport.count()+5+1);
                            range12->dynamicCall("SetValue(const QVariant&)", QString::number(averValue,'E',3));
                            setExcelBoreds(range12);

                       }
                       else{

                           range12->dynamicCall("SetValue(const QVariant&)", "");
                           setExcelBoreds(range12);
                       }
                   }
                   else{
                       if(i==recordToExport.count()-1){
                           averValue+=tmpListForAver;
                           range12->dynamicCall("SetValue(const QVariant&)", QString::number(averValue,'E',3));
                           setExcelBoreds(range12);
                       }
                       else{

                           range12->dynamicCall("SetValue(const QVariant&)", "");
                           setExcelBoreds(range12);
                       }

                   }


                   QAxObject *range13 = sheet->querySubObject("Range(const QString&)", QString("N%1").arg(8+i));
                   range13->dynamicCall("SetValue(const QVariant&)", "");
                   setExcelBoreds(range13);
                }



//                QFile tmpFile(tmpXlsPath);
//             if(tmpFile.exists()){
//                 tmpFile.remove();
//             }
                   // 保存 Excel 文件

                   workbook->dynamicCall("Save",true);

                //关闭excel
                   if (excel != NULL)
                   {
                       excel->dynamicCall("Quit()");
                       delete excel;
                       excel = NULL;
                   }

//   打开对应的文件并显示于excell中
    QString local_path=tmpXlsPath;

    QString path=local_path;
    bool isOpen=QDesktopServices::openUrl(QUrl("file:"+path,QUrl::TolerantMode));    //完成后打开报表
    qDebug()<<__FUNCTION__<<isOpen<<path<<tmpXlsPath;
}

void XlsxExportor::on_pushButton_4_clicked()
{


//    QStringList headeInfo;

//    QLineEdit *tmpLineEdit;

//   for(int i=0;i<13;++i){
//        tmpLineEdit=window()->findChild<QLineEdit *>(QString("lineEdit_%1").arg(i+1));
//        if(tmpLineEdit->text()==""){
//            QMessageBox::warning(this,QString("警告"),QString("输入不能为空!"),QString("确定"));
//            return ;
//        }

//        if(i==12&&tmpLineEdit->text().contains('-')){
//            QMessageBox::warning(this,QString("警告"),QString("输入错误,请排除 '-'"),QString("确定"));
//            return;
//        }

//        headeInfo.append(tmpLineEdit->text());
//   }



//if(ui->dateTimeEdit_start->dateTime()>ui->dateTimeEdit_stop->dateTime()){
//     QMessageBox::warning(this,QString("警告"),QString("开始时间大于结束时间,请做修改!"),QString("确定"));
//     return;
//}

//headeInfo.append(ui->dateTimeEdit_start->dateTime().toString("yyyy-MM-dd hh:mm:ss"));
//headeInfo.append(ui->dateTimeEdit_stop->dateTime().toString("yyyy-MM-dd hh:mm:ss"));

//QList<QStringList> recordMsg=get_record_msg(ui->dateTimeEdit_start->dateTime().toString("yyyy-MM-dd hh:mm:ss"),ui->dateTimeEdit_stop->dateTime().toString("yyyy-MM-dd hh:mm:ss"));

//if(recordMsg.isEmpty()){
//    QMessageBox::warning(this,QString("警告"),QString("查询数据为空,无法导出,请正确填写日期时间后重试!"),QString("确定"));

//    return;
//}
//export_test_table(headeInfo,recordMsg);

//this->close();

        QStringList headeInfo;

        QLineEdit *tmpLineEdit;

       for(int i=0;i<13;++i){
            tmpLineEdit=window()->findChild<QLineEdit *>(QString("lineEdit_%1").arg(i+1));
            if(tmpLineEdit->text()==""){
                QMessageBox::warning(this,QString("警告"),QString("输入不能为空!"),QString("确定"));
                return ;
            }

//            if(i==12&&tmpLineEdit->text().contains('-')){
//                QMessageBox::warning(this,QString("警告"),QString("输入错误,请排除 '-'"),QString("确定"));
//                return;
//            }

            headeInfo.append(tmpLineEdit->text());
       }
qDebug()<<__FUNCTION__<<headeInfo<<"glmhh";


//    if(ui->dateTimeEdit_start->dateTime()>ui->dateTimeEdit_stop->dateTime()){
//         QMessageBox::warning(this,QString("警告"),QString("开始时间大于结束时间,请做修改!"),QString("确定"));
//         return;
//    }

//    headeInfo.append(ui->dateTimeEdit_start->dateTime().toString("yyyy-MM-dd hh:mm:ss"));
//    headeInfo.append(ui->dateTimeEdit_stop->dateTime().toString("yyyy-MM-dd hh:mm:ss"));

//    QList<QStringList> recordMsg=get_record_msg(ui->dateTimeEdit_start->dateTime().toString("yyyy-MM-dd hh:mm:ss"),ui->dateTimeEdit_stop->dateTime().toString("yyyy-MM-dd hh:mm:ss"));

//    if(recordMsg.isEmpty()){
//        QMessageBox::warning(this,QString("警告"),QString("查询数据为空,无法导出,请正确填写日期时间后重试!"),QString("确定"));

//        return;
//    }
    export_test_table(headeInfo,resCaculatedForExp);

    this->close();
}

QJsonObject XlsxExportor::get_experment_params(void)
{
    QJsonObject expParams;
    QString paramsStr=QDir::currentPath()+EXPERMENTPARAMS;
    QJsonObject tmpObj;
    if(!QFileInfo(paramsStr).exists())
    {
        QMessageBox::warning(this,QString("警告"),QString("没有配置文件,请先在参数设置中设置参数!"),QString("确定"));

        return expParams;
    }

    expParams=Util::get_json_root_obj(paramsStr);
//    pressureObject=expParams.value("density").toString().toFloat()*expParams.value("g").toString().toFloat()*expParams.value("waterlevelh").toString().toFloat()/1000;
//    warterDropObject=expParams.value("density").toString().toFloat()*expParams.value("g").toString().toFloat()*expParams.value("waterlevell").toString().toFloat()/1000;
    emit_gas_flag=expParams.value("emitgasnum").toString().toInt();
//    emitgasobject=warterDropObject;

//    waterHLevel=expParams.value("waterlevelh").toString().toFloat();
//    waterLLevel=expParams.value("waterlevell").toString().toFloat();
//    pipeArea=expParams.value("pipearea").toString().toFloat();
//    sampleLength=expParams.value("earthlength").toString().toFloat();
//    sampleA=expParams.value("areaA").toString().toFloat();

    return expParams;
}

void XlsxExportor::init_date_time_edit(void)
{

    QDateTime tmpDate=QDateTime::currentDateTime();
    ui->dateEdit_start->setDisplayFormat("yyyy-MM-dd");
    ui->dateEdit_start->setDateTime(tmpDate);
    ui->dateEdit_start->setCalendarPopup(true);
    ui->dateEdit_stop->setDisplayFormat("yyyy-MM-dd");
    ui->dateEdit_stop->setDateTime(tmpDate);
    ui->dateEdit_stop->setCalendarPopup(true);
}

void XlsxExportor::get_already_params(void)
{
    QString paramsStr=QDir::currentPath()+EXPERMENTPARAMS;
    QJsonObject tmpObj;
    if(!QFileInfo(paramsStr).exists())return;

    tmpObj=Util::get_json_root_obj(paramsStr);

//    ui->lineEdit->setText(tmpObj.value("density").toString());
//    ui->lineEdit_2->setText(tmpObj.value("g").toString());
//    ui->lineEdit_3->setText(tmpObj.value("waterlevelh").toString());
//    ui->lineEdit_4->setText(tmpObj.value("waterlevell").toString());
//    ui->lineEdit_5->setText(tmpObj.value("emitgasnum").toString());
    ui->lineEdit_6->setText(tmpObj.value("pipearea").toString());
    ui->lineEdit_10->setText(tmpObj.value("earthlength").toString());
    ui->lineEdit_3->setText(tmpObj.value("areaA").toString());
}

QList<QStringList> XlsxExportor::get_record_msg( QString startDate,QString stopDate )
{
    qDebug()<<__FUNCTION__<<startDate<<stopDate;
    QString db_tablename = DBManager::GetInstance()->get_db_tablename( experment_record );
    QList<QString> coulmnname;
    coulmnname.append( DBManager::GetInstance()->get_db_column( db_tablename ) );

    QList<QStringList> result;

    if( coulmnname.count() == EXPERMENT_RECORD )
    {
//        startDate=startDate+QString(" 00:00:00");
//        stopDate=stopDate+QString(" 23:59:59");
        QString sqlWhere = QString("where %1 between '%2' and '%3'").arg(coulmnname.at(8)).arg(startDate).arg(stopDate);

        DBManager::GetInstance()->select_datas(db_tablename, "select", result, sqlWhere);
    }
    return result;
}

void XlsxExportor::set_ui_controls(qint16 pageNo)
{
 qDebug()<<__FUNCTION__<<pageNo;

if(pageNo==0){
    ui->stackedWidget->setCurrentIndex(pageNo);
ui->pushButton_3->hide();
ui->radioButton->hide();
ui->radioButton_2->hide();
ui->lineEdit->hide();

ui->label_13->setVisible(true);
ui->label_14->setVisible(true);
ui->dateEdit_start->setVisible(true);
ui->dateEdit_stop->setVisible(true);
ui->radioButton->setChecked(true);
}
else if(pageNo==1){
    ui->stackedWidget->setCurrentIndex(pageNo);
    ui->pushButton_3->setVisible(true);

    ui->radioButton->setVisible(true);
    ui->radioButton_2->setVisible(true);
    ui->lineEdit->setVisible(true);
    ui->label_13->setVisible(true);
    ui->label_14->setVisible(true);
    ui->dateEdit_start->setVisible(true);
    ui->dateEdit_stop->setVisible(true);
}
else if(pageNo==2){
    ui->stackedWidget->setCurrentIndex(0);
    ui->label_13->hide();
    ui->label_14->hide();
    ui->dateEdit_start->hide();
    ui->dateEdit_stop->hide();

    ui->pushButton_3->setVisible(false);
    ui->radioButton->setVisible(false);
    ui->radioButton_2->setVisible(false);
    ui->lineEdit->setVisible(false);

}

}

void XlsxExportor::initListView(void)
{
    QListView *listView = ui->listView;
    QStandardItemModel * model = new QStandardItemModel( listView );
    model->setHorizontalHeaderLabels( QStringList()<<"文件名" );
    listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    listView->setModel( model );
    QDate stop_time=ui->dateEdit_stop->date();
    QDate start_time=stop_time.addDays(-7);
    ui->dateEdit_start->setDate(start_time);
    get_docs_to_fill(start_time,stop_time);


}

void XlsxExportor::on_pushButton_clicked()
{
    if(ui->listView->currentIndex().row()==-1)
    {
        QMessageBox::warning(this,QString("警告"),QString("未选中,请重试!"),QString("确定"));
        return ;
    }
 QStandardItemModel * model =(QStandardItemModel *)ui->listView->model();
// ui->listView->currentIndex();
// qDebug()<<__FUNCTION__<<ui->listView->currentIndex()<<model->data(ui->listView->currentIndex(),Qt::DisplayRole);
 //打开对应的文件并显示于excell中
  QString local_path=QDir::currentPath()+QString(TESTTABLE)+"/"+model->data(ui->listView->currentIndex(),Qt::DisplayRole).toString();
 qDebug()<<__FUNCTIONW__<<local_path;
  QString path=local_path;
  bool isOpen=QDesktopServices::openUrl(QUrl("file:"+path,QUrl::TolerantMode));    //完成后打开报表
  this->close();
}

void XlsxExportor::get_docs_to_fill(QDate start_time,QDate stopTime)
{

    if(start_time>stopTime){
        QMessageBox::warning(this,"警告","开始时间不能超过结束时间!","确定");
        return ;
    }
qDebug()<<__FUNCTION__<<start_time<<stopTime;
    QStandardItemModel * model =(QStandardItemModel *)ui->listView->model();

    model->removeRows(0,model->rowCount());

    QString tmpXlsPath=QDir::currentPath()+QString(TESTTABLE);
    QDir testFormDocs(tmpXlsPath);
    QFileInfoList filNameList=testFormDocs.entryInfoList(QStringList()<<"*.xlsx");
    QFileInfoList filNameList1;
    QStringList tmpStrList;

     QStandardItem *tmpItem;
    for(QFileInfo it:filNameList){
        tmpStrList=it.fileName().split("\\");
        QDate tmpDatetime;
        QString tmpStr1=tmpStrList.last();
        QString tmpStrUtil = tmpStr1;
        QStringList tmpList2 = tmpStr1.split("-");
        tmpList2.removeFirst();
        tmpList2.removeFirst();
        tmpStr1=tmpList2.join("-");
        tmpStr1.chop(14);
        tmpDatetime=QDate::fromString(tmpStr1,"yyyy-MM-dd");
        qDebug()<<__FUNCTION__<<tmpDatetime<<tmpStr1<<tmpStrList.last();
       if(tmpDatetime>=start_time&&tmpDatetime<=stopTime)
       {
            qDebug()<<__FUNCTION__<<tmpDatetime;
           tmpItem=new QStandardItem(tmpStrUtil);
           model->appendRow(tmpItem);
       }
    }

    qDebug()<<__FUNCTION__<<filNameList;

}

void XlsxExportor::get_docs_to_fill(QString sampleUnit)
{

    qDebug()<<__FUNCTION__<<sampleUnit;
    QStandardItemModel * model =(QStandardItemModel *)ui->listView->model();

    model->removeRows(0,model->rowCount());

    QString tmpXlsPath=QDir::currentPath()+QString(TESTTABLE);
    QDir testFormDocs(tmpXlsPath);
    QFileInfoList filNameList=testFormDocs.entryInfoList(QStringList()<<"*.xlsx");
    QFileInfoList filNameList1;
    QStringList tmpStrList;

     QStandardItem *tmpItem;
    for(QFileInfo it:filNameList){
        tmpStrList=it.fileName().split("\\");
//        qDebug()<<it.fileName()<<it.filePath();

       if(tmpStrList.last().contains(sampleUnit))
       {
            qDebug()<<__FUNCTION__<<tmpStrList;
           tmpItem=new QStandardItem(tmpStrList.last());
           model->appendRow(tmpItem);
       }
    }

    qDebug()<<__FUNCTION__<<filNameList;

}

void XlsxExportor::on_pushButton_2_clicked()
{
    get_docs_to_fill(ui->dateEdit_start->date(),QDate::currentDate());
}


void XlsxExportor::on_pushButton_3_clicked()
{
    if(ui->radioButton->isChecked())
        get_docs_to_fill(ui->dateEdit_start->date(),ui->dateEdit_stop->date());
    else if(ui->radioButton_2->isChecked()){
        if(ui->lineEdit->text()==""){
            QMessageBox::warning(this,"警告","输入为空,请重新输入!","确定");
            return;
        }

        get_docs_to_fill(ui->lineEdit->text());
    }
}


void XlsxExportor::initial(void)
{
    QJsonObject tmpParams = get_experment_params();
    if(!tmpParams.isEmpty()){
         ui->lineEdit_3->setText(tmpParams.value("areaA").toString());
         ui->lineEdit_6->setText(tmpParams.value("pipearea").toString());
         ui->lineEdit_10->setText(tmpParams.value("earthlength").toString());
    }

}
void XlsxExportor::launchWpsWithPrintPreview( QString excelFilePath) {
    qDebug()<<__FUNCTION__<<excelFilePath;
    // 构建启动WPS Office并打开Excel文件的命令
    QString wpsCommand = QString("C:/Program Files (x86)/Kingsoft Office Software/WPS Office/ksolaunch.exe") + " " + excelFilePath;

    // 构建WPS Office中打开打印预览的命令
    QString printPreviewCommand = QString("C:/Program Files (x86)/Kingsoft Office Software/WPS Office/11.1.0.12165/office6/wpp.exe") + " /p " + excelFilePath;

    // 启动WPS Office打开Excel文件
    QProcess::startDetached(wpsCommand);

    // 启动WPS Office打印预览
//    QProcess::startDetached(printPreviewCommand);
}
void XlsxExportor::bringExcelToFront(QAxObject *excel) {
    // 确保Excel已经被初始化并打开
    if (excel) {
        qDebug()<<__FUNCTION__;
        // 使用AppActivate方法激活Excel应用程序
        excel->dynamicCall("AppActivate(const QString&)", QApplication::applicationName());

        // 等待一会儿以让Excel窗口能够激活

//        QTest::qSleep(500);

//        // 发送Ctrl + F11键到键盘,这会切换到最前端
//        QTest::keyClick(QApplication::focusWidget(), Qt::Key_F11, Qt::ControlModifier);
    }
}

void XlsxExportor::printExcel(QString path)
{
qDebug()<<__FUNCTION__;


QAxObject *excel=NULL;
excel = new QAxObject("Excel.Application");
if(!excel){
 QMessageBox::warning(this,"警告","Excel未安装,请安装Excel!","确定");
 return ;
}

    excel->setProperty("Visible", true);

    QAxObject *workbooks = excel->querySubObject("Workbooks");
    workbooks->dynamicCall("Open (const QString&)", path);
            QAxObject *workbook = excel->querySubObject("ActiveWorkBook");
            QAxObject *sheets = workbook->querySubObject("Sheets");
            QAxObject *sheet = sheets->querySubObject("Item(int)", 1);



            int i=10;
            while (i>0) {
                i--;
                HWND hWnd = NULL;
                QString excelName=  excel->dynamicCall("Caption").toString();
                std::wstring wStr=excelName.toStdWString();
                hWnd = ::FindWindow(NULL, wStr.c_str()); // 替换为你要查找的应用程序标题
                if (hWnd) {
                    // 成功找到窗口句柄
                    qDebug()<<__FUNCTION__<<"excel"<<"ok";
                    SetForegroundWindow(hWnd);
                                        break;
                } else {
                    // 未找到窗口句柄
                    qDebug()<<__FUNCTION__<<"excel"<<"nok";
                }
                qDebug()<<__FUNCTION__<<"excel"<<i;
            }

            // 打开打印预览
            sheet->dynamicCall("PrintPreview(bool)", true);
//            sheet->dynamicCall("PrintOut");
            workbook->dynamicCall("Close(bool)",false);//关闭工作簿
//            myProcess->kill();

            //关闭excel
               if (excel != NULL)
               {
                   excel->dynamicCall("Quit()");
                   delete excel;
                   excel = NULL;
               }
          emit sig_print_excel_finish();
}

void XlsxExportor::on_sig_is_experment_run(bool runOrNot)
{
   if(runOrNot){
       QMessageBox::warning(this,QString("警告"),QString("试验正在运行,禁止该项操作!"),QString("确定"));
       return ;
   }

   if(ui->listView->currentIndex().row()==-1)
   {
       QMessageBox::warning(this,QString("警告"),QString("未选中,请重试!"),QString("确定"));
       return ;
   }
QStandardItemModel * model =(QStandardItemModel *)ui->listView->model();
// ui->listView->currentIndex();
// qDebug()<<__FUNCTION__<<ui->listView->currentIndex()<<model->data(ui->listView->currentIndex(),Qt::DisplayRole);
//打开对应的文件并显示于excell中
 QString local_path=QDir::currentPath()+QString(TESTTABLE)+"/"+model->data(ui->listView->currentIndex(),Qt::DisplayRole).toString();
   printExcel(local_path);

}

void XlsxExportor::on_pushButton_5_clicked()
{

emit sig_is_experment_run();

}
void XlsxExportor::set_ui_on_top(bool flag)
{
if(flag)
    this->setWindowFlags(QWidget::windowFlags() | Qt::WindowStaysOnTopHint);
else
    this->setWindowFlags(QWidget::windowFlags() & ~Qt::WindowStaysOnTopHint);

}

网站公告

今日签到

点亮在社区的每一天
去签到