Подтвердить что ты не робот

Редактируйте существующие книги и листы excel с xlrd и xlwt

В документации для xlrd и xlwt я узнал следующее:

Как читать из существующих книг/листов:

from xlrd import open_workbook
wb = open_workbook("ex.xls")
s = wb.sheet_by_index(0)
print s.cell(0,0).value
#Prints contents of cell at location a1 in the first sheet in the document called ex.xls

Как создать новые рабочие книги/листы:

from xlwt import Workbook
wb = Workbook()
Sheet1 = wb.add_sheet('Sheet1')
Sheet1.write(0,0,'Hello')
wb.save('ex.xls')
#Creates a document called ex.xls with a worksheet called "Sheet1" and writes "Hello" to the cell located at a1

Теперь я хочу открыть существующий рабочий лист, в существующую книгу и написать на этот лист.

Я пробовал что-то вроде:

from xlwt import open_workbook
wb = open_workbook("ex.xls")
s = wb.sheet_by_index(0)
print s.cell(0,0).value

но open_workbook является частью модуля xlrd, а не xlwt.

Любые идеи?

Edit1: После предложения Оливера я просмотрел xlutils и попробовал следующее:

from xlrd import open_workbook
from xlwt import Workbook
from xlutils.copy import copy

wb = open_workbook("names.xls")
s = wb.get_sheet(0)
s.write(0,0,'A1')
wb.save('names.xls')

Это, однако, дает мне следующее сообщение об ошибке:

File "C:\Python27\lib\site-packages\xlrd\book.py", line 655, in get_sheet
raise XLRDError("Can't load sheets after releasing resources.")
xlrd.biffh.XLRDError: Can't load sheets after releasing resources.

Изменить 2: Сообщение об ошибке было вызвано неправильным использованием функции get_sheet. Наконец выяснили, как его использовать:

from xlrd import open_workbook
from xlwt import Workbook
from xlutils.copy import copy

rb = open_workbook("names.xls")
wb = copy(rb)

s = wb.get_sheet(0)
s.write(0,0,'A1')
wb.save('names.xls')
4b9b3361

Ответ 1

Как я писал в редакциях op, для редактирования существующих документов excel вы должны использовать модуль xlutils (спасибо Oliver)

Вот правильный способ сделать это:

#xlrd, xlutils and xlwt modules need to be installed.  
#Can be done via pip install <module>
from xlrd import open_workbook
from xlutils.copy import copy

rb = open_workbook("names.xls")
wb = copy(rb)

s = wb.get_sheet(0)
s.write(0,0,'A1')
wb.save('names.xls')

Это заменяет содержимое ячейки, расположенной в a1 в первом листе "names.xls", с текстом "a1", а затем сохраняет документ.

Ответ 2

Вот еще один способ сделать код выше, используя модуль openpyxl, совместимый с xlsx и xlsm. Из того, что я видел до сих пор, он также сохраняет форматирование.

from openpyxl import load_workbook
wb = load_workbook('names.xlxs')
ws = wb['SheetName']
ws['A1'] = 'A1'
wb.save('names.xlxs')