2014-09-30 82 views
-2

试图从文件中提取.xlsx文档并将数据编译为单个工作表。Python/Excel - TypeError:'Book'对象不可迭代

Receiving TypeError:'Book'对象不可迭代,但我没有标题为“Book”的对象。

所以,我想我的困惑是了解如何使工作簿迭代

程序如下

的Python 2.7

#-------------- loop that pulls in files from folder-------------- 
import os 

#create directory from which to pull the files 
rootdir = r'C:\Users\username\Desktop\Mults' 

for subdir, dir, files in os.walk(rootdir): 
for file in files: 
    open(os.path.join(subdir, file)) 
#----------------------merge work books----------------------- 

import xlrd 
import xlsxwriter 


wb = xlsxwriter.Workbook('merged.xls') 
ws = wb.add_worksheet() 
for file in files: 
    filename = os.path.join(subdir, file) 
    r = xlrd.open_workbook(filename) 
    head, tail = os.path.split(file) 
    count = 0 
    for sheet in r: 
     if sheet.number_of_rows()>0: 
      count += 1 
    for sheet in r: 
     if sheet.number_of_rows()>0: 
      if count == 1: 
       sheet_name = tail 
      else: 
       sheet_name = "%s_%s" (tail, sheet.name) 
      new_sheet = wb.create_sheet(sheet_name) 
      new_sheet.write_reader(sheet) 
      new_sheet.close() 
wb.close() 

返回错误如下

Traceback (most recent call last): 
    File "C:\Users\username\Desktop\Work\Python\excel practice\xlsx - loops files - 09204.py", line 27, in <module> 
    for sheet in r: 
TypeError: 'Book' object is not iterable 

任何建议或更改?

此外,如果我正朝着正确的方向前进,有什么建议吗?

我是新来的蟒蛇世界,所以任何意见将不胜感激!

谢谢!

+1

不会在'r'上迭代,而是在'r.worksheets'上迭代' – 2014-09-30 15:33:30

+0

'r'是类型为Book的对象(表示工作簿),并且您试图遍历它,但它不会支持迭代。使用Google搜索确切的错误信息会导致您在SO和其他网站上发布多篇文章,详细描述发生此错误的原因 - 请在下次再做一些调查。根据[文档](https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html?p=4966#__init__.Book.sheets-method),您可以迭代'r.sheets()'代替。 – l4mpi 2014-09-30 15:35:09

+0

@ 14mpi感谢您的快速回复!我确实做了研究并理解了这个概念,但并不理解这个问题的解决方案。我感谢你的时间 – 2014-09-30 15:40:14

回答

2

问题是,您正试图迭代打开的xlrd工作簿,这是无法完成的。

有多种方式来遍历工作簿中的工作表,这里是其中之一:

workbook = xlrd.open_workbook(filename) 
for worksheet in workbook.sheets(): 
    print worksheet.nrows 

选项2(使用sheet_names()):

workbook = xlrd.open_workbook(filename) 
for name in workbook.sheet_names(): 
    worksheet = workbook.sheet_by_name(name) 
    print worksheet.nrows 

选项3(使用nsheets) :

workbook = xlrd.open_workbook(filename) 
for index in xrange(0, workbook.nsheets): 
    worksheet = workbook.sheet_by_index(index) 
    print worksheet.nrows 

FYI nrows会给你一个nu在一张表中的行。