我已经编写了一个GUI,用于除其他外,读取excel数据并显示值。我为此使用xlrd。我已经尝试过for循环通过一定数量的行和列(我知道数据有多大),并且它应该如何工作。我正在使用PyCharm。
下一步应该是while循环,它可以读取任何数据,无论它有多大。因此,我想到了一个主意: -我正在检查是否有空白行或列 -如果彼此之间有10个以上的空白行或列,则程序应停止执行while循环
问题:我的setDatei()方法正在打开一个文件,并同时加载每个单元格的值。仅当我将此文件的最后一行/列设置为计数器时,它才适用于第一种情况。如果只有上面的1个数字,则程序将返回:“进程完成,退出代码-1073740791(0xC0000409)”。尝试使用while循环进行第二种情况时也会发生同样的情况。
我试图理解这一点: Process finished with exit code -1073741571 或者那个: How to overcome Stack Size issue with Visual Studio (running C codes with big array) 但是我想我不仅仅了解它。 它应该不仅可以在我的电脑上工作,而且可以在每台电脑上使用,因此不希望更改任何电脑设置。
案例1:有效
def setDatei(self): #Programmauswahl
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(None, "Waehle das Programm aus", "",
"Excel Files *.xlsx *.xls") # Frage nach Datei
if fileName: # Wenn der Benutzer eine Datei gibt
print(fileName)
self.setLine.setText(fileName) # zeigt den Dateinamen in der Leiste oben links
####Öffnet die Datei und lädt die Werte
workbook = xlrd.open_workbook(fileName)
worksheet = workbook.sheet_by_index(0)
# 16 Zeilen, 11 Spalten
n = 0
m = 0
for i in range(0, 16): # for-Schleife, um alle Zellen auszulesen und übertragen
m = 0
a = str(worksheet.cell(n, m).value)
for i in range(0, 11):
a = str(worksheet.cell(n, m).value)
self.tableWidget.setItem(n, m, QtWidgets.QTableWidgetItem(a))
m = m + 1
n = n + 1
情况2:不起作用
def setDatei(self): #Programmauswahl
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(None, "Waehle das Programm aus", "",
"Excel Files *.xlsx *.xls") # Frage nach Datei
if fileName: # Wenn der Benutzer eine Datei gibt
print(fileName)
self.setLine.setText(fileName) # zeigt den Dateinamen in der Leiste oben links
####Öffnet die Datei und lädt die Werte
workbook = xlrd.open_workbook(fileName)
worksheet = workbook.sheet_by_index(0)
lineThreshold = 10
columnThreshold = 10
row = 0
lineEmptyCounter = 0
while True:
col = 0
columnEmptyCounter = 0
lineEmpty = True
while True:
value = str(worksheet.cell(row, col).value)
if value is None:
columnEmptyCounter += 1
else:
lineEmpty = False
columnEmptyCounter = 0
self.tableWidget.setItem(row, col, QtWidgets.QTableWidgetItem(value))
if columnEmptyCounter >= columnThreshold:
break
else:
col = col + 1
if lineEmpty:
lineEmptyCounter += 1
else:
lineEmptyCounter = 0
if lineEmptyCounter >= lineThreshold:
break
else:
row = row+1
该过程以退出代码-1073740791(0xC0000409)完成。程序关闭而没有任何信息。我不知道从哪里开始。如果您需要更多详细信息,请告诉我。