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)