Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。
本系列将会陆续整理分享一些有趣、有用的第三方库。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_Ecosystem
pip install PyExcelerate
https://github.com/kz26/PyExcelerate
-
批量写入数据:
以下是一个简单的示例,通过 pyexcelerate 库将一个二维数组的数据写入到新创建的 Excel 工作表中,并保存为文件。
# 从 pyexcelerate 库中导入 Workbook 类,Workbook 类用于创建和操作 Excel 工作簿
from pyexcelerate import Workbook
# 定义一个二维数组 data,该数组包含了要写入 Excel 文件的数据
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 创建一个 Workbook 对象,即一个新的 Excel 工作簿
wb = Workbook()
# 调用 Workbook 对象的 new_sheet 方法,在工作簿中创建一个新的工作表
# 第一个参数为新工作表的名称
# 第二个参数为要写入的数据
wb.new_sheet("my sheet", data=data)
# 调用 Workbook 对象的 save 方法,将当前的工作簿保存为 Excel 文件
wb.save("output.xlsx")

-
将批量数据写入范围:
PyExcelerate 支持直接将数据写入范围,这比逐个单元格写入更快。
from pyexcelerate import Workbook
# 实例化一个 Workbook 对象
wb = Workbook()
# 调用 Workbook 对象的 new_sheet 方法,在工作簿里创建一个新的工作表
ws = wb.new_sheet("test")
# 利用工作表对象 ws 的 range 方法,指定一个单元格范围
# "B2" 和 "C3" 分别是该范围的左上角和右下角单元格,即这个范围涵盖了 B2、B3、C2、C3 这四个单元格
# 接着,将二维列表 [[1, 2], [3, 4]] 赋值给这个单元格范围
# 其中,1 会被写入 B2 单元格,2 写入 C2 单元格,3 写入 B3 单元格,4 写入 C3 单元格
ws.range("B2", "C3").value = [[1, 2], [3, 4]]
# 保存
wb.save("range.xlsx")

-
写入单元格数据:
PyExcelerate 提供了以下两种不同的方式向工作表的单元格中写入数据:
-
使用 set_cell_value 方法向指定单元格写入数据。 -
通过索引的方式访问单元格并赋值。
from datetime import datetime
from pyexcelerate import Workbook
wb = Workbook()
ws = wb.new_sheet("sheet name")
# 方式一:推荐,Faster
# 使用 set_cell_value 方法向指定单元格写入数据
# 第一个参数 1 表示行号(从 1 开始计数),第二个参数 1 表示列号(从 1 开始计数),第三个参数 15 是要写入的值
# 此操作将数字 15 写入到工作表的 A1 单元格
ws.set_cell_value(1, 1, 15)
# 将数字 20 写入到工作表的 B1 单元格
ws.set_cell_value(1, 2, 20)
# 将公式 "=SUM(A1,B1)" 写入到工作表的 C1 单元格,该公式会计算 A1 和 B1 单元格数值的和
ws.set_cell_value(1, 3, "=SUM(A1,B1)")
# 将当前的日期和时间写入到工作表的 D1 单元格
ws.set_cell_value(1, 4, datetime.now())
# 方式二:Fast
# 通过索引的方式访问单元格并赋值
# ws[1][1] 表示第一行第一列的单元格(索引从 0 开始,但这里库的索引从 1 开始),将数字 15 写入该单元格
ws[1][1].value = 15
# 将数字 20 写入到工作表的 B1 单元格
ws[1][2].value = 20
# 将公式 "=SUM(A1,B1)" 写入到工作表的 C1 单元格
ws[1][3].value = "=SUM(A1,B1)"
# 将当前的日期和时间写入到工作表的 D1 单元格
ws[1][4].value = datetime.now()
# 保存文件
wb.save("Writing_cell_data.xlsx")

-
按名称选择单元格:
from pyexcelerate import Workbook
wb = Workbook()
ws = wb.new_sheet("sheet name")
# 调用工作表对象 ws 的 cell 方法,传入 "A1" 表示要定位到工作表的 A1 单元格
# 接着使用 .value 属性,将整数 12 赋值给该单元格,也就是在 A1 单元格写入 12
ws.cell("A1").value = 12
wb.save("Selecting_cells_by_name.xlsx")

