python excel使用进阶篇

需求:定期的统计一些内容,将这些内容写入到excel中,要求:excel以当天日期为名,sheet页以当前时间为名


本文的思路如下:

1.首先检查excel 是否存在

2.如果不存在, 就创建excel,然后写入数据

3.如果存在,先打开,然后复制一份,再追加一个sheet页,写入新的数据。


思路来源: 使用xlwt,xlrd 这两个模块来读写excel,但是这两个模块一个是负责写的,一个是负责读的,并不能同时读写,因此如果有表格存在,就先以读的形式打开,然后复制以为,重新写入,再追加新的数据


代码如下:

#coding:utf-8 

import time,os

import xlrd 
import xlwt
from xlutils.copy import copy
import sys
reload(sys)  
sys.setdefaultencoding('utf-8')  


#计算时间函数,作为装饰器存在
def print_run_time(func):  
    def wrapper(*args, **kw):  
        local_time = time.time()  
        func(*args, **kw) 
        print 'current Function [%s] run time is %.2f' % (func.__name__ ,time.time() - local_time)  
    return wrapper 

@print_run_time
def create_excel(data):
	excle_file_name=str(time.strftime('%Y-%m-%d')+'.xls')#以当天日期创建excel表
	
	#判断一个文件是否存在	
	def file_is_exist(file_name):
		path = os.path.join(os.getcwd()+'/'+file_name)
		print 'current file [%s] path is [%s]' % (file_name,path)
		is_exists = os.path.exists(path)
		return is_exists

	#读取复制一份,并且增加一张新表	
	def read_and_copy_excle(excle_file_name):
		read_excel_flag=xlrd.open_workbook(excle_file_name,formatting_info=True)#保存原有格式
		count = len(read_excel_flag.sheets()) #sheet数量
		for r in read_excel_flag.sheets():
			print r.name #sheet名称
		worksheet_copy=copy(read_excel_flag)#复制一份excel
		write_excel(worksheet_copy,excle_file_name)#之后再次插入一份
		
	#写excel
	def write_excel(excel_flag,excle_file_name):
		sheet_name=str(time.strftime('%Y-%m-%d_%H-%M-%S'))
		sheet_flag = excel_flag.add_sheet(sheet_name,cell_overwrite_ok=True) #创建sheet
		first_line=[u'编号',u'标题',u'阅读次数',u'评论次数',u'文章地址']
		
		
		#定义字体式样 
		style = xlwt.easyxf('font:height 240, color-index red, bold on;align: wrap on, vert centre, horiz center');
		#生成第一行
		for i in range(0,len(first_line)):
			sheet_flag.write(0,i,first_line[i],style)
			sheet_flag.col(i).width=256*15#设置单元格宽度
			
			
		#这里的数据处理的是测试数据,处理自己的数据需要重写这几行代码,但是思路是一样的	
		row_index=1
		for data_detail in data:
			cols_index =0
			sheet_flag.write(row_index,cols_index,data_detail,set_style('Arial',300,False))
			#sheet_flag.col(cols_index).width=sheet_flag.col(cols_index+1).width
			cols_index +=1
			row_index +=1
		excel_flag.save(excle_file_name) #保存文件
		
	#定义单元格字体式样, 其实这种方法不是特别好用
	def set_style(name,height,bold):
		style = xlwt.XFStyle() # 初始化样式
		
		font = xlwt.Font() # 为样式创建字体
		font.name = name # 'Times New Roman'
		font.bold = bold
		font.color_index = 4
		font.height = height
	 
		borders= xlwt.Borders()
		borders.left= 6
		borders.right= 6
		borders.top= 6
		borders.bottom= 6
		
		style.font = font
		style.borders = borders
		return style
	
	#文件存在就复制一份,并在其表的后面插入一个,不存在就新创建一个
	if file_is_exist(excle_file_name):
		print 'file 【%s】 exist ' % excle_file_name
		read_and_copy_excle(excle_file_name)#复制一个excle并追加一个sheet页
	else:
		print 'file 【%s】is not  exist, will create it ' % excle_file_name
		excel_flag=xlwt.Workbook()#新建excel工作薄
		write_excel(excel_flag,excle_file_name)
	
if  __name__ == '__main__':
	print '''
			***************************************** 
			**    Welcome to Spider of excel       ** 
			**      Created on 2017-05-05          ** 
			**      @author: Jimy _Fengqi          ** 
			*****************************************
	'''
	test_data=[j for j in range(0,200,2)]#这里仅仅用一些测试数据
	create_excel(test_data)


posted @ 2017-05-05 17:28  枫奇丶宛南  阅读(26)  评论(0编辑  收藏  举报