2016-01-11 70 views
0

這對我來說似乎很棘手。假設我有一個嵌套在目錄樹中的具有少量非空列的excel文件。我想獲得位於F列所有值的總和與openpyxl如何使用openpyxl讀取for循環中的excel文件?

file1.xlsx 
A B C D E F 
       5 
       7 
       11 
       17 
       20 
       29 
       34 

我就帶它會是如下,但它是錯誤的:

import os 
from openpyxl import load_workbook 

directoryPath=r'C:\Users\MyName\Desktop\MyFolder' #The main folder 
os.chdir(directoryPath) 
folder_list=os.listdir(directoryPath) 
for folders, sub_folders, file in os.walk(directoryPath): #Traversing the sub folders 
    for name in file: 
     if name.endswith(".xlsx"): 
      filename = os.path.join(folders, name) 
      wb=load_workbook(filename, data_only=True) 
      ws=wb.active 
      cell_range = ws['F1':'F7'] #Selecting the slice of interest 
      sumup=0 
      for row in cell_range: 
       sumup=sumup+cell.value 

雖然運行此我得到NameError: name 'cell' is not defined 。如何解決這個問題?

+1

您沒有在任何地方定義「單元格」。你的意思是在「for row in cell_range:」下添加另一個for循環,比如'for cell in row:'? – disflux

回答

3

目前錯誤的主要原因是您只遍歷行,而不是該行內的列(單元格)。

在你的代碼的末尾,你可以這樣做(更換你的代碼的兩個端線):

for row in cell_range: # This is iterating through rows 1-7 
    for cell in row: # This iterates through the columns(cells) in that row 
     value = cell.value 
     sumup += value 

你確定你沒想到這是通過每個Excel文件的運行。這將非常容易調試。後

ws=wb.active 

刪除所有代碼,並添加

print(name + ' : ' + ws) 

這會打印出所有的Excel文件名,他們的活動工作表。如果它打印出超過1,那麼它顯然是爬行並抓取excel文件...

相關問題