2015-12-22 103 views
3

我用xlrd導入excel文件。沒有關於如何將這些數據填充到QTableWidget的教程。 代碼導入Excel中:從Excel中填充QTableWidget

import xlrd 

book = xlrd.open_workbook('bioreactorfinal.xlsx') 
sheet = book.sheets() [1] 
data = [[sheet.cell_value(r,c) for c in range (sheet.ncols)]for r in range(sheet.nrows)] 
print(data) 

代碼QTableWidget的

self.tableWidget.setColumnCount(32) 
self.tableWidget.setRowCount(32) 

for row, columnvalues in enumerate(data): 
    for column, value in enumerate(columnvalues): 
     item = QtGui.QTableWidgetItem(value) 
     self.tableWidget.setItem(row, column, item) 

回答

2

,以將其填充到一個QTableWidget的,你需要把它分成幾個步驟:

  1. 提取標頭
  2. 提取每列的值
  3. 生成您QTableWidget的,並與你怎麼看標題一定程度上取決於您的期望,如果你讓對輸入數據沒有假設數據

填充它,那麼你就沒有頭。

在這裏,我將假設標題在第一行。出發,你離開的數據,這裏是如何從數據填補QTableWidget的:

from PySide import QtGui 

data = [[sheet.cell_value(r,c) for c in range (sheet.ncols)] for r in range(sheet.nrows)] 

app = QtGui.QApplication([]) 
mytable = QtGui.QTableWidget() 

# skip these lines if you don't have headers 
headers = data[0] 
data = data[1:] 
self.setHorizontalHeaderLabels(headers) 
# stop skipping lines 

for row, columnvalues in enumerate(data): 
    for column, value in enumerate(columnvalues): 
     item = QtGui.QTableWidgetItem(value) 
     mytable.setItem(row, column, item) 

這只是一個非常基本的模板,但如何在Excel工作表轉換爲一個QTableWidget的總體思路。然後,您可以將其嵌入到QMainWindow或QDialog中。

有幾件事情要謹慎爲:

  1. 一些Excel文件有填充列和行。您可能希望僅刪除空白值的行和列(檢查空字符串)。
  2. 您可能有更多的列或行比預期的要多,在這種情況下,您需要滾動條,或者可能具有適合您投影的數據(無滾動條)。 Qt會自動決定是否顯示滾動條,但是您可能想要覆蓋它。
+0

謝謝!它運作良好。但是,我似乎無法得到要在QTableWidget中輸出的整數。只有字符串被打印出來。我如何設置列和行號? –

+0

嗯,你的意思是列中的整數值沒有出現?在創建'QTableWidgetItem'之前,只需對該項目使用'str()'調用以確保它是一個字符串。我可能已經忘記了這一點。 或者你想知道行/列數? –

+0

謝謝。對不起,如果我提出的基本問題,我是編程新手。行數和列怎麼樣?我已經提供了上面的代碼。 –