你这里存在一个误区,只靠xlrd和xlwt不能直接实现对已经存在Excel进行数据插入,原因如下:
1、使用xlrd的xlrd.open_workbook()方法打开文件返回的是一个只读对象,只能读Excel内容,不能向Excel写入数据;
2、使用xlwt的xlwt.Workbook()方法是创建一个空的Excel对象,然后向里面写入;
所以读取和创建Excel都可以直接实现,但是修改已经存在的Excel需要借助xlutils,它的作用是在xlrd类型的workbook和xlwt类型的workbook之间建立了一个管道,利用xlutils的copy方法将只读对象变成可写对象,简单代码实现如下:
import xlrd
from xlutils.copy import copy
readOnlyWorkbook = xlrd.open_workbook('TestFile.xls')
readOnlySheet= readOnlyWorkbook.sheet_by_index(0) # 通过sheet_by_index()获取的sheet没有write()方法
writableWorkbook= copy(readOnlyWorkbook) # 利用xlutils.copy函数,将xlrd.Book转为xlwt.Workbook
writableSheet = writableWorkbook.get_sheet(0) # 通过get_sheet()获取的sheet有write()方法
writableSheet.write(3, 3, 'insertData') # 写入3,3这个单元格
writableWorkbook.save('TestFile.xls') # 保存文件
你自己增加代码判断原Excel某个单元格是否有数据,完善你的代码,避免插入时覆盖了,运行后Excel情况见截图
上述方法我写的是不能“直接”实现已有Excel的数据插入或修改,但是可以间接的来
使用xlrd读原有Excel
使用xlwt创建一个新文件并把1中读取的内容写入
再插入需要增加的数据,保存
删掉原Excel,把新创建的Excel改成原Excel的名字
这种方法你就自己玩,因为原来Excel可能有格式啊,公式啊什么的,新创建就会很麻烦