xlwt不能修改已有的excel文档。这里我在xlrd和xlwt基础上实现了修改excel文档的功能,包括插入、删除行,修改单元格内容、删除单元格内容。
限制:
虽然能够打开xlsx文件,但是只能生成xls文件。
公式和宏丢失了。
注意:
行和列都是从0开始计数
#coding=UTF-8
#python 3.4 3.6
#excel 2007
#author=liuyifan
#date=20171102
#xlrd 1.1
#xlwt 1.3
'''
在xlrd和xlwt基础上
实现了修改excel表的功能,包括插入、删除行,修改单元格内容、删除单元格内容。
限制:
只能生成xls文件。注:能够打开xlsx文件。
公式和宏丢失了。
注意:
行和列都是从0开始计数
'''
import xlrd
import xlwt
class Excel():
def __init__(self,file_name):
self.file=file_name
#把sheet中的内容copy到双层列表中,每一个元素是一行
#因为xlrd读出来的是结果,而不是公式
#所以copy到列表中再copy回去,excel公式变成了固定的数值。宏肯定没有了。
def sheet_into_list(self,sheet_index=0):
sheet_list=[]
with xlrd.open_workbook(self.file) as f:
#提取excel文档的sheet
table=f.sheet_by_index(sheet_index)
#每一行是一个列表
#nrows是sheet的行数
for row in range(0,table.nrows):
sheet_list.append([])
#没有使用row_len(rowx)
for col in range(0,table.ncols):
sheet_list[row].append(table.row_values(row)[col])
return sheet_list
#把双层列表中的内容copy到excel文档中,每一个元素是一行
#double_list是双重列表
def list_into_sheet(self,double_list):
book=xlwt.Workbook()
#生产一个名为login_result的sheet
sheet=book.add_sheet("result")
#将案例描述和执行结果逐行写入sheet中
for i in range(len(double_list)):
for j in range(len(double_list[i])):
sheet.write(i,j,double_list[i][j])
#保存excel表,命名为"login_xlsx_result.xls",如果同名文件已经存在,则覆盖原文件
#尝试生成.xlsx文件,结果无法打开,提示文件格式无效
book.save("result.xls")
#拷贝一个excel文档
def copy_excel(self):
return self.list_into_sheet(self.sheet_into_list())
#删除行
#即使每一行的内容不一样多,也没有问题
def del_row(self,row,new_file=None):
if new_file==None:
new_file=self.file
double_list=self.sheet_into_list()
book=xlwt.Workbook()
#产生一个名为result的sheet
sheet=book.add_sheet("result")
#xlwt是不允许覆盖cell的
#不写指定行就是删除原文件中的那一行
for i in range(len(double_list)):
for j in range(len(double_list[i])):
if(i|