xlrd和xlwt封装,实现修改、删除excel文档单元格内容,插入、删除行

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[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<row):
                    sheet.write(i,j,double_list[i][j])
                elif(i==row):
                    pass
                else:
                    sheet.write(i-1,j,double_list[i][j])
        #保存excel表,命名为"login_xlsx_result.xls",如果同名文件已经存在,则覆盖原文件
        #不指定新文件名则覆盖原来的文件,即book.save(self.file)这样就可以重复修改
        #第一次实例化后,以后就尽情的用了,否则每次使用这个函数时都要操心实例化
        book.save(new_file)  
    
    #插入行
    #new_row是一个列表,指定新行的内容    
    def insert_row(self,row,new_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")
        for i in range(len(double_list)):
            for j in range(len(double_list[i])):
                if(i<row):
                    sheet.write(i,j,double_list[i][j])
                elif(i==row):
                    sheet.write(i,j,new_row[j])
                    sheet.write(i+1,j,double_list[i][j])
                else:
                    sheet.write(i+1,j,double_list[i][j])
        #保存excel表,命名为"login_xlsx_result.xls",如果同名文件已经存在,则覆盖原文件
        #不指定新文件名则覆盖原来的文件,即book.save(self.file)这样就可以重复修改
        #第一次实例化后,以后就尽情的用了,否则每次使用这个函数时都要操心实例化
        book.save(new_file)  
    
    #修改单元格的内容    
    def modify_cell(self,row,col,new_value,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==row and j==col:
                    sheet.write(i,j,new_value)
                else:
                    sheet.write(i,j,double_list[i][j])
        
        book.save(new_file)  
    
    #删除单元格的内容    
    def del_cell(self,row,col,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==row and j==col:
                    pass
                else:
                    sheet.write(i,j,double_list[i][j])
        
        book.save(new_file)  
    

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值