圆月山庄资源网 Design By www.vgjia.com
这篇文章主要介绍了python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
贴上一个例子,里面设计很多用法,根据将相同日期的某些行合并处理。
from openpyxl import Workbook from openpyxl.styles import Font, Fill, Alignment, Border, Side, PatternFill from handlers.boss_accountant import PbOrderManageBase from handlers.base.pub_func import ConfigFunc from dal.models import Shop from dal.db_configs import DBSession def export_excel(filename, sheetname, content_body): """ Excel表格导出 :param filename: 表格名称 :param sheetname: 工作表名称 :param content_body: 内容体 :return: None """ workbook = Workbook() if not filename: filename = "导出表格.xlsx" workbook_sheet = workbook.active if not sheetname: sheetname = "工作表" workbook_sheet.title = sheetname merge_dict, sheet_row_len, sheet_column_len = merge_content(content_body) print(merge_dict) # 数据写入 for row in content_body: workbook_sheet.append(row) # 合并处理 for key in merge_dict.keys(): merge_data = merge_dict.get(key) if key == "title": workbook_sheet.merge_cells(start_row=merge_data[0], start_column=merge_data[1], end_row=merge_data[2], end_column=merge_data[3]) workbook_sheet.merge_cells(start_row=2, start_column=merge_data[1], end_row=2, end_column=merge_data[3]) workbook_sheet['A1'].font = Font(size=20, bold=True) workbook_sheet['A1'].alignment = Alignment(horizontal='center', vertical='center') else: # 使用sum求值 workbook_sheet.cell(row=merge_data[0] + 3, column=12).value = '=SUM({}:{})'.format( format_value(str(merge_data[0] + 3), 10), format_value(str(merge_data[1] + 3), 10)) workbook_sheet.cell(row=merge_data[0] + 3, column=14).value = '=SUM({}:{})'.format( format_value(str(merge_data[0] + 3), 11), format_value(str(merge_data[1] + 3), 11)) workbook_sheet.cell(row=merge_data[0] + 3, column=13).value = '=({}-{})'.format( format_value(str(merge_data[0] + 3), 12), format_value(str(merge_data[0] + 3), 14)) for i in [2,12, 13, 14]: workbook_sheet.merge_cells(start_row=merge_data[0]+3, start_column=i, end_row=merge_data[1]+3, end_column=i) # 合计求和 for i in [12, 13, 14]: workbook_sheet.cell(row=sheet_row_len, column=i).value = '=SUM({}:{})'.format( format_value(3, i), format_value(sheet_row_len - 1, i)) # 单元格底色 last_row = workbook_sheet[sheet_row_len] for each_cell in last_row: each_cell.fill = PatternFill("solid", fgColor="00CDCD") # 边框设置 for each_common_row in workbook_sheet.iter_rows("A1:{}".format(format_value(sheet_row_len, sheet_column_len))): for each_cell in each_common_row: each_cell.border = Border(left=Side(style='thin', color='000000'), right=Side(style='thin', color='000000'), top=Side(style='thin', color='000000'), bottom=Side(style='thin', color='000000') ) workbook_sheet.column_dimensions['B'].width = 15 workbook_sheet.column_dimensions['C'].width = 20 workbook.save(filename) def merge_content(content_body): """ 合并统计 :param content_body: 数据体 :return: 合并字典 """ sheet_column_len = len(content_body[3]) sheet_row_len = len(content_body) merge_dict = {} data_content = content_body[3:-1] merge_dict["title"] = (1, 1, 1, sheet_column_len) current_data = data_content[0][1] current_row = 0 start_row = 1 end_row = 0 for data in data_content: current_row += 1 x = data[1] if data[1] == current_data: merge_dict[data[1]] = (start_row, current_row) else: merge_dict[data[1]] = (current_row, current_row) current_data = data[1] start_row = current_row return merge_dict, sheet_row_len, sheet_column_len def format_value(row, column): """数字转ABC """ change_dict = { 1: "A", 2: "B", 3: "C", 4: "D", 5: "E", 6: "F", 7: "G", 8: "H", 9: "I", 10: "J", 11: "K", 12: "L", 13: "M", 14: "N", 15: "O", 16: "P", 17: "Q", 18: "R", 19: "S", 20: "T", 21: "U", 22: "V", 23: "W", 24: "X", 25: "Y", 26: "Z", } column = change_dict.get(column) return str(column)+str(row) def export_func_new(args, session, shop_id): # check_time = 0 # debtor_id = 2884 # debtor_name: 肖小菜 # end_date: # start_date: 2019 - 07 # statistic_date: 3 # data_type: 1 data_content = [] check_time = 0 from_date = "2019-07" to_date = "" debtor_name = "肖小菜" if_success, query_data, *_ = PbOrderManageBase.common_get_credit_stream(args, session, shop_id, export=True, need_sum=False, check_time=check_time ) if not if_success: raise ValueError(query_data) fee_text = ConfigFunc.get_fee_text(session, shop_id) get_weight_unit_text = ConfigFunc.get_weight_unit_text(session, shop_id) # 表店铺、客户名称 shop_name = session.query(Shop.shop_name).filter_by(id=shop_id).first() data_content.append([shop_name[0]]) data_content.append(["客户:{}".format(debtor_name)]) # 表头 fee_text_total = '{}小计'.format(fee_text) header_content = [ "序号", "日期", "货品名", "数量", "重量/{}".format(get_weight_unit_text), "单价", "货品小记", "押金小计", fee_text_total, "赊账金额","待还款", "赊账小记", "已还款", "待还款小计" ] file_name_begin = "客户还款" data_content.append(header_content) # 还款数据 index_num = 0 for single_data in query_data: index_num += 1 sales_time = single_data.get("sales_time", "") if sales_time: sales_time = sales_time.split(" ")[0] _payback_money = single_data["unpayback_money"] single_content = [index_num, sales_time, single_data["only_goods_name"], single_data["commission_mul"], single_data["sales_num"], "%s元/%s" % (single_data["fact_price"], single_data["goods_unit"]), single_data["goods_total"], single_data["commission_mul"], single_data["deposit_total"], single_data["credit_cent"], _payback_money, 0, 0, 0] data_content.append(single_content) # 表尾合计 data_content.append(["合计"]) config = ConfigFunc.get_config(session, shop_id) if not config.enable_deposit: index_deposit_total = data_content[0].index("押金小计") for data in data_content: data.pop(index_deposit_total) if not config.enable_commission: index_commission_total = data_content[0].index(fee_text_total) for data in data_content: data.pop(index_commission_total) file_name = "{}流水记录导出_{}~{}.xlsx".format(file_name_begin, from_date, to_date) return file_name, data_content if __name__ == "__main__": filename = "测试打印表格.xlsx" sheetname = "工作表2" session = DBSession() args = { "check_time": 0, "debtor_id": 2884, "debtor_name": "肖小菜", "start_date": "2019-07", "statistic_date": 3, "data_type": 1 } filename, content_body = export_func_new(args, session, 104) # filename = "测试打印表格.xlsx" # sheetname = "工作表2" # content_body = [] # content_body.append(["打印表格表头"]) # content_body.append(["客户:肖某某"]) # content_body.append(["日期", "货品销售", "自营销售", "代卖销售", "联营销售", "总价"]) # content_body.append(["1", "2", "3.1", "4.1", "5.1", "5.1"]) # content_body.append(["1", "2", "3.1", "4.1", "5.1", "5.1"]) # content_body.append(["1", "2", "3.1", "4.1", "5.1", "5.1"])
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年11月05日
2024年11月05日
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]