I have a window to open or save an excel and what I pretend is that when I save the excel this modal I return the content of the excel, that is, the writer to be able to add modifications to that excel. My code is as follows:
import pandas as pd
from PyQt5.QtWidgets import QFileDialog, QWidget, QPushButton, QGridLayout,
QLabel
from PyQt5.QtCore import QFileInfo, QTimer
import xlrd
import traceback
import tempfile
import datetime
import os
'''
Metodo para exportar los resultados de la tabla
'''
def exportar(contenidoTabla):
try:
df = pd.DataFrame(contenidoTabla.listaDatosExportar,
columns=contenidoTabla.columnas)
return modalExportacion(df)
except:
print("excelUtil.py.- exportar. No se ha podido exportar el fichero: "
+ traceback.format_exc())
def exportarDf(self, df):
try:
exportar = modalExportacion(df)
exportar.exec_()
return exportar.getWriter()
except:
print("No se ha podido exportar el fichero")
'''
Modal de exportacion
'''
class modalExportacion(QDialog):
def __init__(self, df):
QDialog.__init__(self)
self.df = df
self.ruta = ""
self.fichero_actual = ""
self.writer = None
self.setWindowTitle("Exportacion a excel")
contenedor = QGridLayout()
self.setLayout(contenedor)
label_3 = QLabel()
label_3.setObjectName("label_3")
label_3.setText("Desea abrir o guardar el excel?")
contenedor.addWidget(label_3, 1, 0)
btnAbrir = QPushButton("Abrir",None)
contenedor.addWidget(btnAbrir,2, 0)
btnAbrir.clicked.connect(self.abrir)
btnGuardar = QPushButton("Guardar",None)
contenedor.addWidget(btnGuardar, 2, 1)
btnGuardar.clicked.connect(self.guardar)
self.show()
def abrir(self):
nombreFichero = "Temporal"+datetime.datetime.now().isoformat()+".xlsx"
handle, fn = tempfile.mkstemp(suffix='.xlsx')
self.writer = pd.ExcelWriter(nombreFichero, engine='openpyxl')
self.df.toexcel(self.writer)
def guardar(self):
options = QFileDialog.Options()
fileName, _ = QFileDialog.getSaveFileName(self,"Guardar
como...","","Excel (*.xls);;Todos los tipos (*)", options=options)
if fileName:
self.writer = pd.ExcelWriter(fileName, engine='xlsxwriter')
self.df.to_excel(self.writer, sheet_name='Sheet1')
def getWriter(self):
return self.writer
I call this modal in the following way:
writer = exportarDf(None, df)
Which makes it enter the following method of the class:
def exportarDf(self, df):
try:
exportar = modalExportacion(df)
exportar.exec_()
return exportar.getWriter()
except:
print("No se ha podido exportar el fichero")
My problem is that when I do:
modalExportacion.getWriter()
This returns it to None.