一、xlrd、xlwt读写Excel
1、读操作
import xlrd
# 1、打开工作本workbook
xlsx = xlrd.open_workbook(r'.\7月下旬入库表.xlsx')
# 2、打开需要操作的表sheet
table = xlsx.sheet_by_index(0)
# table = xlsx.sheet_by_name('7月下旬入库表')
# 3、读取指定单元格的数据
print(table.cell_value(1,1))
print(table.cell(1,1).value)
print(table.row(1)[1].value)
2、写操作
import xlwt
# 1、新建一个工作本
new_workbook = xlwt.Workbook()
# 2、为这个工作本中添加一个工作表
worksheet = new_workbook.add_sheet('new_test')
# 3、向指定单元格写入内容
worksheet.write(0,0,'test')
# 4、保存
new_workbook.save('./test.xls')
3、带文字格式的写入操作
from xlutils.copy import copy
import xlrd
import xlwt
# 1、打开需要进行操作的工作本,并将其进行复制操作
# 注意:使用读取xls文件的时候都是使用的xlrd库,但是这个库只能操作 .xls格式,对于后来的 .xlsx的版本支持不算太好
# formatting_info 该参数默认为False,这可以节省内存;当取值为True时,会读取各种格式的信息
tem_excel = xlrd.open_workbook(r'.\日统计.xls',formatting_info=True)
# 2、选择需要操作的工作表
tem_sheet = tem_excel.sheet_by_index(0)
# 3、新建一个工作本,通过复制模板工作本的方式
new_excel = copy(tem_excel)
# 4、选择新的工作本中需要操作的工作表
new_sheet = new_excel.get_sheet(0)
# 初始化样式
style = xlwt.XFStyle()
# 初始化字体
font = xlwt.Font()
font.name = '微软雅黑'
font.bold = True
font.height = 18 * 20
style.font = font
# 初始化边框,细边框
borders = xlwt.Borders()
borders.top = xlwt.Borders.THIN
borders.bottom = xlwt.Borders.THIN
borders.left = xlwt.Borders.THIN
borders.right = xlwt.Borders.THIN
style.borders = borders
# 初始化对齐方式
alignment = xlwt.Alignment()
alignment.horz = xlwt.Alignment.HORZ_CENTER
alignment.vert = xlwt.Alignment.VERT_CENTER
style.alignment = alignment
# 5、向已选择的工作表中写入数据
new_sheet.write(2,1,12,style)
new_sheet.write(3,1,18,style)
new_sheet.write(4,1,19,style)
new_sheet.write(5,1,15,style)
# 6、保存文件
new_excel.save('./填写.xls')
4、综合案例:
import xlrd
import xlwt
from xlutils.copy import copy
xlsx = xlrd.open_workbook(r'.\7月下旬入库表.xlsx')
table = xlsx.sheet_by_index(0)
all_data = []
# 循环读取每一行的中的数据
for n in range(1,table.nrows):
company = table.cell(n,1).value # 销售商
price = table.cell(n,3).value # 单价
weight = table.cell(n,4).value # 入库量
data = {'company':company,'weight':weight,'price':price}
all_data.append(data)
# 以下内容可以用pandas的groupby轻易实现,这里用了一个笨方法
a_weight = []
a_total_price = []
b_weight = []
b_total_price = []
c_weight = []
c_total_price = []
d_weight = []
d_total_price = []
# 计算每个销售商的总入库量 和 总价
for i in all_data:
if i['company'] == '张三粮配':
a_weight.append(i['weight'])
a_total_price.append(i['weight'] * i['price'])
if i['company'] == '李四粮食':
b_weight.append(i['weight'])
b_total_price.append(i['weight'] * i['price'])
if i['company'] == '王五小麦':
c_weight.append(i['weight'])
c_total_price.append(i['weight'] * i['price'])
if i['company'] == '赵六麦子专营':
d_weight.append(i['weight'])
d_total_price.append(i['weight'] * i['price'])
tem_excel = xlrd.open_workbook(r'.\7月下旬统计表.xls',formatting_info=True)
tem_sheet = tem_excel.sheet_by_index(0)
new_excel = copy(tem_excel)
new_sheet = new_excel.get_sheet(0)
style = xlwt.XFStyle()
# 初始化字体
font = xlwt.Font()
font.name = '微软雅黑'
font.bold = True
font.height = 18 * 20
style.font = font
# 初始化边框,细边框
borders = xlwt.Borders()
borders.top = xlwt.Borders.THIN
borders.bottom = xlwt.Borders.THIN
borders.left = xlwt.Borders.THIN
borders.right = xlwt.Borders.THIN
style.borders = borders
# 初始化对齐方式
alignment = xlwt.Alignment()
alignment.horz = xlwt.Alignment.HORZ_CENTER
alignment.vert = xlwt.Alignment.VERT_CENTER
style.alignment = alignment
new_sheet.write(2,1,len(a_weight),style)
new_sheet.write(2,2,round(sum(a_weight)),style)
new_sheet.write(2,3,round(sum(a_total_price),2),style)
new_sheet.write(3,1,len(b_weight),style)
new_sheet.write(3,2,round(sum(b_weight)),style)
new_sheet.write(3,3,round(sum(b_total_price),2),style)
new_sheet.write(4,1,len(c_weight),style)
new_sheet.write(4,2,round(sum(c_weight)),style)
new_sheet.write(4,3,round(sum(c_total_price),2),style)
new_sheet.write(5,1,len(d_weight),style)
new_sheet.write(5,2,round(sum(d_weight)),style)
new_sheet.write(5,3,round(sum(d_total_price),2),style)
new_excel.save('./7月下旬统计表.xls')