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

Jac*_*son 26 python 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

我现在要做的是在现有工作簿中打开现有工作表并写入该工作表.

我尝试过类似的东西:

from xlwt import open_workbook
wb = open_workbook("ex.xls")
s = wb.sheet_by_index(0)
print s.cell(0,0).value
Run Code Online (Sandbox Code Playgroud)

open_workbook只是xlrd模块的一部分,而不是xlwt.

有任何想法吗?

编辑1:在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')
Run Code Online (Sandbox Code Playgroud)

但是,这给了我以下错误消息:

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.
Run Code Online (Sandbox Code Playgroud)

编辑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')
Run Code Online (Sandbox Code Playgroud)

Jac*_*son 42

正如我在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')
Run Code Online (Sandbox Code Playgroud)

这将使用文本"a1"替换第一张"names.xls"中位于a1的单元格的内容,然后保存文档.

  • 谢谢,但此解决方案仅适用于xls格式.我尝试将此用于xlsx格式但会破坏文件.幸运的是,我有一个文件的备份,所以我可以冒这个风险,但对于那些没有,请确保你使用xls格式. (9认同)
  • 此外,值得注意的是,此过程会从电子表格中删除所有颜色格式和公式. (5认同)

Noa*_*oah 12

这是使用openpyxl与xlsx兼容的模块执行上述代码的另一种方法.从我到目前为止看到的,它也保持格式化.

from openpyxl import load_workbook
wb = load_workbook('names.xlsx')
ws = wb['SheetName']
ws['A1'] = 'A1'
wb.save('names.xlsx')
Run Code Online (Sandbox Code Playgroud)

  • 如上所述,如果您的工作簿包含图像,则它们不会保留在新的/编辑的工作簿中. (3认同)