06爆肝整理2025年最详细的openpyxl使用语法

在过去的五年中,openpyxl一直是我处理Excel文件的得力助手。作为一个Python库,它以其强大的功能和灵活性,帮助我完成了从简单的数据整理到复杂的数据分析和报告生成的各种任务,经过大量的实践和对网上资料去粗存细,化繁为简,只留取重要的常用的openpyxl使用方法,以下是我在使用openpyxl五年来积累的一些经验和心得。

1. 理解Excel文件结构

在使用openpyxl之前,了解Excel文件的基本结构是必要的。知道工作簿(Workbook)、工作表(Worksheet)、行(Row)和单元格(Cell),之间的关系,可以增,删,改,查,复制等操作。

2. 利用工作簿和工作表的属性

openpyxl允许我访问和修改工作簿和工作表的属性,例如工作表的名称和背景颜色。这些属性可以帮我更好地组织和管理数据,尤其是在处理多个工作表时。

3. 批量操作的技巧

在批量处理Excel文件时,我学会了如何使用openpyxl提供的iter_rowsiter_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"

还支持 evenHeaderevenFooter 以及 firstHeaderfirstFooter

添加打印标题

您可以在每一页上打印标题以确保正确标记数据。

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允许你将图片插入到工作表中。以下是如何操作的基本步骤:

  1. 加载图片:首先,你需要加载你想要插入的图片文件。
  2. 创建图片对象 :使用openpyxlImage类创建一个图片对象。
  3. 插入图片:将图片对象插入到工作表的指定位置。

示例代码

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 属性

以下是如何使用openpyxlread_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 参考。

相关推荐
用户2519162427112 小时前
Python之语言特点
python
刘立军3 小时前
使用pyHugeGraph查询HugeGraph图数据
python·graphql
数据智能老司机6 小时前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
数据智能老司机7 小时前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
c8i9 小时前
django中的FBV 和 CBV
python·django
c8i9 小时前
python中的闭包和装饰器
python
这里有鱼汤12 小时前
小白必看:QMT里的miniQMT入门教程
后端·python
TF男孩1 天前
ARQ:一款低成本的消息队列,实现每秒万级吞吐
后端·python·消息队列
该用户已不存在1 天前
Mojo vs Python vs Rust: 2025年搞AI,该学哪个?
后端·python·rust
站大爷IP1 天前
Java调用Python的5种实用方案:从简单到进阶的全场景解析
python