-2

尝试从文件中提取 .xlsx 文档并将数据编译到单个工作表中。

接收 TypeError:'Book' 对象不可迭代,但我没有名为“Book”的对象。

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

程序如下

蟒蛇 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

有什么建议或改变吗?

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

我是python世界的新手,所以任何建议都将不胜感激!

谢谢!!

4

1 回答 1

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

仅供参考,nrows会在一张纸上给你很多行。

于 2014-09-30T15:36:19.497 回答