使用xlsxwriter生成Excel2007的class,,# coding: ut
# coding: utf-8# xlswriter.pyimport xlsxwriterfrom schconst import *class XLSWriter(object): """A XLS writer that produces XLSX files from unicode data. """ def __init__(self, file, encoding='utf-8'): # must specify the encoding of the input data, utf-8 default. self.encoding = encoding self.wbk = xlsxwriter.Workbook(file) self.sheets = {} #头信息格式化 self.header_format = self.wbk.add_format({'bold': True,'align': 'center','valign': 'vcenter','border': 1}) #在线格式化 self.online_format = self.wbk.add_format({'align': 'center','border': 1,'valign': 'vcenter'}) #终端名称格式化 self.trm_format = self.wbk.add_format({'bold': True,'align': 'left','border': 1,'valign': 'vcenter'}) #离线格式化 self.offline_format = self.wbk.add_format({'align': 'center','valign': 'vcenter','border': 1,'font_color':'red'}) #合并单元格格式化 self.merge_format = self.wbk.add_format({'bold': 1,'border': 1,'align': 'center','valign': 'vcenter'}) #创建sheet def create_sheet(self, sheet_name='sheet'): """Create new sheet """ if sheet_name in self.sheets: sheet_index = self.sheets[sheet_name]['index'] + 1 else: sheet_index = self.sheets.__len__() self.sheets[sheet_name] = {'header': []} self.sheets[sheet_name]['index'] = sheet_index self.sheets[sheet_name]['sheet'] = self.wbk.add_worksheet(sheet_name) self.sheets[sheet_name]['rows'] = 1 #添加单元格 def cell(self, s): if isinstance(s, basestring): if not isinstance(s, unicode): s = s.decode(self.encoding) elif s is None: s = '' else: s = str(s) return s #添加非合并的单元格 def writerow(self, row, sheet_name='sheet'): if sheet_name not in self.sheets: self.create_sheet(sheet_name) if self.sheets[sheet_name]['rows'] >= 65534: self.create_sheet(sheet_name) for ci, col in enumerate(row): if col == TRM_STATUS_OFFLINE: self.sheets[sheet_name]['sheet'].write(self.sheets[sheet_name]['rows'], ci, self.cell(col) ,self.offline_format) elif col == TRM_STATUS_ONLINE or col == TRM_STATUS_NODATA: self.sheets[sheet_name]['sheet'].write(self.sheets[sheet_name]['rows'], ci, self.cell(col),self.online_format) elif '/' in col or col == u'终端名' or col == u'早' or col == u'中' or col == u'晚': self.sheets[sheet_name]['sheet'].write(self.sheets[sheet_name]['rows'], ci, self.cell(col),self.header_format) else: self.sheets[sheet_name]['sheet'].write(self.sheets[sheet_name]['rows'], ci, self.cell(col),self.trm_format) self.sheets[sheet_name]['rows'] += 1 #固定行数与列数 def freeze(self,sheet_name='sheet',row=0,column=0): if sheet_name not in self.sheets: self.create_sheet(sheet_name) self.sheets[sheet_name]['sheet'].freeze_panes(row, column) #两行,一列固定 #设定row行,column列的宽度为height_value def setcolheight(self,sheet_name='sheet',firstcol=0,lastcol=0,height_value=0): if sheet_name not in self.sheets: self.create_sheet(sheet_name) self.sheets[sheet_name]['sheet'].set_column(firstcol, lastcol, height_value)#第0行,0列宽度设置为30 #写标题 def writetitle(self, title_value='', sheet_name='sheet',row1=0,column1=0): if sheet_name not in self.sheets: self.create_sheet(sheet_name) self.sheets[sheet_name]['sheet'].write_string(row1,column1 ,title_value,self.header_format) #添加合并的单元格 def writemergerow(self, merge_value='', sheet_name='sheet',row1=0,row2=0,column1=0,column2=0): if sheet_name not in self.sheets: self.create_sheet(sheet_name) self.sheets[sheet_name]['sheet'].merge_range(row1,column1, row2, column2, merge_value,self.header_format) #添加多行单元格 def writerows(self, rows, sheet_name='sheet'): if rows == None: return for row in rows: self.writerow(row, sheet_name) #保存文件 def close(self): self.wbk.close()#测试数据#if __name__ == '__main__':# # test# xlswriter = XLSWriter(u'长沙.xls')# xlswriter.writemergerow(merge_value= u'日期',sheet_name=u'基本信息',row1=0, row2=0, column1=0, column2=0)# xlswriter.writemergerow(merge_value= '2013-12',sheet_name=u'基本信息',row1=0, row2=0, column1=1, column2=1)# xlswriter.writemergerow(merge_value= '2013-12-01',sheet_name=u'基本信息',row1=0, row2=0, column1=2, column2=4)# xlswriter.writerow(['终端名', '在线/次数', '早', '中', '晚'], sheet_name=u'基本信息')# xlswriter.writerow(['TRM01', '10/93', 'V', 'V', 'X'], sheet_name=u'基本信息')# xlswriter.writerow(['TRM02', '10/93', 'V', 'V', 'X'], sheet_name=u'基本信息')# xlswriter.writerow(['TRM03', '10/93', 'V', 'V', 'X'], sheet_name=u'基本信息') # don't forget to save data to disk# xlswriter.save()# print 'finished.'
评论关闭