使用xlrd和xlwt编辑现有的Excel工作簿和工作表

xlrdxlwt的文档中 ,我学到了以下内容:

如何从现有的工作簿/表中读取:

 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 

如何创build新的工作簿/工作表:

 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

有任何想法吗?

编辑1:Olives的build议后,我看着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') 

正如我在编辑中所写的那样,要编辑现有的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') 

这将第一张“names.xls”中位于a1的单元格的内容replace为文本“a1”,然后保存该文档。

下面是使用与xlsx和xlsm兼容的openpyxl模块执行上述代码的另一种方法。 从我目前看到的,它也保持格式。

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