追加数据
import xlrd
import xlwt
from xlutils.copy import copy
oldWb = xlrd.open_workbook(old_file, formatting_info=True) 只有xls文件支持formatting_info,保留原始格式
newWb = copy(oldWb) #拷贝原始文件
sheet = newWb.get_sheet(0) #原始文件中存在sheetname=0的文件
sheet.write(row, col, data, style) #row行,col列,data追加的数据,style数据样式
newWb.save(new_file)
注:一定要保存为.xls文件类型。
写新的excel文件
#!/usr/bin/env python
#coding:utf-8
import xlsxwriter
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
workbook = xlsxwriter.Workbook('demo1.xlsx') #创建一个Excel文件
worksheet = workbook.add_worksheet() #创建一个工作表对象Sheet1
worksheet2 = workbook.add_worksheet('Foglio2') # Foglio2
title = [u'业务名称', u'星期一', u'星期二', u'星期三', u'星期四', u'星期五', u'星期六', u'星期日', u'平均流量']
buname = [u'业务官网', u'新闻中心', u'购物频道', u'体育频道', u'亲子频道'] #定义频道名称#定义5频道一周7天流量数据列表
data = [
[150, 152, 158, 149, 155, 145, 148],
[89, 88, 95, 93, 98, 100, 99],
[201, 200, 198, 175, 170, 198, 195],
[75, 77, 78, 78, 74, 70, 79],
[88, 85, 87, 90, 93, 88, 84],]
format=workbook.add_format() #定义format格式对象
format.set_border(1) #定义format对象单元格边框加粗(1像素)的格式
format_title=workbook.add_format() #定义format_title格式对象
format_title.set_border(1) #定义format_title对象单元格边框加粗(1像素)的格式
format_title.set_bg_color('#cccccc') #定义format_title对象单元格背景颜色为 #'#cccccc'的格式
format_title.set_align('center') #定义format_title对象单元格居中对齐的格式
format_title.set_bold() #定义format_title对象单元格内容加粗的格式
format_ave=workbook.add_format() #定义format_ave格式对象
format_ave.set_border(1) #定义format_ave对象单元格边框加粗(1像素)的格式
format_ave.set_num_format('0.00') #定义format_ave对象单元格数字类别显示格式
#下面分别以行或列写入方式将标题、业务名称、流量数据写入起初单元格, 同时引用不同格式对象
worksheet.write_row('A1', title, format_title)
worksheet.write_column('A2', buname, format)
worksheet.write_row('B2', data[0], format)
worksheet.write_row('B3', data[1], format)
worksheet.write_row('B4', data[2], format)
worksheet.write_row('B5', data[3], format)
worksheet.write_row('B6', data[4], format)
#图表
chart = workbook.add_chart({'type':'column'}) #创建一个column (柱形)图表
#area:面积样式;bar:条形样式;column:柱形样式 line:线条样式 pie:饼图;
#scatter:散点样式 stock:股票样式 radar:雷达样式
#定义图表数据系列函数
def chart_series(cur_row):
worksheet.write_formula('I'+cur_row,'=AVERAGE(B'+cur_row+':H'+cur_row+')', format_ave)
#计算(AVERAGE函数)频道周平均流量
chart.add_series({
'categories': '=Sheet1!$B$1:$H$1', #将“星期一至星期日”作为图表数据标签(X轴)
'values': '=Sheet1!$B$'+cur_row+':$H$'+cur_row, #频道一周所有数据作为数据区域
'line': {'color': 'black'}, #线条颜色定义为black(黑色)
'name': '=Sheet1!$A$'+cur_row, #引用业务名称为图例项
})
for row in range(2,7): #数据域以第2~6行进行图表数据系列函数调用
chart_series(str(row))
#chart.set_table() #设置X轴表格格式, 本示例不启用
#chart.set_style(30) #设置图表样式, 本示例不启用
chart.set_size({'width': 577, 'height': 287}) #设置图表大小
chart.set_title({'name': u'业务流量周报图表'}) #设置图表(上方)大标题
chart.set_y_axis({'name': 'Mb/s'}) #设置y轴(左侧)小标题
worksheet.insert_chart('A8', chart) #在A8单元格插入图表
workbook.close()