-
合并单元格:
from pyexcelerate import Workbook
wb = Workbook()
ws = wb.new_sheet("sheet name")
# 通过索引方式访问工作表中的单元格并赋值
ws[1][1].value = 15
# 调用工作表对象 ws 的 range 方法,指定一个单元格范围
# "A1" 和 "B1" 分别为该范围的左上角和右下角单元格,此范围包含 A1 和 B1 两个单元格
# 接着调用 merge 方法,将 A1 到 B1 这个范围内的单元格进行合并操作
ws.range("A1", "B1").merge()
wb.save("Merging_cells.xlsx")

设置单元格样式会造成不可忽视的开销。它会增加代码执行时间(如果操作不当,可能会增加 10 倍以上)。因此,只有在绝对必要时才对单元格设置样式。
ws[1][1].style.font.bold = True
ws[1][1].style.font.italic = True
ws[1][1].style.font.underline = True
ws[1][1].style.font.strikethrough = True
ws[1][1].style.font.color = Color(255, 0, 255)
ws[1][1].style.fill.background = Color(0, 255, 0)
ws[1][1].style.alignment.vertical = 'top'
ws[1][1].style.alignment.horizontal = 'right'
ws[1][1].style.alignment.rotation = 90
ws[1][1].style.alignment.wrap_text = True
ws[1][1].style.borders.top.color = Color(255, 0, 0)
ws[1][1].style.borders.right.style = '-.'
ws[1][1].style.data_type = DataTypes.INLINE_STRING
ws[1][1].style.quote_prefix = True
-
设置单元格样式:
PyExcelerate 提供了三种不同的方式对 Excel 单元格样式进行设置:
from datetime import datetime
# 方式一:最快的方式Fastest
# 从 pyexcelerate 库导入所需的类,用于创建工作簿、设置颜色、样式、字体、填充和格式
from pyexcelerate import Workbook, Color, Style, Font, Fill, Format
wb = Workbook()
ws = wb.new_sheet("sheet_1")
# 在 A1 单元格写入数值 1
ws.set_cell_value(1, 1, 1)
# 为第 1 行第 1 列的单元格设置字体样式为加粗
ws.set_cell_style(1, 1, Style(font=Font(bold=True)))
# 设置字体样式为斜体
ws.set_cell_style(1, 1, Style(font=Font(italic=True)))
# 设置字体样式为下划线
ws.set_cell_style(1, 1, Style(font=Font(underline=True)))
# 设置字体样式为删除线
ws.set_cell_style(1, 1, Style(font=Font(strikethrough=True)))
# 设置填充颜色为红色(RGBA: 255, 0, 0, 0)
ws.set_cell_style(1, 1, Style(fill=Fill(background=Color(255, 0, 0, 0))))
# 在第 1 行第 2 列的单元格(即 B1 单元格)写入当前日期和时间
ws.set_cell_value(1, 2, datetime.now())
# 设置日期格式为 'mm/dd/yy'
ws.set_cell_style(1, 2, Style(format=Format('mm/dd/yy')))
# 方式二:较快的方式Faster
# from pyexcelerate import Workbook, Color
# ws.set_cell_value(1, 1, 1)
# ws.get_cell_style(1, 1).font.bold = True
# ws.get_cell_style(1, 1).font.italic = True
# ws.get_cell_style(1, 1).font.underline = True
# ws.get_cell_style(1, 1).font.strikethrough = True
# ws.get_cell_style(1, 1).fill.background = Color(0, 255, 0, 0)
# ws.set_cell_value(1, 2, datetime.now())
# ws.get_cell_style(1, 2).format.format = 'mm/dd/yy'
# 方式三:快速的方式Fast
# from pyexcelerate import Workbook, Color
# ws[1][1].value = 1
# ws[1][1].style.font.bold = True
# ws[1][1].style.font.italic = True
# ws[1][1].style.font.underline = True
# ws[1][1].style.font.strikethrough = True
# ws[1][1].style.fill.background = Color(0, 255, 0, 0)
# ws[1][2].value = datetime.now()
# ws[1][2].style.format.format = 'mm/dd/yy'
wb.save("Styling_cells.xlsx")

