Bootstrap

python练习-openpyxl 从表格抽取数据生成新表格

程序文件名: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)

;