使用xlwt'get_sheet'方法访问工作表

时间:2013-01-29 16:16:31

标签: python xlrd xlwt xlutils

我想访问电子表格的工作表。我使用xlutils.copy()将主工作簿复制到另一个工作簿。但是不知道使用xlwt模块访问工作表的正确方法。 我的示例代码:

import xlrd
import xlwt
from xlutils.copy import copy

wb1 = xlrd.open_workbook('workbook1.xls', formatting_info=True)
wb2 = copy(master_wb)

worksheet_name = 'XYZ' (worksheet_name is a iterative parameter)

worksheet = wb2.get_sheet(worksheet_name)

有人可以告诉我使用xlwt模块访问工作簿中现有工作表的正确命令行是什么?我知道我们可以使用'add_sheet'方法使用xlwt模块在现有工作簿中添加工作表。

任何帮助,赞赏。

3 个答案:

答案 0 :(得分:3)

sheets()类中奇怪地缺少xlwt.Workbook方法,因此使用该方法的其他答案将无效 - 仅xlrd.book(用于读取XLS文件)具有{{1} }} 方法。因为所有类属性都是私有的,所以你必须这样做:

sheets()

如果您不需要它为不存在的工作表返回None,则只需删除try / except块。如果要按名称重复访问多个工作表,将它们放在字典中会更有效,如下所示:

def get_sheet_by_name(book, name):
    """Get a sheet by name from xlwt.Workbook, a strangely missing method.
    Returns None if no sheet with the given name is present.
    """
    # Note, we have to use exceptions for flow control because the
    # xlwt API is broken and gives us no other choice.
    try:
        for idx in itertools.count():
            sheet = book.get_sheet(idx)
            if sheet.name == name:
                return sheet
    except IndexError:
        return None

答案 1 :(得分:2)

您可以sheets = wb1.sheets()获取工作表对象列表,然后在每个工作表上调用.name以获取其名称。要查找工作表的索引,请使用

[s.name for s in sheets].index(sheetname)

答案 2 :(得分:2)

嗯,这是我的答案。让我一步一步来看。 考虑到以前的答案,xlrd是获取工作表的正确模块。

  1. xlrd.Book对象由open_workbook返回。

    rb = open_workbook('sampleXLS.xls',formatting_info=True)

  2. nsheets是一个属性integer,它返回工作簿中的总页数。

    numberOfSheets=rb.nsheets

  3. 由于您已将其复制到新工作簿wb - >基本上写东西,wb修改excel wb = copy(rb)

  4. 有两种获取工作表信息的方法,

    a。如果您只是想阅读表格,请使用sheet=rb.sheet_by_index(sheetNumber)

    b。如果您要编辑工作表,请使用ws = wb.get_sheet(sheetNumber)(在此上下文中,这是问题所必需的)

  5. 您现在知道excel工作簿中有多少张工作表以及如何单独获取它们, 将所有这些放在一起,

    示例代码:

    参考:http://www.simplistix.co.uk/presentations/python-excel.pdf

    from xlrd import open_workbook
    from xlutils.copy import copy
    from xlwt import Workbook
    
    rb = open_workbook('sampleXLS.xls',formatting_info=True)
    numberOfSheets=rb.nsheets
    wb = copy(rb)
    
    for each in range(sheetsCount):
        sheet=rb.sheet_by_index(each)
        ws = wb.get_sheet(each)
        ## both prints will give you the same thing
        print sheet.name
        print ws.name