2017-07-27 2 views
0

im Versuch QTableWidget mit einigen Daten aus Excel-Datei zu füllen, ich Reihe meiner QTable nur hinzufügen, wenn ID ist auf der ListID, und ich bekomme keine Daten in QTable ZellenPyQt bevölkert QTableWidget aus Excel

https://drive.google.com/file/d/0B_PFK3V2Ij4tSko4emplYmNuN1E/view?usp=sharing hier eine Excel-Datei, es enthält keine formatin oder Formel, nur leere Zeilen und Spalten, weil Datei hier automaticaly

erzeugt wird

ist mein Code

wb = openpyxl.load_workbook(os.path.join(os.getcwd(), file), read_only=True) 
ws = wb.active 

headers = [] 
for item in ws[4]: 
    headers.append(item.value) 
headers.pop(0) 

listID = [] 
for index in range(self.listWidgetID.count()): 
    listID.append(self.listWidgetID.item(index).text()) 

data = ws.iter_rows(row_offset=5, column_offset=1) 

row_increment = 0 
self.tableWidgetDATA.setRowCount(1) 
self.tableWidgetDATA.setColumnCount(len(headers)) 
self.tableWidgetDATA.setHorizontalHeaderLabels(headers) 

for x, rows in enumerate(data): 
    if str(rows[0].value) in listID: 
     for y, cell in enumerate(rows): 
      item = QTableWidgetItem(str(cell.value)) 
      self.tableWidgetDATA.setItem(x, y, item) 
     row_increment = row_increment + 1 
     self.tableWidgetDATA.setRowCount(row_increment) 
+0

Sie sind Elemente eines QListWidget mit denen von Excel zu vergleichen, und Sie bieten keine Excel oder Liste, geben Sie bitte eine [Minimal, Complete, und prüfbare Beispiel] (https://stackoverflow.com/help/mcve) – eyllanesc

+0

Entschuldigung dafür, aktualisiert mein Beitrag –

Antwort

1

um Elemente zu der QTableWidget hinzufügen, die positi auf muss setRowCount(), in Ihrem Fall aktualisieren Sie nach dem Hinzufügen, so wird es nicht gespeichert werden, Ein weiterer Fehler ist, dass Sie nicht überprüfen, ob die Daten gültig sind.

class Widget(QWidget): 
    def __init__(self, parent=None): 
     QWidget.__init__(self, parent) 

     self.tableWidgetDATA = QTableWidget(self) 
     self.listWidgetID = QListWidget(self) 
     self.setLayout(QVBoxLayout()) 
     self.layout().addWidget(self.listWidgetID) 
     self.layout().addWidget(self.tableWidgetDATA) 
     self.listWidgetID.addItems(["113894", "113906", "113895"]) 
     file = "Livro2.xlsx" 
     wb = openpyxl.load_workbook(os.path.join(os.getcwd(), file), read_only=True) 
     ws = wb.active 

     headers = [item.value for item in ws[4] if item.value is not None] 

     listID = [self.listWidgetID.item(i).text() for i in range(self.listWidgetID.count())] 

     data = ws.iter_rows(row_offset=5, column_offset=1) 

     self.tableWidgetDATA.setColumnCount(len(headers)) 
     self.tableWidgetDATA.setHorizontalHeaderLabels(headers) 

     for x, rows in enumerate(data): 
      if rows[0].value is not None: 
       if str(rows[0].value) in listID: 
        self.tableWidgetDATA.setRowCount(self.tableWidgetDATA.rowCount()+1) 
        for y, cell in enumerate(rows): 
         val = cell.value 
         if val is not None: 
          item = QTableWidgetItem(str(val)) 
          self.tableWidgetDATA.setItem(self.tableWidgetDATA.rowCount()-1, y, item) 

Ausgang:

enter image description here

+0

ja es woks! thnx! Ich habe viel gelernt und der Code ist jetzt sauber xD –

Verwandte Themen