文章引用自網(wǎng)易云課堂《用Python自動(dòng)辦公,做職場(chǎng)高手》
網(wǎng)址:https://study.163.com/course/introduction/1006277004.htm
測(cè)試文件1:https://share.weiyun.com/5bFo3Sk
測(cè)試文件2:https://share.weiyun.com/5NRq0zM
一贮竟、統(tǒng)計(jì)報(bào)表格式
import xlrd
import xlwt
from xlutils.copy import copy
xlsx = xlrd.open_workbook('d:/auto_office/excel/7月下旬入庫(kù)表.xlsx')
table = xlsx.sheet_by_index(0)
all_data = [] # 創(chuàng)建一個(gè)列表,用來(lái)存儲(chǔ)工作簿中每一行的數(shù)據(jù)
for n in range(1, table.nrows): # 用for循環(huán)贤徒,使n的值從1到10,步長(zhǎng)為1. table.nrows為讀取整個(gè)列表的行數(shù)
company = table.cell(n, 1).value # 讀取第n行的銷售商名稱
price = table.cell(n, 3).value # 讀取第n行的單價(jià)
weight = table.cell(n, 4).value # 讀取第n行的重量
data = {'company':company, 'weight':weight, 'price':price} # 構(gòu)建成'銷售商|入庫(kù)量|單價(jià)'的結(jié)構(gòu)
all_data.append(data) # 添加到上面創(chuàng)建的列表里
a_weight = [] # 創(chuàng)建一個(gè)列表杂腰,用于儲(chǔ)存'張三糧配'的噸數(shù)虐骑,不是直接累加,而是單個(gè)存儲(chǔ)
a_total_price = [] # 創(chuàng)建一個(gè)列表扔水,用于儲(chǔ)存'張三糧配'的每一次入庫(kù)總價(jià),不是直接累加朝氓,而是單個(gè)存儲(chǔ)
b_weight = [] # 創(chuàng)建一個(gè)列表魔市,用于儲(chǔ)存'李四糧食'的噸數(shù)
b_total_price = [] # 創(chuàng)建一個(gè)列表,用于儲(chǔ)存'李四糧食'的每一次入庫(kù)總價(jià)
c_weight = [] # 創(chuàng)建一個(gè)列表赵哲,用于儲(chǔ)存'王五小麥'的噸數(shù)
c_total_price = [] # 創(chuàng)建一個(gè)列表待德,用于儲(chǔ)存'王五小麥'的每一次入庫(kù)總價(jià)
d_weight = [] # 創(chuàng)建一個(gè)列表,用于儲(chǔ)存'趙六麥子專營(yíng)'的噸數(shù)
d_total_price = [] # 創(chuàng)建一個(gè)列表枫夺,用于儲(chǔ)存'趙六麥子專營(yíng)'的每一次入庫(kù)總價(jià)
for i in all_data: # 用for循環(huán)歷遍all_data中的所有條目
if i['company'] == '張三糧配': # 如果條目中的公司為'張三糧配'
a_weight.append(i['weight']) # 儲(chǔ)存'張三糧配'的噸數(shù)将宪,不是直接累加,而是單個(gè)存儲(chǔ)
a_total_price.append((i['weight'] * i['price'])) # 儲(chǔ)存'張三糧配'的每一次入庫(kù)總價(jià)橡庞,不是直接累加较坛,而是單個(gè)存儲(chǔ)
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'] == '趙六麥子專營(yíng)':
d_weight.append(i['weight'])
d_total_price.append((i['weight'] * i['price']))
tem_excel = xlrd.open_workbook('d:/auto_office/excel/統(tǒng)計(jì)表_模板.xls', formatting_info=True) # 帶著格式打開(kāi)'日統(tǒng)計(jì)表.xls'
tem_sheet = tem_excel.sheet_by_index(0) # 通過(guò)索引讀取工作表1
new_excel = copy(tem_excel) # 復(fù)制tem_excel模板
new_sheet = new_excel.get_sheet(0) # 獲取新new_excel的工作表1
style = xlwt.XFStyle() # 初始化一個(gè)樣式,style
font = xlwt.Font() # 初始化一個(gè)字體
font.name = '微軟雅黑' # 選擇'微軟雅黑'字體
font.bold = True # 加粗,不加粗寫(xiě)False
font.height = 360 # 設(shè)置字體大小扒最,18號(hào) * 系數(shù)20 = 360
style.font = font # style的字體樣式為上面的font
borders = xlwt.Borders() # 初始化單元格的表框
borders.top = xlwt.Borders.THIN # 添加細(xì)線上邊丑勤,THIN表示細(xì)線
borders.bottom = xlwt.Borders.THIN # 添加下邊
borders.left = xlwt.Borders.THIN # 添加細(xì)線左邊
borders.right = xlwt.Borders.THIN # 添加細(xì)線右邊
style.borders = borders # style的邊框樣式為上面的borders
alignment = xlwt.Alignment() # 初始化對(duì)齊
alignment.horz = xlwt.Alignment.HORZ_CENTER # 水平居中
alignment.vert = xlwt.Alignment.VERT_CENTER # 垂直居中
style.alignment = alignment # style的對(duì)齊方式為上面的alignment
new_sheet.write(2, 1, len(a_weight), style) # len()可以統(tǒng)計(jì)a_weight列表的條目數(shù),即統(tǒng)計(jì)共有多少車
new_sheet.write(2, 2, round(sum(a_weight), 2), style) # sum()對(duì)a_weight的數(shù)據(jù)進(jìn)行求和吧趣,即計(jì)算總噸數(shù)确封,round()保留兩位小數(shù)
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), 2), 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), 2), 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), 2), style)
new_sheet.write(5, 3, round(sum(d_total_price), 2), style)
new_excel.save('d:/auto_office/excel/日統(tǒng)計(jì)(填寫(xiě)).xls')