2017-03-15 37 views
0

我是一個總的noob。我需要從工作簿中的所有其他工作表(從第三個工作表開始)獲取相同的單元格值,並將它們放入另一個工作表中。我繼續得到一個IndexError:列表索引超出範圍。工作簿中有20張。我已經導入了xlrd和xlwt。使用xlrd遍歷工作表和工作簿

代碼:

sheet_id = 3 
output = 0 
cellval = enso.sheet_by_index(sheet_id).cell(20,2).value 


sheet_cp = book_cp.get_sheet(output) 
sheet_cp.write(1, 1, cellval) 

    book_cp.save(path) 
for sheet_id in range(0,20): 
    sheet_enso = enso_cp.get_sheet(sheet) 
    sheet_cp = book_cp.get_sheet(output) 
    sheet_cp.write(1, 1, cellval) 
    sheet_id = sheet_id + 2 
    output = output + 1 
+0

請問您能澄清一下enso_cp是什麼? – 2017-03-16 16:20:03

+0

它是源工作簿的副本,book_cp是目標工作簿的副本。 –

回答

1

你的問題很可能存在於這裏:

sheet_id = 3 
cellval = enso.sheet_by_index(sheet_id).cell(20,2).value # row:20, column:0 

檢查以下內容:
確保sheet_id=3是你想要的(其中紙張索引從0開始),所以第三張紙張的索引= 2,除非你想要第四張紙張。
2 -檢查cell(20,0)存在於所選工作表中(其中單元格(0,0)是第一個單元格)。

另外,不需要定義sheet_id
代替改變範圍(2:第三片材,21:20張)>in range(2,21)其中:

range([start], stop[, step])

start: Starting number of the sequence.
stop: Generate numbers up to, but not including this number.
step: Difference between each number in the sequence.

參考:Python's range() Parameters

並從每張紙上獲取cellval,將cellval放入循環中。

最終的代碼可能是:

output = 0 
for sheet_id in range(2,21): # (starting at the 3rd sheet (index=2), stopping at 20 "21 not included") 
    cellval = enso.sheet_by_index(sheet_id).cell(20,0).value # row 20, column 0 
    #sheet_enso = enso_cp.get_sheet(sheet) # i don't know if you need that for something else 
    sheet_cp = book_cp.get_sheet(output) 
    sheet_cp.write(1, 1, cellval) 
    output = output + 1 
book_cp.save(path) 

再次檢查cell(20,0)存在於所有源表以避免錯誤。

相關問題