web-dev-qa-db-ja.com

xlrdとxlwtを使用して既存のExcelブックとシートを編集する

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_workbookxlrdではなく、xlwtモジュールの一部にすぎません。

何か案は?

編集1:オリバーズの提案の後、私は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')
26
Jack Pettersson

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')

これにより、「names.xls」の最初のシートのa1にあるセルの内容がテキスト「a1」に置き換えられ、ドキュメントが保存されます。

42
Jack Pettersson

次に、xlsxと互換性のあるopenpyxlモジュールを使用して上記のコードを実行する別の方法を示します。これまで見てきたことから、フォーマットも維持されます。

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