2017-07-27 42 views
0
からExcelファイルからいくつかのデータでQTableWidgetを投入しようとしている

イムをQTableWidgetを投入、私はIDがlistID上にある場合にのみ、私のQTableに行を追加したい、と私はここでQTable細胞PyQtはエクセル

https://drive.google.com/file/d/0B_PFK3V2Ij4tSko4emplYmNuN1E/view?usp=sharingにデータを取得していませんファイルがautomaticaly

が生成されるため、Excelファイルには、それはここに私のコードは

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

は、ExcelのものとQListWidgetの要素を比較して、Excelを提供していないか、リストには、[、最小完全、かつ検証例]を提供してください(https://stackoverflow.com/help/mcve) – eyllanesc

+0

申し訳ありませんが、私のポストを更新 –

答えて

1

QTableWidget、POSITIに要素を追加するにある、任意のformatinまたは式、単に空の行や列を含みませんonはsetRowCount()である必要があります。追加した後に更新すると保存されません。また、データが有効であるかどうかを確認しないという別のエラーがあります。

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) 

出力:

enter image description here

+0

はいそれwoks! thnx!私はたくさんのことを学んだし、コードは今ではきれいだxD –