需要注意的是,在上述示例代码中,后续对 set_cell_style() 的调用会覆盖之前的样式,它们不会合并。要合并样式,需要创建一个具有多个属性的单个 Style 对象,例如:
ws.set_cell_style(1, 1, Style(font=Font(bold=True), format=Format('mm/dd/yy')))
-
设置范围样式:
from pyexcelerate import Workbook, Color
from datetime import datetime
wb = Workbook()
ws = wb.new_sheet("test")
# 指定一个单元格范围并赋值
ws.range("A1", "C3").value = 1
# 再次使用 range 方法指定一个单元格范围,这次是从 A1 到 C1
# 这代表工作表的第一行(A1、B1、C1 单元格)
# 将这个范围内单元格的字体样式设置为加粗
ws.range("A1", "C1").style.font.bold = True
# 指定从 A2 到 C3 的单元格范围,将这个范围内单元格的字体样式设置为斜体
ws.range("A2", "C3").style.font.italic = True
# 指定从 A3 到 C3 的单元格范围,将这个范围内单元格的填充背景颜色设置为红色
ws.range("A3", "C3").style.fill.background = Color(255, 0, 0, 0)
# 指定从 C1 到 C3 的单元格范围将这个范围内单元格的字体样式设置为带有删除线
ws.range("C1", "C3").style.font.strikethrough = True
wb.save("Styling_ranges.xlsx")

-
设置行样式:
有以下三种方式设置行样式。
需要注意的是,经过测试pyexcelerate在没有数据的行上不应用样式。因此需要预先写入一些数据。
# 方式一:最快的方式Fastest
from pyexcelerate import Workbook, Color, Style, Fill
wb = Workbook()
ws = wb.new_sheet("sheet name")
# 在 A1 单元格写入数值 1
ws.set_cell_value(1, 1, 1)
# 使用 set_row_style 方法为工作表的第 1 行设置样式
# 这里创建了一个 Style 对象,其中包含一个 Fill 对象,
# Fill 对象的 background 属性使用 Color 类指定为红色(RGBA: 255, 0, 0)
ws.set_row_style(1, Style(fill=Fill(background=Color(255, 0, 0))))
# 方式二:较快的方式Faster
from pyexcelerate import Workbook, Color
# 使用 get_row_style 方法获取工作表第 1 行的样式对象
# 然后将该行样式对象的填充背景颜色设置为红色(RGB: 255, 0, 0)
ws.get_row_style(1).fill.background = Color(255, 0, 0)
# 方式三:快速的方式Fast
from pyexcelerate import Workbook, Color
# 通过索引方式访问工作表的第 1 行,
# 然后设置该行样式对象的填充背景颜色为红色(RGB: 255, 0, 0)
ws[1].style.fill.background = Color(255, 0, 0)
wb.save("Styling_rows.xlsx")

-
设置列样式:
与设置行样式类似,可以对列进行样式设置。
# 方式一:最快的方式Fastest
from pyexcelerate import Workbook, Color, Style, Fill
wb = Workbook()
ws = wb.new_sheet("sheet name")
ws.set_col_style(1, Style(fill=Fill(background=Color(255, 0, 0)))) # 设置行样式
# 方式二:较快的方式Faster
# from pyexcelerate import Workbook, Color
wb = Workbook()
ws = wb.new_sheet("sheet name")
ws.get_col_style(1).fill.background = Color(255, 0, 0)
wb.save("Styling_columns.xlsx")
-
设置行高和列宽:
-
-1 表示自动适应; -
0 表示隐藏; -
其他任何值表示相应的大小。
from pyexcelerate import Workbook, Color, Style, Fill
from datetime import datetime
wb = Workbook()
ws = wb.new_sheet("sheet name")
# 设置列宽
ws.set_col_style(2, Style(size=0))
wb.save("Setting_column_widths.xlsx")

-
链式样式:
PyExcelerate 支持使用样式对象,而不是手动设置每个属性。
from pyexcelerate import Workbook, Font
wb = Workbook()
ws = wb.new_sheet("sheet name")
ws[1][1].value = 1
# 使用 Font 类创建一个字体样式对象,通过传入参数来设置字体的样式
# bold=True 表示字体加粗
# italic=True 表示字体倾斜
# underline=True 表示字体带有下划线
# strikethrough=True 表示字体带有删除线
font = Font(bold=True, italic=True, underline=True, strikethrough=True)
# 将刚才创建好的字体样式对象 font 应用到 A1 单元格的字体样式上
ws[1][1].style.font = font
wb.save("Linked_styles.xlsx")

更多内容可以前往官方文档查看:
https://github.com/kz26/PyExcelerate


本篇文章来源于微信公众号: 码农设计师