Python 使用xlrd和xlwt编辑现有excel工作簿和工作表

Python 使用xlrd和xlwt编辑现有excel工作簿和工作表,python,excel,xlrd,xlwt,Python,Excel,Xlrd,Xlwt,在forxlrd和xlwt中,我学到了以下几点: 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') 如何阅读现有工作手册/工作表: from xlrd import open_workboo

在for
xlrd
xlwt
中,我学到了以下几点:

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')
如何阅读现有工作手册/工作表:

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 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\u工作簿
只是
xlrd
模块的一部分,而不是
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\u 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
模块(感谢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')
需要安装xlrd、XLUTIL和xlwt模块。 #可以通过pip安装完成 从xlrd导入打开的\u工作簿 从xlutils.copy导入复制 rb=打开工作簿(“names.xls”) wb=副本(rb) s=wb.get_表(0) s、 写入(0,0,'A1') wb.save('names.xls')
这会将“names.xls”第一页a1处的单元格内容替换为文本“a1”,然后保存文档。

下面是使用与xlsx兼容的
openpyxl
模块执行上述代码的另一种方法。从我到目前为止所看到的情况来看,它还保持格式化

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

您是否查看了由同一作者制作并记录在您链接到的同一文档中的
xlutils
?在“编写Excel文件”的第2小节中,说明了使用工作簿类的“添加工作表”方法创建工作表。要从工作簿检索现有工作表,请使用其get_sheet方法。当工作簿已由xlutils.copy实例化时,此方法特别有用你好,奥利弗,谢谢你的建议。我查看了
xlutils
,它似乎就是我想要的。然而,我似乎仍然无法实现我的目标。当我使用
get_sheet()
时,我收到以下错误消息:
文件“C:\Python27\lib\site packages\xlrd\book.py”,第655行,在get_sheet raise XLRDError(“释放资源后无法加载工作表”).xlrd.biffh.XLRDError:释放资源后无法加载工作表。
谢谢,因为您在代码中还提供了import子句(它经常丢失),谢谢,但此解决方案仅适用于xls格式。我尝试将其用于xlsx格式,但这会损坏文件。幸运的是,我有该文件的备份,因此我可以冒这个风险,但对于那些没有备份的人,请确保使用xls格式。另外值得注意的是,此过程将从电子表格中删除所有颜色格式和公式。@abaldwin99。。。你知道还有其他方法可以保持格式和公式不变吗?@SagarMehta已经有一段时间了,但我相信我采用了VBA宏路线。我没有亲自使用过它,但xlwings看起来很有趣,这取决于您的用例。。。编辑:啊,你也需要格式化。很遗憾,我认为您需要使用VBA。@SagarMehta保存单元格格式(字体、样式、颜色)很简单。但是看起来不可能保留图像和表格格式,例如,如上所述,如果您的工作簿包含图像,它们将不会保留在新的/编辑的工作簿中。似乎可以与xlsx一起使用,但至少对我来说,它会对xlsm造成不可修复的损坏。在2020年尝试此操作-希望已修复,虽然我现在还不会和xlsm一起工作!