在过去的五年中,openpyxl
一直是我处理Excel文件的得力助手。作为一个Python库,它以其强大的功能和灵活性,帮助我完成了从简单的数据整理到复杂的数据分析和报告生成的各种任务,经过大量的实践和对网上资料去粗存细,化繁为简,只留取重要的常用的openpyxl使用方法,以下是我在使用openpyxl
五年来积累的一些经验和心得。
1. 理解Excel文件结构
在使用openpyxl
之前,了解Excel文件的基本结构是必要的。知道工作簿(Workbook)、工作表(Worksheet)、行(Row)和单元格(Cell),之间的关系,可以增,删,改,查,复制等操作。
2. 利用工作簿和工作表的属性
openpyxl
允许我访问和修改工作簿和工作表的属性,例如工作表的名称和背景颜色。这些属性可以帮我更好地组织和管理数据,尤其是在处理多个工作表时。
3. 批量操作的技巧
在批量处理Excel文件时,我学会了如何使用openpyxl
提供的iter_rows
和iter_cols
方法来遍历单元格。这些方法比直接访问行和列更高效,尤其是在处理大型数据集时。
4. 样式和格式化的重要性
我了解到,适当的样式和格式化不仅使数据更易于阅读,还可以提高报告的专业度。openpyxl
提供了丰富的样式选项,包括字体、颜色、边框和对齐方式等,我经常使用这些功能来增强数据的可读性。
5.可以使用公式
在Excel中,公式是数据处理和分析的核心。它们不仅能够执行基本的数学运算,还能进行复杂的数据分析、财务计算和逻辑判断。因此,理解和有效使用公式对于任何需要处理Excel文件的人来说都是至关重要的。openpyxl
库提供了对Excel公式的支持,这使得它在处理需要复杂计算的Excel文件时变得不可或缺。
6.支持添加打印区域
openpyxl
允许我通过编程方式设置打印区域,这意味着我可以在自动化脚本中直接指定哪些单元格或范围应该被打印。
7.支持插入图片:提升Excel文件的视觉效果
在Excel文件中插入图片可以极大地增强数据的视觉表现力和信息传达效果。openpyxl
库提供了插入图片的功能,使得在Python脚本中处理和添加图片到Excel文件变得简单和直接。
8.批量创建二维码
虽然openpyxl
本身不直接支持生成二维码,但我们可以结合Python的其他库,如qrcode
,来实现在Excel文件中批量生成二维码的功能。这种方法不仅可以自动化生成包含二维码的报告或票据,还可以用于创建包含链接或特定数据的文档。
# 创建工作簿
ini
# 创建工作簿
无需在文件系统上创建文件即可开始使用 openpyxl。只需导入 Workbook 类并开始工作:
```python
from openpyxl import Workbook
wb = Workbook()
您可以使用以下 Workbook.create_sheet() 方法创建新工作表:
ini
ws1 = wb.create_sheet("Mysheet") # 默认在最后的位置新建工作表
# or
ws2 = wb.create_sheet("Mysheet", 0) # 在最前的位置新建工作表
# or
ws3 = wb.create_sheet("Mysheet", -1) #在最后的位置新建工作表
工作表在创建时会自动命名。它们按顺序编号(Sheet、Sheet1、Sheet2、...)。您可以随时使用以下 Worksheet.title 属性更改此名称:
ini
ws.title = "New Title"
默认情况下,包含此标题的选项卡的背景颜色为白色。您可以更改此为属性提供RRGGBB颜色代码 Worksheet.sheet_properties.tabColor:
ini
ws.sheet_properties.tabColor = "1072BA"
您可以使用 Workbook.sheetname 属性查看工作簿的所有工作表的名称
scss
print(wb.sheetnames)
['Sheet2', 'New Title', 'Sheet1']
您可以循环浏览工作表
bash
for sheet in wb:
print(sheet.title)
您可以在单个工作簿中创建工作表的副本:Workbook.copy_worksheet() 方法:
ini
source = wb.active
target = wb.copy_worksheet(source)
访问一个单元格
现在我们知道如何获取工作表,我们可以开始修改单元格内容了。单元格可以作为工作表的键直接访问:
ini
c = ws['A4']
ws[f'A{i}'] #这种方式也可行
这将返回 A4 处的单元格,如果尚不存在,则创建一个。可以直接赋值:
css
ws['A4'] = 4
还有 Worksheet.cell() 方法。 这提供了使用行和列符号访问单元格的方法:
ini
d = ws.cell(row=4, column=2, value=10)
获取一行或一列单元格
ini
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment
filename = 'rangeCells.xlsx'
wb = Workbook()
ws = wb.active
rangeCell1 = ws['G10']
# 获取一列单元格
colD = ws['D']
for c in colD:
c.value = 'D'
c.alignment = Alignment(horizontal='center')
# 获取一行单元格
row5 = ws[5]
for c in row5:
c.value = 5
c.alignment = Alignment(horizontal='center')
访问多个单元格
可以使用切片访问单元格范围:
ini
cell_range = ws['A1':'C2']
range_A1C2=ws['A1':'C2'] #这样的书写方式更一目了然,清晰
可以类似地获得行或列的范围:
ini
colC = ws['C']
col_range = ws['C:D'] col_C_D=ws['C:D']
row10 = ws[10]
row_range = ws[5:10] row_5_10=ws[5:10]
您还可以使用以下 Worksheet.iter_rows() 方法:
ini
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
for cell in row:
print(cell)
同样,该 Worksheet.iter_cols() 方法将返回列:
ini
for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
for cell in col:
print(cell)
仅值
如果您只想要工作表中的值,您可以使用该 Worksheet.values 属性。这将遍历工作表中的所有行,但仅返回单元格值:
rust
for row in ws.values:
for value in row:
print(value)
获取当前页所有行单元格
ini
# 遍历当前页所有行单元格填充色设置为绿色
for row in ws.rows:
for c in row:
c.fill = PatternFill(fgColor='39FF00', fill_type='solid')
获取当前页所有列单元格
ini
# 遍历当前页所有列单元格填充色设置为绿色
for col in ws.columns:
for c in col:
c.border = Border(bottom=Side(style='dotted', color='0000ff'),
right=Side(style='dotted', color='0000ff'),
left=Side(style='dotted', color='0000ff'),
top=Side(style='dotted', color='0000ff'))
获取范围内单元格
ini
# B3到F7区域单元格设置双边框
rangeCell = ws['B3:F7']
for r in rangeCell:
for c in r:
c.border = Border(bottom=Side(style='double', color='0000ff'),
right=Side(style='double', color='0000ff'),
left=Side(style='double', color='0000ff'),
top=Side(style='double', color='0000ff'))
行列信息获取,行列信息获取
- 按行获取工作表使用区域数据:
worksheet.rows
- 按列获取工作表使用区域数据:
worksheet.columns
- 获取工作表中最小行号:
worksheet.min_row
- 获取工作表中最小列号:
worksheet.min_column
- 获取工作表中最大行号:
worksheet.max_row
- 获取工作表中最大列号:
worksheet.max_column
- 获取单元格的行号:
cell.row
- 获取单元格的列号:
cell.column
- 方法获取指定区域:按行或按列遍历
ini
import openpyxl
wb = openpyxl.load_workbook('demo.xlsx')
ws = wb.active
minr = ws.min_row
minc = ws.min_column
maxr = ws.max_row
maxc = ws.max_column
rngs = ws.iter_rows(min_row=minr+1, min_col=minc+2, max_row=maxr-1, max_col=maxc-1)
col = ws.iter_cols(min_row=minr+1, min_col=minc+1, max_row=maxr-1, max_col=minc+1)
total = ([sum([v.value for v in row]) for row in rngs])
cp = ([[v.value for v in row] for row in col][0])
print(list(zip(cp, total)))
实例应用
从第1行第1列起始提取3行3列的区域值:
ini
for row in ws.iter_rows(min_row=1, min_col=1, max_col=3, max_row=3): # 按区域提取值
print([c.value for c in row])
求和:
scss
total = [sum([c.value for c in row]) for row in ws.iter_rows(min_col=2, min_row=2)]
name = [c.value for c in ws['a']][1:]
print(list(zip(name, total)))
单元格与区域数据写入
A1 表示法:工作表['A1']=值,R1C1 表示法:工作表.cell(行号,列号,值)
ini
import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
ws = wb.worksheets[1]
s = ws['a1'] = 123
ws.cell(2, 3, '我是中国人') # 单元格的写入
ws.cell(3, 3).value = '我是四川人' # 单元格的写入
print(s)
wb.save('test.xlsx')
实例应用(九九乘法表)
python
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.title = '九九表'
for x in range(1, 10):
for y in range(1, x+1):
ws.cell(x, y, f'{y}×{x}={x*y}')
wb.save('九九表.xlsx')
按行写入数据 (追加)
在最后一行写入数据:工作表.append(列表)
go
import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
ws = wb.worksheets[0]
ws.append({'a': '张三', 'b': 56, 'c': 'fdgsfg'})
wb.save('test.xlsx')
循环方式批量写入数据
scss
import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
ws = wb.worksheets[0]
for row in ws['a1:g9']: # 按区域读取
print(row)
for c in row:
print(c.value)
wb.save('test.xlsx')
以上是处理Excel文件时获取行列信息、单元格写入和批量数据写入的方法。希望这些信息对您有所帮助!如果您有其他问题或需要进一步的解释,请随时提问。
go
这个Markdown文档详细地展示了如何使用`openpyxl`库来处理Excel文件中的行列信息获取、单元格写入和批量数据写入。希望这对您有所帮助!如果您有其他问题或需要进一步的解释,请随时提问。
数据存储
一旦我们有了 Cell,我们就可以给它赋值:
bash
c.value = 'hello, world'
print(c.value)
'hello, world'
ini
d.value = 3.14
print(d.value)
3.14
设置起始行获取范围内单元格
ini
# A4-G6背景设置为天橙色
# 第4-6行,1-7列的单元格
for row in ws.iter_rows(min_row=4, max_row=6, max_col=7):
for c in row:
c.fill = PatternFill(fgColor='F5B114', fill_type='solid')
设置起始列获取范围内单元格
ini
# C1-E10背景设置为天蓝色
# 第3-5列,1-10行的单元格
for col in ws.iter_cols(max_row=10, min_col=3, max_col=5):
for c in col:
c.fill = PatternFill(fgColor='00E9FF', fill_type='solid')
保存到文件
保存工作簿最简单、最安全的方法是使用对象的 Workbook.save() 方法 Workbook:
scss
wb = Workbook()
wb.save('balances.xlsx')
使用公式
ini
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
# add a simple formula
ws["A1"] = "=SUM(1, 1)"
wb.save("formula.xlsx")
只读模式(目的是为了省内存)
有时,您需要打开或写入非常大的 XLSX 文件,而 openpyxl 中的常见例程将无法处理该负载。幸运的是,有两种模式使您能够以(接近)恒定内存消耗读取和写入无限量的数据。 介绍 openpyxl.worksheet._read_only.ReadOnlyWorksheet:
ini
from openpyxl import load_workbook
wb = load_workbook(filename='large_file.xlsx', read_only=True)
ws = wb['big_data']
for row in ws.rows:
for cell in row:
print(cell.value)
# Close the workbook after reading
wb.close()
警告
openpyxl.worksheet._read_only.ReadOnlyWorksheet 是只读的 与普通工作簿不同,只读工作簿将使用延迟加载。必须使用该 close() 方法显式关闭工作簿。 插入和删除行和列,移动单元格范围 插入行和列 您可以使用相关的工作表方法插入行或列:
scss
openpyxl.worksheet.worksheet.Worksheet.insert_rows()openpyxl.worksheet.worksheet.Worksheet.insert_cols()openpyxl.worksheet.worksheet.Worksheet.delete_rows()openpyxl.worksheet.worksheet.Worksheet.delete_cols()
默认为一行或一列。例如在第 7 行(在现有第 7 行之前)插入一行:
scss
ws.insert_rows(7)
ws.insert_rows(7,10) #例如在第 7 行(在现有第 7 行之前)插入10行:
删除行和列
要删除列F:H:
scss
ws.delete_cols(6, 3)
单元格的移动范围 您还可以移动工作表中的单元格范围:
ini
ws.move_range("D4:F10", rows=-1, cols=2)
ini
ws.move_range("G4:H10", rows=1, cols=1, translate=True)
向单元格添加注释
ini
#
评论有一个 `text` 属性和一个 `author` 属性,这两个属性都必须设置。
```python
from openpyxl import Workbook
from openpyxl.comments import Comment
wb = Workbook()
ws = wb.active
comment = ws["A1"].comment
comment = Comment('This is the comment text', 'Comment Author')
comment.text
'This is the comment text'
comment.author
'Comment Author'
# 方式二
ws["A1"].comment = openpyxl.comments.Comment('This is the comment text', 'Comment Author')
将日期格式化为数字格式
在处理Excel文件时,我们经常需要将日期存储为数字格式,这样可以方便地进行排序和计算。openpyxl
允许我们直接设置单元格的值,并指定日期格式。
以下是如何使用openpyxl
将日期设置为数字格式的示例代码:
ini
import datetime
from openpyxl import Workbook
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 使用Python datetime设置日期
ws['A1'] = datetime.datetime(2010, 7, 21)
# 设置单元格的数字格式为 'yyyy-mm-dd h:mm:ss'
ws['A1'].number_format = 'yyyy-mm-dd h:mm:ss'
使用样式
以下是默认值:
ini
from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
font = Font(name='Calibri',
size=11,
bold=False,
italic=False,
vertAlign=None,
underline='none',
strike=False,
color='FF000000')
fill = PatternFill(fill_type=None,
start_color='FFFFFFFF',
end_color='FF000000')
border = Border(left=Side(border_style=None,
color='FF000000'),
right=Side(border_style=None,
color='FF000000'),
top=Side(border_style=None,
color='FF000000'),
bottom=Side(border_style=None,
color='FF000000'),
diagonal=Side(border_style=None,
color='FF000000'),
diagonal_direction=0,
outline=Side(border_style=None,
color='FF000000'),
vertical=Side(border_style=None,
color='FF000000'),
horizontal=Side(border_style=None,
color='FF000000'))
alignment = Alignment(horizontal='general',
vertical='bottom',
text_rotation=0,
wrap_text=False,
shrink_to_fit=False,
indent=0)
number_format = 'General'
protection = Protection(locked=True,
hidden=False)
复制样式
样式也可以复制:
sql
from openpyxl.styles import Font
from copy import copy
ft1 = Font(name='Arial', size=14)
ft2 = copy(ft1)
ft2.name = "Tahoma"
ft1.name
'Arial'
ft2.name
'Tahoma'
ft2.size # copied from the
14.0
图标集
从以下图标集中选择:"3Arrows"、"3ArrowsGray"、"3Flags"、"3TrafficLights1"、"3TrafficLights2"、"3Signs"、"3Symbols"、"3Symbols2"、"4Arrows"、"4ArrowsGray"、"4R" ', '4Rating', '4TrafficLights', '5Arrows', '5ArrowsGray', '5Rating', '5Quarters'
创建 IconSet
规则的完整语法是:
python
from openpyxl.formatting.rule import IconSet, FormatObject
first = FormatObject(type='percent', val=0)
second = FormatObject(type='percent', val=33)
third = FormatObject(type='percent', val=67)
iconset = IconSet(iconSet='3TrafficLights1', cfvo=[first, second, third], showValue=None, percent=None, reverse=None)
# assign the icon set to a rule
from openpyxl.formatting.rule import Rule
rule = Rule(type='iconSet', iconSet=iconset)
有一个创建 IconSet
规则的便利函数:
python
from openpyxl.formatting.rule import IconSetRule
rule = IconSetRule('5Arrows', 'percent', [10, 20, 30, 40, 50], showValue=None, percent=None, reverse=None)
数据条
目前,openpyxl 支持原始规范中定义的 DataBar。边界和方向是在后来的扩展中添加的。
创建 DataBar
规则的完整语法是:
python
from openpyxl.formatting.rule import DataBar, FormatObject
first = FormatObject(type='min')
second = FormatObject(type='max')
data_bar = DataBar(cfvo=[first, second], color="638EC6", showValue=None, minLength=None, maxLength=None)
# assign the data bar to a rule
from openpyxl.formatting.rule import Rule
rule = Rule(type='dataBar', dataBar=data_bar)
有一个创建 DataBar
规则的便利函数:
ini
from openpyxl.formatting.rule import DataBarRule
rule = DataBarRule(start_type='percentile', start_value=10, end_type='percentile', end_value='90',
color="FF638EC6", showValue="None", minLength=None, maxLength=None)
打印设置
openpyxl 为打印设置提供了相当全面的支持。
编辑打印选项:
ini
from openpyxl.workbook import Workbook
wb = Workbook()
ws = wb.active
ws.print_options.horizontalCentered = True
ws.print_options.verticalCentered = True
页眉和页脚
页眉和页脚使用它们自己的格式语言。编写它们时完全支持这一点,但由于复杂性和嵌套的可能性,在读取它们时仅部分支持。支持左、中/中或右元素的字体、大小和颜色。粒度控制(突出显示个人词)将需要手动应用控制代码。
ini
from openpyxl.workbook import Workbook
wb = Workbook()
ws = wb.active
ws.oddHeader.left.text = "Page &[Page] of &N"
ws.oddHeader.left.size = 14
ws.oddHeader.left.font = "Tahoma,Bold"
ws.oddHeader.left.color = "CC3366"
还支持 evenHeader
和 evenFooter
以及 firstHeader
和 firstFooter
。
添加打印标题
您可以在每一页上打印标题以确保正确标记数据。
ini
from openpyxl.workbook import Workbook
wb = Workbook()
ws = wb.active
ws.print_title_cols = 'A:B' # the first two cols
ws.print_title_rows = '1:1' # the first row
添加打印区域
您可以选择工作表的一部分作为唯一要打印的部分。
ini
from openpyxl.workbook import Workbook
wb = Workbook()
ws = wb.active
ws.print_area = 'A1:F10'
使用表格
ws.tables
是特定工作表中所有表的类似字典的对象:
csharp
ws.tables
{"Table1", <openpyxl.worksheet.table.Table object>}
按名称或范围获取表:
css
ws.tables["Table1"]
or
ws.tables["A1:D10"]
遍历工作表中的所有表:
lua
for table in ws.tables.values():
print(table)
获取工作表中所有表的表名和范围:
返回表名及其范围的列表。
scss
ws.tables.items()
[("Table1", "A1:D10")]
删除表
css
del ws.tables["Table1"]
工作表中的表数
scss
len(ws.tables)
1
将公式从一个位置翻译到另一个位置
可以使用类将(在数学意义上)公式从一个位置转换到另一个位置 openpyxl.formulas.translate.Translator
。例如,有一系列单元格B2:E7,其中 column 中每行的总和F:
scss
from openpyxl.formula.translate import Translator
ws['F2'] = "=SUM(B2:E2)"
# move the formula one column to the right
ws['G2'] = Translator("=SUM(B2:E2)", origin="F2").translate_formula("G2")
ws['G2'].value
'=SUM(C2:F2)'
工作表保护
还可以通过在 openpyxl.worksheet.protection.SheetProtection
对象上设置属性来锁定工作表的各个方面。与工作簿保护不同,工作表保护可以在使用或不使用密码的情况下启用。使用 openpxyl.worksheet.protection.SheetProtection.sheet
属性或调用 enable()
或 disable()
启用工作表保护:
ini
ws = wb.active
ws.protection.sheet = True
ws.protection.enable()
ws.protection.disable()
如果未指定密码,则用户无需指定密码即可禁用配置的工作表保护。否则,他们必须提供密码才能更改配置的保护。密码是使用 openpxyl.worksheet.protection.SheetProtection.password()
属性设置的
ini
ws = wb.active
ws.protection.password = '...'
格式化(Styles)
openpyxl
提供了多种格式化选项,包括字体、边框、填充和对齐等。
字体(Font)
css
from openpyxl.styles import Font
font = Font(bold=True, color="FF0000")
cell.font = font
边框(Border)
scss
from openpyxl.styles import Border
border = Border(left=Side(style='thin'), right=Side(style='thin'))
cell.border = border
填充(Fill)
arduino
from openpyxl.styles import PatternFill
fill = PatternFill(fill_type='solid', start_color='FFFF00', end_color='FFFF00')
cell.fill = fill
对齐(Alignment)
ini
from openpyxl.styles import Alignment
alignment = Alignment(horizontal='center', vertical='center')
cell.alignment = alignment
图表(Chart)
openpyxl
支持创建和编辑图表。
ini
from openpyxl.chart import BarChart, Reference
# 创建一个柱状图
chart = BarChart()
data = Reference(ws, min_col=2, min_row=1, max_row=10, max_col=2)
cats = Reference(ws, min_col=1, min_row=2, max_row=10)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
ws.add_chart(chart, "A15")
宏(Macros)
openpyxl
可以编辑宏,但不支持创建宏。
python复制
ini
from openpyxl import load_workbook
wb = load_workbook('example.xlsm')
vba = wb.vba_archive
# 编辑宏代码
如何使用openpyxl
插入图片
openpyxl
允许你将图片插入到工作表中。以下是如何操作的基本步骤:
- 加载图片:首先,你需要加载你想要插入的图片文件。
- 创建图片对象 :使用
openpyxl
的Image
类创建一个图片对象。 - 插入图片:将图片对象插入到工作表的指定位置。
示例代码
ini
from openpyxl import Workbook
from openpyxl.drawing.image import Image
# 创建工作簿和工作表
wb = Workbook()
ws = wb.active
# 加载图片
img = Image('path_to_image.jpg')
# 将图片插入到工作表的A1位置
ws.add_image(img, 'A1')
# 保存工作簿
wb.save('example_with_image.xlsx')
示例代码
首先,确保安装了qrcode
库:
pip install qrcode
然后,使用以下Python代码生成二维码并插入Excel:
ini
import qrcode
from openpyxl import Workbook
from openpyxl.drawing.image import Image
# 创建工作簿和工作表
wb = Workbook()
ws = wb.active
# 数据列表,每个条目将生成一个二维码
data_list = ["https://example.com", "https://MoonshotAI.com"]
# 为每个数据生成二维码并插入到Excel
for index, data in enumerate(data_list, start=1):
# 生成二维码
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
# 将二维码转换为图片
img = qr.make_image(fill='black', back_color='white')
# 保存二维码图片
img.save(f'qr_code_{index}.png')
# 将图片插入到Excel的指定位置
img = Image(f'qr_code_{index}.png')
ws.add_image(img, f'A{index}')
# 保存工作簿
wb.save('example_with_qr_codes.xlsx')
进阶使用技巧
批量打开同目录下的所有Excel文件
lua
### 获取当前文件路径
```python
import os
current_path = os.path.abspath(__file__)
# 获取当前文件的父目录
father_path = os.path.abspath(os.path.dirname(current_path) + os.path.sep + ".")
path = father_path
print(path)
file_list = os.listdir(path)
2. 批量打开子目录下的所有Excel文件
ini
def get(dirs):
# dirs = ".\day_model" # 相对路径的表达方式
names_list = os.listdir(dirs) # 返回值为一个列表包含路径的文件夹及文件的名称
for a in names_list: # 遍历列表元素
t = a.split(".")[-1] # 以"."来分离每个元素的文件名与扩展名,并取出扩展名赋值给t
if t == "xlsx": # 如取出的扩展名等于"xlsx" 就执行print(a)
dayfile = a.split(".")[0] # 以"."来分离取到的元素的文件名与扩展名,并取出文件名赋值给dayfile
print(dayfile)
dayfile_list.append(dayfile)
3. 批量打开指定目录下的所有Excel文件
1.2.3 实例(批量建新工作簿)
python
from openpyxl import Workbook
for m in range(1, 13):
wb = Workbook() # 新建工作簿
wb.save('%d 月.xlsx' % m) # 保存工作簿 格式化写法
1.3.2 实例(批量修改工作表名)
ini
import openpyxl
wb = openpyxl.load_workbook('各年业绩表.xlsx')
for sh in wb.worksheets:
sh.title = sh.title + '-芝华公司'
wb.save('各年业绩表(修改后).xlsx')
1.5 关于工作表的实例应用
1.5.1 实例应用(批量新建12个月工作表)
python
import openpyxl
wb = openpyxl.Workbook() # 新建工作簿
for m in range(1, 13):
wb.create_sheet('%d 月' % m) # 新建月份工作表
wb.remove(wb['Sheet']) # 删除指定工作表
wb.save('2019 年计划表.xlsx') # 保存工作簿
1.5.2 实例应用(删除不符合条件的工作表)
csharp
import openpyxl
wb = openpyxl.load_workbook('2018 年.xlsx') # 读取工作簿
for sh in wb: # 循环工作簿中的工作表
if sh.title.split('-')[0] != '北京': # 判断工作表是否不等于北京
wb.remove(sh) # 删除工作表
wb.save('北京.xlsx') # 保存工作簿
1.5.3 实例应用(批量复制工作表)
scss
import openpyxl
wb = openpyxl.load_workbook('模板.xlsx')
for m in range(1, 13):
wb.copy_worksheet(wb['测试']).title = '%d 月' % m
wb.remove(wb['测试'])
wb.save('2018 年各月表格.xlsx')
[openpyxl] 载入大文件时使用 read_only
属性
当处理大型Excel文件时,内存和性能成为关键考虑因素。openpyxl
提供了一个read_only
模式,允许以只读方式加载大型文件,这样可以显著减少内存消耗并提高处理速度。
为什么使用 read_only
属性
- 内存优化 :
read_only
模式延迟加载工作表数据,只有在访问特定单元格或范围时才从文件中读取数据,从而减少内存占用。 - 性能提升 :对于大型文件,传统的加载方式可能会非常慢。
read_only
模式可以快速打开文件,因为不需要加载整个工作表的数据。 - 只读操作 :如果你只需要读取数据,不需要进行写入操作,使用
read_only
模式可以避免不必要的数据加载和保存操作。
如何使用 read_only
属性
以下是如何使用openpyxl
的read_only
属性来加载大型Excel文件的示例代码:
ini
from openpyxl import load_workbook
# 使用 read_only 属性加载大型文件
wb = load_workbook(filename='large_file.xlsx', read_only=True)
# 访问特定的工作表
ws = wb['big_data']
# 现在可以读取工作表中的数据,例如遍历行
for row in ws.rows:
for cell in row:
print(cell.value)
# 完成操作后,记得关闭工作簿
wb.close()
注意事项
- 只读限制 :在
read_only
模式下,你不能修改工作表或保存更改。任何尝试修改工作表的操作都会引发错误。 - 延迟加载:由于数据是按需加载的,因此在遍历工作表时可能会遇到性能瓶颈,特别是当访问的数据分布不均匀时。
- 关闭工作簿 :在使用
read_only
模式打开工作簿后,一定要记得调用wb.close()
来释放资源。
总结
openpyxl
是一个功能强大的库,它允许用户在 Python 中操作 Excel 文件。通过上述介绍,你应该能够了解如何使用这个库来满足你的编程需求。无论是创建新的工作簿、编辑现有的工作簿,还是格式化单元格和创建图表,openpyxl
都能提供强大的支持。
请注意,由于 openpyxl
库的属性和方法非常多,这里不可能一一列举所有细节。上述内容提供了一个全面的概览和一些关键点,帮助你开始使用 openpyxl
。对于更深入的学习和具体问题,你可以查阅 openpyxl
的官方文档和 API 参考。