在Excel中主要涉及到三个概念:Workbooks,Sheets,Cells。其中Workbook就是一个excel工作表;Sheet是工作表中的一张表页;Cell就是简单的一个格。一般读取和写入Excel基本上按如下三步操作:打开Workbook,定位Sheet,操作Cell。下面分读和写分别介绍python的几个常见的处理方式。
下面我们使用一个案例来演示Python写入Excel的过程。模拟一份学生信息,将学生信息写入到一个Excel文件中。
import xlwt
如果没有xlwt库的话可以使用pip导入该库:
pip install xlwt
work_book = xlwt.Workbook(encoding="UTF-8")
worksheet = work_book.add_sheet(sheet_name)
# row 代表行,col代表列,data代表要填写的内容
worksheet.write(row, col, data)
work_book.save(self.filename)
但是在实际场景中,制作的Excel远不止写入数据那么简单,有时为了达到美观,会涉及到复杂的表格样式。例如:
下面我们逐个来演示如何设置这个表格样式
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = "黑体" # 设置字体为“黑体”,默认是“Arial”
font.height = 100 # 设置字体大小为100,默认是200
font.bold = True # 字体是否加粗
font.underline = True # 下划线
font.italic = True # 斜体字
style.font = font # 设置样式
worksheet.write(row, col, data, style) # 写入数据是带上样式
# 合并从(0,0)单元格到(0,2)单元格,及合并第一行的3个单元格
worksheet.write_merge(0, 0, 0, 2, "hello world")
# 行合并,并带有其他样式
worksheet.write_merge(0, 0, 0, 2, "hello world",style)
# 合并从(0,0)单元格到(2,0)单元格,及合并第一列的3个单元格
worksheet.write_merge(0, 0, 2, 0, "hello world")
# 合并从(0,0)单元格到(2,2)单元格,及合并第一行的3*3共9个单元格区域
worksheet.write_merge(0, 0, 2, 2, "hello world")
pattern = xlwt.Pattern() # 一个实例化的样式类
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 固定的样式
pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow'] # 背景颜色
style.pattern = pattern
worksheet.write(row, col, data, style) # 写入数据是带上样式
borders = xlwt.Borders() # 为样式创建边框,默认没有边框
borders.left = 1 # 设置左边框宽度为1
borders.right = 1
borders.top = 1
borders.bottom = 1
style.borders = borders
worksheet.write(row, col, data, style) # 写入数据是带上样式
# 设置列的宽度
worksheet.col(i).width = 150 * 30
完整代码演示:
# -*- coding: utf-8 -*-
# 写excel
import xlwt
class WriteExcel:
# 初始化
def __init__(self, filename, sheet_name):
self.work_book = xlwt.Workbook(encoding="UTF-8")
self.worksheet = self.work_book.add_sheet(sheet_name)
self.filename = filename
self.row = 0
# 保存Excel
def save(self):
self.work_book.save(self.filename)
# 设置样式
def set_style(self, name, height, bold=False, format_str='', align='center'):
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = name # 字体
font.bold = bold
font.height = height
borders = xlwt.Borders() # 为样式创建边框
borders.left = 1
borders.right = 1
borders.top = 1
borders.bottom = 1
alignment = xlwt.Alignment() # 设置排列
if align == 'center':
alignment.horz = xlwt.Alignment.HORZ_CENTER
alignment.vert = xlwt.Alignment.VERT_CENTER
elif align == 'left':
alignment.horz = xlwt.Alignment.HORZ_LEFT
alignment.vert = xlwt.Alignment.VERT_BOTTOM
else:
alignment.horz = xlwt.Alignment.HORZ_RIGHT
alignment.vert = xlwt.Alignment.VERT_BOTTOM
style.font = font
style.borders = borders
style.num_format_str = format_str
style.alignment = alignment
return style
# 设置标题的格式
def set_title_style(self):
return self.set_style('黑体', 300, bold=True, format_str='')
# 设置表头的格式
def set_head_style(self):
head_style = self.set_style('Times New Roman', 220, bold=True, format_str='')
pattern = xlwt.Pattern() # 一个实例化的样式类
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 固定的样式
pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow'] # 背景颜色
head_style.pattern = pattern
return head_style
# 设置明细行的格式
def set_default_style(self):
return self.set_style('Times New Roman', 200, bold=False, format_str='', align='right')
# 添加标题
def add_title(self, title):
self.worksheet.write_merge(0, 0, 0, 2, title, self.set_title_style())
self.row += 1
# 写入文件头
def add_head(self, key, value):
# 向单元格中写入内容
self.worksheet.write(self.row, 0, key)
self.worksheet.write(self.row, 1, value)
self.row += 1
# 写入明细
def add_list(self, table_head, table_detail):
self.row += 1
for i, value in enumerate(table_head):
self.worksheet.write(self.row, i, value, self.set_head_style())
self.worksheet.col(i).width = 150 * 30
for rows in table_detail:
self.row += 1
for i, key in enumerate(rows):
self.worksheet.write(self.row, i, rows[key], self.set_default_style())
if __name__ == "__main__":
list_head = ["学号", "姓名", "性别"]
list_detail = [{"student_id": "1001", "name": "张三", "sex": "男"},
{"student_id": "1002", "name": "李四", "sex": "女"},
{"student_id": "1003", "name": "王五", "sex": "男"}]
writeExcel = WriteExcel("writeExcel.xlsx", "学生信息")
writeExcel.add_title("XX班级学生信息表")
writeExcel.add_head("学院名:", "A学院")
writeExcel.add_head("班级名:", "B系一班")
writeExcel.add_head("人数:", "50")
writeExcel.add_list(list_head, list_detail)
writeExcel.save()
如下链接还可了解Python其他相关内容,希望相关内容能给予帮助。谢谢!
链接1:Python实战:Python读取Excel文件