程序文件名:ex.py,从文件"c:/tmp/数据透视表.xlsx" 中抽取指定城市的指定月份的销售情况,生成一个excel文件,后缀名是 .xlsx的,放在c:/tmp下面
生成的excel文件,文件名为 "城市名+月份+销售情况.xlsx"。内容是该市该月所有种类商品按销售数量从高到低排序,且销售额、成本、利润都显示为带逗号的那种形式,且保留小数点后面2位。其中,利润格子里面的内容是公式,即销售额减去成本。参看样例结果文件。结果文件的工作表的title和文件名一致。
要求结果文件第一行背景色是绿色
要求显示各项金额的格子足够宽能够显示完整,不可因不够宽而显示成 #####以至于要手工拉大才可完整看见。
需要支持2种用法,示例如下:
用法1:
python ex.py 苏州 7
生成苏州7月销售情况
用法2:
python ex.py
请输入要查询的城市:苏州
请输入要查询的月份:7
如果找不到相应城市,就输出:"没有这个城市的销售记录"
如果找不到相应月份的数据,就输出:"该城市没有指定月份的销售记录"
都找不到,还是输出:"没有这个城市的销售记录"
import openpyxl
import datetime
from openpyxl.styles import PatternFill
import sys
if len(sys.argv)==1:
city=input("请输入要查询的城市:")
month=input("请输入要查询的月份:")
else:
city=sys.argv[1]
month=sys.argv[2]
name=city+month+"月销售情况"
newBook=openpyxl.Workbook()
newName=name+".xlsx"
sheet0=newBook.active
sheet0.title=name
book=openpyxl.load_workbook("数据透视表.xlsx", data_only=True)
sheet=book.worksheets[2]
dt={}
i=0
mrow=sheet.max_row
for row in sheet[2:mrow]:
value=[]
for cell in row:
value.append(cell.value)
m=value[0].month
if m==int(month) and value[1]==city:
product=value[2]
num=value[3]
sale=float(value[4])
cost=float(value[5])
if product in dt:
dt[product][0]+=num
dt[product][1]+=sale
dt[product][2]+=cost
else:
dt[product]=[num,sale,cost]
data=[]
for x in dt.items():
data.append(x)
data.sort(key=lambda x:-x[1][1])
l=len(data)
widc=widd=wide=0
for i in range(2,l+2):
sheet0.cell(row=i,column=1).value=data[i-2][0]
sheet0.cell(row=i,column=2).value=data[i-2][1][0]
sheet0.cell(row=i,column=3).value=round(data[i-2][1][1],2)
sheet0.cell(row=i,column=4).value=round(data[i-2][1][2],2)
gongshi="=C"+str(i)+"-D"+str(i)
sheet0.cell(row=i,column=5).value=gongshi
sheet0.cell(row=i,column=3).number_format="#,##0.00"
sheet0.cell(row=i,column=4).number_format="#,##0.00"
sheet0.cell(row=i,column=5).number_format="#,##0.00"
widc=max(widc,len(str(sheet0.cell(row=i,column=3).value))*2)
widd=max(widd,len(str(sheet0.cell(row=i,column=4).value))*2)
wide=max(wide,len(str(sheet0.cell(row=i,column=5).value))*2)
sheet0.column_dimensions['C'].width=widc
sheet0.column_dimensions['D'].width=widd
sheet0.column_dimensions['E'].width=wide
sheet0['A1'].value="产品类别"
sheet0['B1'].value="数量"
sheet0['C1'].value="销售额"
sheet0['D1'].value="成本"
sheet0['E1'].value="利润"
for cell in sheet0[1]:
cell.fill=PatternFill(patternType="solid",fgColor="00ff00")
newBook.save(newName)