Python操作Excel表格概括
时间:2021-09-13
本文章向大家介绍Python操作Excel表格概括,主要包括Python操作Excel表格概括使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Python xlwt库操作Excel汇总(全)
import xlwt
from conf import operation_conf as config
class SummaryOperationReport(object):
"""
汇总任务报告
"""
def __init__(self):
# 设置字体
self.font = xlwt.Font()
self.font.bold = True
# 设置边框
self.borders = xlwt.Borders()
self.borders.left = xlwt.Borders.THIN
self.borders.right = xlwt.Borders.THIN
self.borders.top = xlwt.Borders.THIN
self.borders.bottom = xlwt.Borders.THIN
# 设置居中
self.alignment = xlwt.Alignment()
self.alignment.horz = xlwt.Alignment.HORZ_CENTER # 水平方向
self.alignment.vert = xlwt.Alignment.VERT_TOP # 垂直方向
# 设置背景颜色pattern2(浅灰)
self.pattern2 = self.set_background_for_cell(0x16)
# 设置背景颜色pattern3(深灰)
self.pattern3 = self.set_background_for_cell(0x37)
# 设置表格样式
self.style1 = self.set_style_for_cell()
self.style2 = self.set_style_for_cell(self.pattern2)
self.style3 = self.set_style_for_cell(self.pattern3)
self.style4 = xlwt.easyxf('font:height 220;')
self.workbook = xlwt.Workbook(encoding='utf-8')
@staticmethod
def set_background_for_cell(rgb):
"""
为单元格设置背景色
:param rgb:
:return:
"""
pat = xlwt.Pattern()
pat.pattern = xlwt.Pattern.SOLID_PATTERN
pat.pattern_fore_colour = rgb # 背景颜色
return pat
def set_style_for_cell(self, pat=None):
"""
为单元格设置样式
:param pat:
:return:
"""
style = xlwt.XFStyle()
style.borders = self.borders
if pat:
style.font = self.font
style.pattern = pat
style.alignment = self.alignment
return style
@staticmethod
def len_byte(value):
"""
获取字符串长度,一个中文的长度为2
:param value:
:return:
"""
length = len(value)
utf8_length = len(value.encode('utf-8'))
length = (utf8_length - length) / 2 + length
if length > config.MAX_COLUMN_WIDTH:
return config.MAX_COLUMN_WIDTH
return int(length)
def merge_chains_excel_header(self, worksheet):
"""
合并Chains表头
:param worksheet:
:return:
"""
# 设置单元格的高度(Chains)
row0 = worksheet.row(0)
row0.set_style(self.style4)
# Chains表 合并表头
init_row = 0
for key, val in config.CHAINS_MERGE_TITLE.items():
worksheet.write_merge(0, 0, init_row, val + init_row, label=key, style=self.style3)
init_row += (val + 1)
def calculate_cell_width(self, title_list, report_iter, worksheet):
"""
计算单元格宽度
:param title_list:
:param report_iter:
:param worksheet:
:return:
"""
col_width = []
# 第一行(标题行)确定每个单元格的宽度
for title_dict in title_list:
col_width.append(self.len_byte(title_dict.get("title")))
for report in report_iter:
for column_y, title_dict in enumerate(title_list):
field_key = title_dict.get("key")
field_value = report.get(field_key)
if col_width[column_y] < self.len_byte(str(field_value)):
col_width[column_y] = self.len_byte(str(field_value))
# 宽度小于10时采用默认宽度
for i in range(len(col_width)):
if col_width[i] > 10:
worksheet.col(i).width = 256 * (col_width[i] + 1)
def write_report_to_excel(self, report_type, report_iter, row0):
"""
将各种类型的报告写入excel表格
:param report_type:
:param report_iter:
:param row0: 起始行 (chains: 1, others: 0)
:return:
"""
worksheet = self.workbook.add_sheet(report_type, cell_overwrite_ok=True)
# 确定表头
if report_type == "Chains":
title_list = config.CHAINS_EXCEL_TITLE
elif report_type == "Agent":
title_list = config.AGENT_EXCEL_TITLE
else:
title_list = config.OPERATION_EXCEL_TITLE
# 确定单元格宽度
self.calculate_cell_width(title_list, report_iter, worksheet)
# 写标题
for column_y, title_dict in enumerate(title_list):
worksheet.write(row0, column_y, label=title_dict.get("title"), style=self.style2)
# 写内容
for row_x, report in enumerate(report_iter, row0 + 1):
# TODO 如果超过excel最大行数,则新建一个sheet
for column_y, title_dict in enumerate(title_list):
field_key = title_dict.get("key")
field_value = str(report.get(field_key, ""))
if len(field_value) > config.MAX_CHARACTERS:
field_value = field_value[:config.MAX_CHARACTERS] + "..."
worksheet.write(row_x, column_y, label=field_value, style=self.style1)
# 合并Chains表的表头
if report_type == "Chains":
self.merge_chains_excel_header(worksheet)
def run_handle_report(self, chains_report, agent_report, operation_report, filename):
"""
开始处理Agent、Chains、Operation报告表格
:param chains_report:
:param agent_report:
:param operation_report:
:param filename:
:return:
"""
# Chains报告表格
self.write_report_to_excel("Chains", chains_report, 1)
# Agent报告表格
self.write_report_to_excel("Agent", agent_report, 0)
# Operation报告表格
self.write_report_to_excel("Operation", operation_report, 0)
self.workbook.save(filename)
抟扶摇而上者九万里
原文地址:https://www.cnblogs.com/fengting0913/p/15263249.html
- 服务化了,没想到耦合更加严重?
- 利用好注册的域名
- Android中TextView
- 腾讯 DCI 上线基于集中控制的 SR-TE 方案
- 如何从VS2003升级到VS2008
- js中多个Date对象变量间赋值互相影响
- 并发编程之Executor,Executors,ExecutorService和ThreadPoolExecutor
- 【DeveMobile实例】d3.js 与Trianglify 制作SVG格式Low-Poly 特效
- 未来人工智能将把人类分为3层,而你会在哪一层呢?
- IIS 7.0探索用于 Windows Vista 的 Web 服务器和更多内容
- 初学Python 之抓取当当网图书页面目录并保存到txt文件
- JavaScript 基础(二)数组
- 限制扫码付款额度,支付宝和微信要被“祭旗”?
- 拖动条SeekBar及星级评分条
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法