前面三篇博客我们介绍了xlwt模块对Excel表格的很多基础操作,这篇博客我们来自己写一些方法。让我们在操作Excel表格时,更加方便简单,同时也是对前面内容的回顾。 解析: 按行写入代码: 代码中的解析算是比较详细了,大家主要看代码吧。 测试: 文件截图: 2、按行写入多组数据: 文件截图: 测试: 文件截图: 代码: 解析: 测试: 文件截图: 代码: 解析: 1:先用sheet对象获取列或行对象 测试: 文件截图: 代码: 解析:自写根据列中字符串长度设置自动宽度 测试: 文件截图: 以上就是本篇博客的全部内容了,感谢阅读。Python xlwt 模块编辑 Excle 表格 实例:按行按列写入、自定义格式方法、自动调整列宽等
前言:
一、自写类实现:新建工作薄 sheet表,保存文件功能
class My_xlwt(object): def __init__(self,sheet_name = 'sheet_1',re_write = True): '''         自定义类说明:         :param sheet_name:默认sheet表对象名称,默认值为 'sheet_1'         :param re_write: 单元格重写写功能默认开启         '''         self.work_book = xlwt.Workbook()         self.sheet = self.work_book.add_sheet(sheet_name,                                 cell_overwrite_ok=re_write)         self.col_data = {} def save(self,file_name):         self.work_book.save(file_name) 
 自己写了一个My_xlwt的类,继承自Python所有对象的父类Object。在初始化方法中,新建了一个工作簿与sheet表。
 col_data字典用来收集所有写入sheet表的列信息,为后续设置自动调整列宽用。二、自写按行、按列写入方法
 def write(self,row,col,label,style = Style.default_style): '''         在默认sheet表对象一个单元格内写入数据         :param row: 写入行         :param col: 写入列         :param label: 写入数据         '''         self.sheet.write(row,col,label,style) # 将列数据加入到col_data字典中 if col not in self.col_data.keys():             self.col_data[col] = []             self.col_data[col].append(label) else:             self.col_data[col].append(label) def write_row(self,start_row,start_col,date_list,                   style = Style.default_style): '''         按行写入一行数据         :param start_row:写入行序号         :param start_col: 写入列序号         :param date_list: 写入数据:列表         :return: 返回行对象         ''' for col,label in enumerate(date_list):             self.write(start_row,start_col+col,label,style) return self.sheet.row(start_row) def write_rows(self,start_row,start_col,data_lists,                    style = Style.default_style): '''         按行写入多组数据         :param start_row: 开始写入行序号         :param start_col: 写入列序号         :param data_lists: 列表嵌套列表数据         :return: 返回写入行对象列表         '''         row_obj = [] for row_,data in enumerate(data_lists): if isinstance(data,list):                 self.write_row(start_row+row_,start_col,data,style)                 row_obj.append(self.sheet.row(start_row+row_)) else:                 msg = '数据列表不是嵌套列表数据,而是%s' % type(data) raise Exception(msg) return row_obj 
 1、按行写入一组列表数据:if __name__ == '__main__': # 实例化自写类     test = My_xlwt()     h_s = test.diy_style('Times New Roman',20)     s2 = test.diy_style('Times New Roman',10,False,1)      l1 = list(range(10))     l2 = ['数据%s'% i for i in range(10)] # 在0行0列写入一行数据     test.write_row(0,0,l1) # 在1行1列写入一行数据     test.write_row(1,1,l2) # 保存文件     test.save('my_test.xls') 
if __name__ == '__main__': # 实例化自写类     test = My_xlwt()     ls = [[1,2,3],['a','b','c','d'],['A','B','C','D','E']] # 在0行0列开始按行写入多组数据     test.write_rows(0,0,ls) # 保存文件     test.save('my_test.xls') 
 
 按列写入代码: def write_col(self,start_row,start_col,date_list,                   style = Style.default_style): '''         按列写入一列数据         :param start_row:写入行序号         :param start_col: 写入列序号         :param date_list: 写入数据:列表         :return: 返回写入的列对象         ''' for row,label in enumerate(date_list):             self.write(row+start_row,start_col,label,style) return self.sheet.col(start_col) def write_cols(self,start_row,start_col,data_lists,                    style = Style.default_style): '''         按列写入多列数据         :param start_row:开始写入行序号         :param start_col: 开始写入列序号         :param data_lists: 列表嵌套列表数据         :return: 返回列对象列表         '''         col_obj = [] for col_ ,data in enumerate(data_lists): if isinstance(data,list):                 self.write_col(start_row,start_col+col_,data,style)                 col_obj.append(self.sheet.col(start_col+col_)) else:                 msg = '数据列表不是嵌套列表数据,而是%s' % type(data) raise Exception(msg) return col_obj 
 1、按列写入一组、多组数据:if __name__ == '__main__': # 实例化自写类     test = My_xlwt()     l3 = ['列%s' % i for i in range(10)] # 在0行0列写入一列数据     test.write_col(0,0,l3)     ls2 = [[1,2,3],['a','b','c','d'],['A','B','C','D','E']] # 在0行1列开始写入多列数据     test.write_cols(0,1,ls2) # 保存文件     test.save('my_test.xls') 
 
