Можно ли использовать один и тот же экземпляр книги xlwt в разных функциях?

Мне нужно написать очень раздражающий скрипт, который использует один файл Excel для обновления другого, но поскольку вы не можете напрямую редактировать файл xls или вставлять строку, мне пришлось импровизировать.

Теперь мой вопрос: используя модуль xlwt для Python (используя 2.7x), когда вы создаете книгу и работаете над ней, как писать на тот же рабочий лист, который был создан в другой функции? Могу ли я просто передавать книгу туда и обратно с ее именем переменной? Если да, то как мне получить доступ к первому созданному мной рабочему листу, workbook[0]?

У меня есть несколько функций, которые должны взаимодействовать с этим файлом xlwt xls, который я создаю, поэтому я просто хочу быть уверенным, что смогу передать его другим функциям.

Спасибо!


person Michael M    schedule 14.08.2012    source источник


Ответы (1)


...да

import xlwt
class MyWorkbook:
    ''' allow access to a workbooks sheets'''
    def __init__(self,*args,**kwargs):
        self.wb = xlwt.Workbook(*args,**kwargs)
        self.sheets = []
    def add_sheet(self,sheet_name):
        self.sheets.append(self.wb.add_sheet(sheet_name))
        return self.sheets[-1]
    def GetSheetByIndex(self,n):
        return self.sheets[n]
    def save(self,fname_or_stream):
        return self.wb.save(fname_or_stream)

def CreateWB():
    ''' return a MyWorkbook instance with 1 sheet'''
    m= MyWorkbook()
    m.add_sheet("first_sheet")
    return m
def ModifySheet0(mwb):
    '''uses instance of MyWorkbook and modifies sheet0'''
    s = mwb.GetSheetByIndex(0)
    s.write(0,0,"Hello World!")
def DoItAll()
    '''passing around MyWorkbook'''
    wb = CreateWB()
    ModifySheet0(wb)
    wb.save("somefile.xls")
person Joran Beasley    schedule 14.08.2012
comment
Эй, ваше объяснение помогло почти во всем, но у меня есть последний вопрос, потому что я получил ошибку почти в последней части моего кода. Я получаю эту ошибку: AttributeError: объект «Рабочая книга» не имеет атрибута «листы», что, если я не ошибаюсь, означает, что я не могу использовать .sheets [] для доступа к определенному листу из книги xlwt. Есть обходной путь или я забыл что-то импортировать? - person Michael M; 15.08.2012
comment
да, вы сделали что-то не так... листы являются частью MyWorkbook, а не Workbook... вам нужно создать класс, чтобы отслеживать - person Joran Beasley; 15.08.2012
comment
Разве ваш класс MyWorkbook не использует методы из Workbook xlwt? В любом случае, я только что сделал лист, который я добавил, глобальной переменной, поэтому мне не нужно постоянно его извлекать. - person Michael M; 15.08.2012