I\'m trying to load a spreadsheet and pass a list of the worksheets back to my QML interface. But I\'m unable to find a way to provide a list(and later a dictionary) back t
You have to use QVariantList instead of list, besides the use of regular expressions may fail, in my case I use Linux and I generate problems, so the correct thing to do is to use QUrl:
class File(QtCore.QObject):
filenameChanged = QtCore.Signal()
sheetnamesChanged = QtCore.Signal()
def __init__(self, *args, **kwargs):
super(File, self).__init__(*args, **kwargs)
self.__filename = ""
self.__sheetnames = list()
@QtCore.Slot(str)
def load(self, filename):
self.__filename = QtCore.QUrl(filename).toLocalFile()
# Load the worksheet using openpyxl.
try:
workbook = openpyxl.load_workbook(filename=self.__filename)
except openpyxl.utils.exceptions.InvalidFileException as exception:
# Todo: write code to pass error to the user.
print('Invalid File')
return
self.__sheetnames = workbook.sheetnames
print(workbook.sheetnames)
@QtCore.Property(str, notify=filenameChanged)
def filename(self):
return self.__filename
@filename.setter
def get_filename(self, name):
if name == self.__filename:
return
self.__filename = name
self.filenameChanged.emit()
@QtCore.Property('QVariantList', notify=sheetnamesChanged)
def sheetnames(self):
return self.__sheetnames
@sheetnames.setter
def set_sheetnames(self, names):
if names == self.__sheetnames:
return
self.__sheetnames = names[:]
self.sheetnamesChanged.emit()
Output:
['Periodic Table']
qml: /home/eyllanesc/Downloads/Ultimate Periodic Table1.xlsx
qml: [Periodic Table]