三、自写创建格式方法
 def diy_style(self,font_name,font_height,bold = True,horz = 2): '''         创建单元格格式:(默认垂直居中)         :param font_name: 字体名称         :param font_height: 字体高度         :param bold: 默认加粗         :param horz: 水平对齐方式,默认水平居中:2,左对齐:1,右对齐:3         :return: 返回设置好的格式         '''         style = xlwt.XFStyle() # 字体设置         font = style.font         font.name = font_name         font.height = font_height*20         font.bold = bold         # 对齐方式         alignment = style.alignment         # 水平居中         alignment.horz = horz         # 垂直居中         alignment.vert = 1 return style 
 1、这里我们自定义了一个方法来创建单元格格式;
 2、可设置字体名称、字体大小,是否加粗、对齐方式。
 按行、按列写入数据,使用自定义的创建格式方法来写入数据:if __name__ == '__main__': # 实例化自写类     test = My_xlwt()     l4 = ['行%s'% i for i in range(5)]     l5 = ['列%s'% i for i in range(3)]     ls3 = [[1,2,3],['a','b','c','d'],['A','B','C','D','E']] # 使用自写的创建单元格格式方法来创建以下两种格式 # Times New Roman 字体,20号大小,加粗,水平居中,垂直居中     h_s = test.diy_style('Times New Roman',20) # Times New Roman 字体,10号大小,不加粗,水平左对齐,垂直居中     s2 = test.diy_style('Times New Roman',10,False,1) # 写入数据 # 0行,1列 按行写入数据 格式 h_s      test.write_row(0,1,l4,h_s) # 1行,0列 按列写入数据 格式 h_s     test.write_col(1,0,l5,h_s) # 1行,1列 按行写入多组数据 格式 s2     test.write_rows(1,1,ls3,s2) # 保存文件     test.save('my_test.xls') 
四、自写设置行高列宽方法
 def set_col_width(self,col_ro_cols,width): '''         设置单元格宽度         :param col_ro_cols: 一个列序号,或列序号列表         :param width: 列宽度         :return: None         ''' if isinstance(col_ro_cols,int):             self.sheet.col(col_ro_cols).width = 256*width         else: for col_ in col_ro_cols:                 self.sheet.col(col_).width = 256*width                      def set_row_height(self,row_ro_rows,height): '''         设置单元格高度         :param row_ro_rows:行序号、或行序号列表         :param height: 行高度         :return: None         ''' if isinstance(row_ro_rows, int):             self.sheet.row(row_ro_rows).height_mismatch = True             self.sheet.row(row_ro_rows).height = 20 * height         else: for row_ in row_ro_rows: # 需先将单元格高度不自动匹配单元格内容高度打开,才能设置高度                 self.sheet.row(row_).height_mismatch = True                 self.sheet.row(row_).height = 20 * height 
 设置单元格宽度、高度方法前面好像没说过,很简单:
 sheet.row(row_index)   /sheet.col(col_index)
 2:设置宽度、高度值:
 sheet.row(row_index).width = width
 设置行高时,需先:
 sheet.col(col_index).height_mismatch = True
 然后再设置:
 sheet.col(col_index).height = height
 设置列宽及行高:if __name__ == '__main__': # 实例化自写类     test = My_xlwt()     ls4 = [[1,2],['a','b','c'],['A','B','C'],['D','E','F','G']]     test.write_rows(0,0,ls4) # 设置第0列宽度为 15     test.set_col_width(0,15) # 设置第1、3列宽度为 20     test.set_col_width([1,3],20) # 设置第0、1、2 行高度为 25     test.set_row_height([0,1,2],25) # 保存文件     test.save('my_test.xls') 
 
五、自写根据数据自动调整列宽、统一设置行高方法
 def adjust_col_width(self,font_height): '''         设置自适应列宽         :param font_height: 文字字体高度         :return: None         ''' # 获取字符串长度 def string_len(string):             length = 0 for s in string: if s.isupper() or s.islower():                     length += 2 elif s.isspace():                     length += 1 else:                     length += 3 return length          col_width = {}         mul = font_height * 20 for col,str_len in self.col_data.items():             max_len = max([string_len(str(i)) for i in str_len])             col_width[col] = max_len          for col_,width_ in col_width.items(): if width_*mul <= 2350:                 self.sheet.col(col_).width = 2350 else:                 self.sheet.col(col_).width = mul*width_      def set_unite_height(self,height): '''         设置统一行高         :param height:行高         :return:None         '''         rows = self.sheet.get_rows().keys() for row in rows:             self.set_row_height(row,height) 
 1、因中、英文长度不一致,所以写了一个计算长度的方法:string_len();
 2、之所以要获取col_data 是因为 xlwt 的sheet对象获取在写入数据方法时是以行写入的 用get_cols()方法获取列会出问题,所以就自己定义了一个col_data 字典,然后通过自定义的 write 方法来收集列信息
 3、列宽其实和字体大小也有关系,在 xlwt 模块里想要获取已写入的数据、单元格字体大小,挺复杂的,只能暂时将字体大小作为一个参数传入了。
 设置自适应宽度、统一单元格高度:if __name__ == '__main__': # 实例化自写类     test = My_xlwt() # 创建一组数据     ls5 = [[1, 2], ['abcdefghijk', 'b', 'c'], ['A', 'B', 'CDEFGHIJKLMNSFSD'], ['D', 'E', 'F', 'G','这是新建的测试中文数据字符串']] # 按行写入     test.write_rows(0,0,ls5) # 自写根据列中字符串长度设置自动宽度     test.adjust_col_width(10) # 设置统一高度     test.set_unite_height(20) # 保存文件     test.save('my_test.xls') 
最后:
 关于Python xlwt 模块操作Excel表格的内容,加上前面的三节也介绍的差不多了。后面将会是 Python的 xlrd 模块对 Excel表格的读取的内容。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
 官方软件产品操作指南 (170)
官方软件产品操作指南 (170)