From e73337e29bc7b7cd580428979ba43bcab8e6a0c9 Mon Sep 17 00:00:00 2001 From: jiayulong Date: Thu, 25 Jun 2026 17:16:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=B0=86=E5=9B=BE=E5=A4=B4?= =?UTF-8?q?=E5=92=8C=E6=88=90=E6=9E=9C=E8=A1=A8=EF=BC=8C=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E5=88=B0excel=E6=96=87=E4=BB=B6=E3=80=82=EF=BC=88=E5=8F=82?= =?UTF-8?q?=E7=85=A7=E8=80=81=E7=89=88=E6=9C=AC=EF=BC=8C=E5=AE=9E=E9=99=85?= =?UTF-8?q?=E6=98=AF=E6=8C=89=E7=85=A7txt=E6=96=87=E6=9C=AC=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logPlus/formhead.cpp | 48 ++++++++++++++++++++++++++++++++- logPlus/formhead.h | 4 +++ logPlus/formmultiheads.cpp | 55 ++++++++++++++++++++++++++++++++++++++ logPlus/formmultiheads.h | 3 +++ 4 files changed, 109 insertions(+), 1 deletion(-) diff --git a/logPlus/formhead.cpp b/logPlus/formhead.cpp index cc549b1..f5277e0 100644 --- a/logPlus/formhead.cpp +++ b/logPlus/formhead.cpp @@ -889,7 +889,8 @@ void FormHead::slotContextMenu(QPoint pos) else { strMenu= "保存为成果表模板"; } - menu.addAction(QIcon(::GetImagePath() + "icon/Save.png"), strMenu, this, &FormHead::slotSaveJsonModel); + menu.addAction(QIcon(::GetImagePath() + "icon/SaveAsTemplate.png"), strMenu, this, &FormHead::slotSaveJsonModel); + menu.addAction(QIcon(::GetImagePath() + "icon/Save.png"), "输出到excel文件", this, &FormHead::slotOutSheet); menu.addSeparator(); menu.addAction(QIcon(::GetImagePath() + "icon/MergeCell.png"), "合并单元格", this, &FormHead::slotMerge); @@ -914,6 +915,12 @@ void FormHead::slotSaveJsonModel() m_parent->slotSaveJsonModel(); } +//输出到excel文件 +void FormHead::slotOutSheet() +{ + m_parent->slotOutSheet(); +} + //合并 void FormHead::slotMerge() { @@ -1508,3 +1515,42 @@ void FormHead::setRowHeight_Property(int row, double height) } } } + +void FormHead::makeXls(QFile *file) +{ + int columnCount = ui->tableWidget->columnCount();//总列数 + int rowCount = ui->tableWidget->rowCount();//总行数 + + for(int row=0; rowtableWidget->cellWidget(row, col); + if(myWidget) + { + formTableItemTmp = (FormTableItem*)myWidget;//获得widget + if(!formTableItemTmp) + { + continue; + } + // + QString text = formTableItemTmp->m_strShowTxt; + text.replace("\r\n",""); + text.replace("\n",""); + file->write(text.toStdString().c_str()); + if(col != columnCount-1) + { + file->write("\t"); + } +// fprintf(fp,"%s",text.toStdString().c_str()); +// if(col != columnCount-1) fprintf(fp,"\t"); + } + else{ + continue; + } + } + file->write("\n"); + //fprintf(fp,"\n"); + } +} diff --git a/logPlus/formhead.h b/logPlus/formhead.h index 38930e0..baba11c 100644 --- a/logPlus/formhead.h +++ b/logPlus/formhead.h @@ -3,6 +3,7 @@ #include #include +#include #include "formmultiheads.h" #include "formtableitem.h" @@ -54,6 +55,8 @@ public: void resizeEvent(QResizeEvent *event); QJsonObject makeJson(); + void makeXls(QFile *file); + //获取表格的实际大小 void getTableSize_Biggest(int &iWidth, int &iHight); //设置列宽 @@ -78,6 +81,7 @@ public slots: void slotContextMenu(QPoint pos); void slotSaveJsonModel();//保存图头模板 + void slotOutSheet();//输出到excel文件 // void slotMerge();//合并 void slotSplit();//拆分 diff --git a/logPlus/formmultiheads.cpp b/logPlus/formmultiheads.cpp index 6f07a1e..9d143cd 100644 --- a/logPlus/formmultiheads.cpp +++ b/logPlus/formmultiheads.cpp @@ -10,6 +10,8 @@ #include "qtcommonclass.h" #include "CallManage.h" #include "geometryutils.h" +#include "mainwindow.h" + extern QString g_prjname; extern int g_iRows; @@ -19,6 +21,8 @@ extern int g_iRowsHight; extern int g_iFixedWidth; extern int g_iFixedHeight; extern double g_dPixelPerCm;//每厘米像素数 +//主窗口,为了方便获取tab当前页 +extern MainWindow *g_mainWindow; FormMultiHeads::FormMultiHeads(QWidget *parent) : QWidget(parent), @@ -145,6 +149,57 @@ void FormMultiHeads::slotSaveJsonModel() } } +//输出到excel文件 +void FormMultiHeads::slotOutSheet() +{ + QString strTmpName = ""; + + int curIndex = g_mainWindow->m_centerWidgets->currentIndex(); + strTmpName = g_mainWindow->m_centerWidgets->tabText(curIndex); + //去掉后缀.json + int ind=strTmpName.lastIndexOf("."); + if(ind>=0) strTmpName=strTmpName.left(ind); + + // + QString pdfName = GetOutDataPath(); + if(strTmpName != "") + { + pdfName=pdfName + "/" + strTmpName +".xls"; + } + + // + QString defaultTempleteFile =QFileDialog::getSaveFileName( NULL,"输出为xls文件",pdfName,"xls文件(*.xls)"); + if(defaultTempleteFile=="") { + return; + } + + // 写入文件 + QFile file(defaultTempleteFile); + if(file.open(QIODevice::WriteOnly)){ + } + else + { + QMessageBox::information(nullptr, "保存文件失败", defaultTempleteFile); + return; + } + + // + int rowCount = ui->tableWidget->rowCount();//总行数 + for(int i=0; itableWidget->cellWidget(i, 0) != nullptr ) + { + auto myWidget = ui->tableWidget->cellWidget(i, 0); + FormHead *widgetHead = qobject_cast(myWidget); + if(widgetHead) + { + widgetHead->makeXls(&file); + } + } + } + file.close(); + +} void FormMultiHeads::loadStyle(const QString &qssFile) { diff --git a/logPlus/formmultiheads.h b/logPlus/formmultiheads.h index f2438b8..6f7480e 100644 --- a/logPlus/formmultiheads.h +++ b/logPlus/formmultiheads.h @@ -42,6 +42,9 @@ public slots: void slotSaveJsonModel(); QJsonObject makeJsonModel(); + //输出到excel文件 + void slotOutSheet(); + public: void loadStyle(const QString &qssFile); void AddHead();