[英]Edit existing excel workbooks and sheets with xlrd and 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:在Olivers建議之后,我調查了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')
正如我在op的編輯中所寫,要編輯現有的Excel文檔,您必須使用xlutils
模塊(Thanks 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的單元格的內容,然后保存文檔。
這是使用與xlsx兼容的openpyxl
模塊執行上述代碼的另一種方法。 從我到目前為止看到的,它也保持格式化。
from openpyxl import load_workbook
wb = load_workbook('names.xlsx')
ws = wb['SheetName']
ws['A1'] = 'A1'
wb.save('names.xlsx')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.