xlwt 设置样式,多种样式

153 篇文章 4 订阅

设置白色背景色、黄色背景色、实线边框等

import xlwt, time
from models import session, Sites, Filtered, Odm_id,Ww, Week_name, Week_data, func, Web_week_data_filtered, and_, case\
    , Sap_material, On_way
from config import convert_to_letter, current_day
from datetime import datetime
from config import current_day, current_week_num

def set_boarders():
    borders = xlwt.Borders()  # Create Borders
    # DASHED虚线
    # NO_LINE没有
    # THIN实线
    borders.left = xlwt.Borders.THIN
    borders.right = xlwt.Borders.THIN
    borders.top = xlwt.Borders.THIN
    borders.bottom = xlwt.Borders.THIN
    return borders


def to_excel():
    s = datetime.now()

    # 创建一个workbook 设置编码
    workbook = xlwt.Workbook(encoding='utf-8')
    # 创建一个worksheet
    worksheet = workbook.add_sheet('My Worksheet')

    # 设置背景色
    xlwt.add_palette_colour("custom_colour", 0x21)


    workbook.set_colour_RGB(0x21, 141, 180, 226)
    style = xlwt.easyxf('pattern: pattern solid, fore_colour custom_colour')
    style.borders = set_boarders()

    # 设置黄色背景色
    xlwt.add_palette_colour("custom_yellow", 0x22)
    workbook.set_colour_RGB(0x22, 255, 255, 0)
    style_yellow = xlwt.easyxf('pattern: pattern solid, fore_colour custom_yellow')
    style_yellow.borders = set_boarders()

    # 设置绿色背景色
    xlwt.add_palette_colour("custom_green", 0x23)
    workbook.set_colour_RGB(0x23, 153, 213, 51)
    style_green = xlwt.easyxf('pattern: pattern solid, fore_colour custom_green')
    style_green.borders = set_boarders()

    # 设置粉色背景色
    xlwt.add_palette_colour("custom_pink", 0x24)
    workbook.set_colour_RGB(0x24, 204, 170, 204)
    style_pink = xlwt.easyxf('pattern: pattern solid, fore_colour custom_pink')
    style_pink.borders = set_boarders()

    # 设置白色背景色
    xlwt.add_palette_colour("white_colour", 0x25)

    workbook.set_colour_RGB(0x25, 255, 255, 255)
    style_white = xlwt.easyxf('pattern: pattern solid, fore_colour white_colour')
    style_white.borders = set_boarders()


    # 设置列宽
    worksheet.col(1).width = 256 * 20
    worksheet.col(2).width = 256 * 20
    worksheet.col(3).width = 256 * 20
    worksheet.col(4).width = 256 * 20
    # worksheet.col(5).width = 256*20
    # worksheet.col(6).width = 256*20
    # worksheet.col(7).width = 256*20
    # worksheet.col(8).width = 256*20
    # worksheet.col(9).width = 256*20
    # worksheet.col(10).width = 256*20
    # worksheet.col(11).width = 256*20

    # 隐藏列
    # worksheet.col(0).hidden = 1

    # 写入标题
    worksheet.write_merge(0, 1, 0, 0, label='Site', style=style)
    worksheet.write_merge(0, 1, 1, 1, label='', style=style)
    worksheet.write_merge(0, 1, 2, 2, label='PN', style=style)
    worksheet.write_merge(0, 1, 3, 3, label='FOX PN', style=style)
    worksheet.write_merge(0, 1, 4, 4, label='Project', style=style)
    worksheet.write_merge(0, 1, 5, 5, label='Type', style=style)
    worksheet.write_merge(0, 1, 6, 6, label='Qty Reservation', style=style)
    worksheet.write_merge(0, 1, 7, 7, label='HUB Qty Picked', style=style)
    worksheet.write_merge(0, 1, 8, 8, label='HUB Qty On Hold', style=style)
    worksheet.write_merge(0, 1, 9, 9, label='HUB Qty Available', style=style)
    worksheet.write_merge(0, 1, 10, 10, label='Onway', style=style)
    worksheet.write_merge(0, 1, 11, 11, label='Total shipped QTY', style=style)

    # (Ww.site.startswith('Du'), 2),
    # (Ww.site.startswith('Ven'), 3),
    # (Ww.site.startswith('SGP'), 4),
    # (Ww.site.startswith('SLC'), 5),
    # (Ww.site.startswith('CMH'), 6),
    # (Ww.site.startswith('LUK'), 7),
    # (Ww.site.startswith('TJ'), 8),)

    cvg_items = session.query(Ww).order_by(case(value=Ww.site, whens={'CVG': 0,
                                                                      'Dub': 1,
                                                                      'Venlo': 3,
                                                                      'SGP': 4,
                                                                      'SLC': 5,
                                                                      'CMH': 6,
                                                                      'LUK': 7,
                                                                      'TJ Direct ship': 8
                                                                      }

                                                ), Ww.pn).all()
    print(cvg_items)
    week_items = session.query(Week_name.day, Week_name.week).all()
    print(len(week_items))

    week_len = len(week_items)

    # 用字母表示week最后一栏的栏号
    col_letter = convert_to_letter(11 + week_len)
    # 倒数第八周栏号
    last8_letter = convert_to_letter(11 + week_len - 7)

    # 最大值行号
    max_letter = convert_to_letter(11 + week_len + 1)
    worksheet.write_merge(0, 1, 11 + week_len + 1, 11 + week_len + 1, label='Sales MAX', style=style)
    # 近8周平均值行号
    average_letter = convert_to_letter(11 + week_len + 2)
    worksheet.write_merge(0, 1, 11 + week_len + 2, 11 + week_len + 2, label='8 Weeks Sales Average', style=style)

    # 隐藏近8周之前的周
    for i in range(12, week_len + 12 - 8):
        worksheet.col(i).hidden = 1

    for index, item in enumerate(cvg_items):
        index = index + 2
        print(index)
        site = item.site
        pn = item.pn
        fox_pn = item.fox_pn
        project = item.project
        type = item.type
        qty_reservation = item.qty_reservation
        qty_picked = item.qty_picked
        qty_on_hold = item.qty_on_hold
        qty_available = item.qty_available
        on_way = session.query(func.sum(On_way.qty)).filter(On_way.pn == pn, On_way.site == site).scalar()
        print(site)
        print(pn)

        try:
            qty_picked, qty_on_hold, qty_available = session.query(Filtered.qty_picked, Filtered.qty_on_hold,
                                                                   Filtered.qty_available).filter(Filtered.site == site,
                                                                                                  Filtered.aws_sku == pn).first()
        except:
            qty_picked = qty_on_hold = qty_available = 0

        try:
            qty_reservation = total_qty_available = session.query(func.sum(Sites.qty_available)).filter(
                Sites.aws_sku == pn, Sites.site == site, Sites.odm_id.startswith('000')).scalar()
        except:
            qty_reservation = 0
        if not qty_reservation:
            qty_reservation = 0

        print('-' * 30)
        print('qty_picked', qty_picked)

        # 写入excel
        # 参数对应 行, 列, 值
        worksheet.write(index, 0, label=site, style=style_white)
        worksheet.write(index, 1, label=xlwt.Formula(f'a{index + 1}&c{index + 1}'), style=style_white)
        worksheet.write(index, 2, label=pn, style=style_white)
        worksheet.write(index, 3, label=fox_pn, style=style_white)
        worksheet.write(index, 4, label=project, style=style_white)
        worksheet.write(index, 5, label=type, style=style_white)
        worksheet.write(index, 6, label=qty_reservation, style=style_white)
        worksheet.write(index, 7, label=qty_picked, style=style_white)
        worksheet.write(index, 8, label=qty_on_hold, style=style_white)
        worksheet.write(index, 9, label=qty_available, style=style_white)
        worksheet.write(index, 10, label=on_way, style=style_green)
        worksheet.write(index, 11, label=xlwt.Formula(f'SUM(M{index + 1}:{col_letter}{index + 1})'), style=style_pink)
        # max 数据
        worksheet.write(index, 11 + week_len + 1, label=xlwt.Formula(f'MAX(M{index + 1}:{col_letter}{index + 1})'), style=style_green)

        # average 数据
        worksheet.write(index, 11 + week_len + 2,
                        label=xlwt.Formula(f'SUM({last8_letter}{index + 1}:{col_letter}{index + 1})/8'), style=style_green)

        # 写入week数据
        for i, week_item in enumerate(week_items):
            day = week_item.day
            week = week_item.week
            try:
                try:
                    week_data = session.query(Week_data.total).filter(Week_data.day == day, Week_data.site == site,
                                                                      Week_data.pn == pn).first()[0]
                except:
                    week_data = 0
                # if day == current_day and site != 'TJ Direct ship':
                #     week_data = session.query(Web_week_data_filtered.total).filter(Web_week_data_filtered.day==day,
                #                                                                    Web_week_data_filtered.site==site,
                #                                                                    Web_week_data_filtered.sku==pn).first()[0]
                #
                # if day == current_day and site == 'TJ Direct ship':
                #     week_data = session.query(func.sum(Sap_material.quantity)).filter(Sap_material.material==fox_pn).scalar()
                #     if week_data < 0:
                #         week_data = 0

            except Exception as e:

                print(e)
                week_data = 0
                print('week_data', week_data)
                # time.sleep(15)
                pass
            print(i)
            print(day)
            try:
                worksheet.write(0, i + 12, label=week, style=style_yellow)
            except:
                pass
            try:
                worksheet.write(1, i + 12, label=day, style=style_yellow)
            except:
                pass
            if week_data:
                print('site---->', site)
                print('week--->', week)
                print('week data -------->', week_data)
                # if site == 'LUK' and pn == '504-002207-001':
                #     print(week_data)
                #     time.sleep(50)
                try:
                    week_data = int(week_data)
                except:
                    week_data = 0
            else:
                week_data = 0
            # if site =='SLC' and pn == '504-002385-002' and day=='20210905':
            #
            #     print('site---->', site)
            #     print('week--->', week)
            #     print('week data -------->', week_data)
            #     print('pn---->', pn)
            #     time.sleep(60)
            worksheet.write(index, i + 12, label=week_data, style=style_white)

    # 保存
    try:
        workbook.save(f'RPA({current_day})AWS WW shipping out qty---WK{current_week_num}.xls')
    except:
        print('have this xls')
    print(len(cvg_items))

    e = datetime.now()
    print(e - s)

if __name__ == '__main__':
    to_excel()

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值