excel 操作

复制代码
//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);
复制代码
复制代码
}
复制代码
相关推荐
小马爱打代码2 小时前
设计模式:命令模式-解耦请求与执行的完美方案
设计模式·命令模式
Cuit小唐1 天前
多线性读取数据实现QCustomPlot瀑布图
命令模式
程序员JerrySUN2 天前
设计模式 Day 9:命令模式(Command Pattern)完整讲解与实战应用
设计模式·命令模式
海涛高软3 天前
qt mapFrom返回的QPoint和event->pos()区别和globalPos区别
开发语言·qt·命令模式
m0_5557629010 天前
不在 qtdesigner中提升,进行主题程序设计
qt·命令模式
秋风&萧瑟15 天前
【QT】练习1
开发语言·qt·命令模式
LoveXming19 天前
Qt 多线程的两种实现方式
开发语言·qt·命令模式
懒大王爱吃狼21 天前
heapq库的使用——python代码
开发语言·数据库·python·mysql·命令模式
Antonio91523 天前
【设计模式】命令模式
设计模式·命令模式