2017-03-01 50 views
0
wb = openpyxl.load_workbook(filename = 'C:/Users/test.xlsx') 
sheet = wb['sheet1'] 
len=sheet.max_row 
vals1 = [v[0].value for v in sheet.get_squared_range(1,1,2,len)] 
vals2 = [v[1].value for v in sheet.get_squared_range(1,1,2,len)] 

但我想有諸如get_squared_range以列表的列表從Excel

vals12 = [v[0].value,v[1].value for v in sheet.get_squared_range(1,1,2,len)] 

哪裏vals12-與維矩陣(LEN×2)

+0

我目前的方法是正確的,但我不想讓循環兩次並創建兩個列表。我想有1個變量 – Zzema

+1

不要命名變量'len'。它掩蓋了同名內置函數,這意味着您不再可以寫入'len(my_string)'或'len(my_list)'。它也混淆了你的代碼的讀者。 –

+0

thx,我認爲這是另一種方式將有助於理解) – Zzema

回答

1
rows_iter = sheet.get_squared_range(1, 1, 2, sheet.max_row) 
vals = [[cell.value for cell in row] for row in rows_iter] 

注:

openpyxl源代碼註釋get_squared_range()已被廢棄,你應該使用iter_rows()

@deprecated(""" 
    Use ws.iter_rows() or ws.iter_cols() depending whether you 
    want rows or columns returned. 
    """) 
[docs] def get_squared_range(self, min_col, min_row, max_col, max_row): 

要使用iter_rows()做到:

rows_iter = sheet.iter_rows(min_col=1, min_row=1, max_col=2, max_row=sheet.max_row) 
vals = [[cell.value for cell in row] for row in rows_iter] 
+0

'get_squared_range()'將會消失。最好使用'iter_rows()'或'iter_cols()' –

+0

@CharlieClark:謝謝。更新了答案。 –

+0

我也開始在更改日誌中列出棄用版https://openpyxl.readthedocs.io/en/latest/changes.html#deprecations –

0

做最簡單的方法,這可能是:

values = [[cell.value for cell in col] for col in ws['A':'B']] 

但你也可以使用itertools.islice()ws.values