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.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

 

你可能感兴趣的:(Python)