复制代码
//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);
复制代码
复制代码
}
复制代码