Python模块openpyxl 操作Excel文件

news2024/11/25 18:31:25

简介

        openpyxl是一个用于读取和编写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。openpyxl以Python语言和MIT许可证发布。

        openpyxl可以处理Excel文件中的绝大多数内容,包括图表、图像和公式。它可以处理大量数据,支持Pandas和NumPy库导入和导出数据。Openpyxl还支持自定义矩阵和PivotTable,以及通过API自动化Excel应用程序。

目录

1. 创建和打开工作簿

1.1. 创建工作表

1.2. 保存Excel文件

1.3. 关闭Excel工作簿

1.4. 获取正在活动的表

1.5. 获取表名

1.6. 移除工作表

1.7. 复制工作表

1.8. 添加数据到末行

2. 写入和读取Excel

2.1. 设置表名

2.2. 写入数据

2.3. 插入空白行/列

2.4. 迭代读取指定行、列

2.5. 遍历所有数据行

2.6. 遍历所有数据列

2.7. 读取最大行号/列号

2.8. 判断空行、列

3. 设置Excel格式

3.1. 56种颜色代码

3.2. 设置字体属性

3.3. 设置填充属性

3.4. 设置对齐属性

3.5. 设置边框属性

3.6. 合并单元格

3.7. 设置组合样式

4. 其他方法

4.1. csv文件导入Excel

4.2. 画图

① 模块语法

② 折线图

③ 柱状图


1. 创建和打开工作簿

1.1. 创建工作表

  • 创建一个新的工作表,并添加到工作簿中。可以通过index参数来指定插入工作表的位置,默认为在末尾添加。

语法

workbook.create_sheet(
    title=None    #可选参数,指定工作表的名称,默认为Sheet+数字(Sheet1)
    index=None    #可选参数,指定工作表的插入位置,从0开始计数。默认将工作表添加到末尾位置。
)

示例

from openpyxl import Workbook

# 创建一个新的工作簿
workbook = Workbook()

# 创建一个 AAA 的工作簿,从第1个位置添加(索引从0开始)
wb_AAA = workbook.create_sheet('AAA', 0)

# 创建一个 BBB 的工作簿,默认添加到末尾
wb_BBB = workbook.create_sheet('BBB')

# 创建一个不指定名称的工作簿
wb_sheet = workbook.create_sheet()

# 查看所有的工作表名称
for i in workbook.worksheets:
    print(i.title)

# 将这些表保存到磁盘
workbook.save('tmp.xlsx')

结果

AAA
Sheet
BBB
Sheet1

 

如果表名已存在,则会报错

 

1.2. 保存Excel文件

  • 保存工作簿为一个Excel文件,需要指定文件的路径和文件名。

语法

workbook.save('文件名')

举例

from openpyxl import Workbook

# 创建一个新的工作簿
workbook = Workbook()

# 保存工作簿
workbook.save('tmp.xlsx')

会默认创建一个sheet页

 

1.3. 关闭Excel工作簿

  • 在处理完工作簿之后,应该使用close()方法将其关闭。这可以确保文件在使用后得以正常关闭,避免内存泄漏和其他问题。同时,关闭Excel文件还可以防止其他应用程序无法访问或编辑相同的文件。

语法

workbook.close()

如果使用 with,则会自动关闭,无需手动操作

from openpyxl import Workbook

# 使用with语句打开Excel文件,并创建一个新的工作簿
with Workbook() as workbook:
    worksheet = workbook.active

    """操作Excel文件"""

# 自动关闭Excel文件

 

1.4. 获取正在活动的表

  • 获取或设置当前活动的工作表,可以通过该属性来切换不同的工作表或获取当前活动的工作表。

语法


# 设置一张活动的表
Workbook().active = [表名]

# 查看正在活动的表
print(Workbook().active)
#仅查看表名
print(Workbook().active.title)

举例(如果没有活动的表,返回None。使用Workbook就会有一张默认的sheet表活动)

>>> from openpyxl import Workbook

>>> print(Workbook().active)
<Worksheet "Sheet">

>>> print(Workbook().active.title)
Sheet

设置一张活动的表 

>>> from openpyxl import Workbook

# 创建一个新的工作簿
>>> workbook = Workbook()

# 设置一张表为正在活动的表
>>> wb_AAA = workbook.create_sheet('AAA')
>>> workbook.active = wb_AAA

# 查看活动的表
>>> print(workbook.active.title)
AAA

 

1.5. 获取表名

  • 返回工作簿中所有工作表的名称列表。
from openpyxl import load_workbook

# 打开工作簿
f = load_workbook('./tmp.xlsx')

# 查看工作簿中所有工作表名
print(f.get_sheet_names())

如果在高版本出现了这样的提示

那么按照提示要求,将 get_sheet_names() 替换为 sheetnames 即可

from openpyxl import load_workbook

# 打开工作簿
f = load_workbook('./tmp.xlsx')

# 查看工作簿中所有工作表名
print(f.sheetnames)

 

 

1.6. 移除工作表

  • 从工作簿中移除指定的工作表或命名范围。

语法

workbook.remove([表名])

删除 AAA 表

>>> from openpyxl import Workbook

# 创建一个新的工作簿
>>> workbook = Workbook()

# 创建两个工作表
>>> AAA = workbook.create_sheet('AAA')
>>> BBB = workbook.create_sheet('BBB')

# 查看所有表名
>>> for i in workbook.worksheets:
>>>     print(i.title)
Sheet
AAA
BBB

# 删除工作簿中的第二个工作表
>>> workbook.remove(AAA)

# 再次查看所有表名
>>> for i in workbook.worksheets:
>>>     print(i.title)
Sheet
BBB

 

1.7. 复制工作表

  • 将指定的工作表复制一份,并添加到工作簿中。可以使用这个方法来快速复制工作表,并进行一些定制化操作。

直接拷贝工作表,插入的最后面。名称为:[旧名称] + copy

from openpyxl import load_workbook

# 打开工作簿
f = load_workbook('./tmp.xlsx')

# 选择复制的工作表(AAA)
f_copy = f['AAA']

# 复制并插入表(新表为:[旧名]+copy)
ws = f.copy_worksheet(f_copy)

# 保存文件
f.save('./tmp.xlsx')

# 关闭文件
f.close()

 

拷贝工作表后重命名

from openpyxl import load_workbook

# 打开工作簿
f = load_workbook('./tmp.xlsx')

# 复制插入新的工作表,赋值给变量
f_copy = f.copy_worksheet(f['AAA'])

# 重命名工作表
f_copy.title = 'new_copyAAA'

# 保存文件
f.save('./tmp.xlsx')

# 关闭文件
f.close()

 

1.8. 添加数据到末行

自动追加到有数据的末行,从第1列开始追加

from openpyxl import load_workbook

# 打开工作簿
f = load_workbook('./tmp.xlsx')

# 选择需要追加的工作表
f_sheet = f['Sheet1']

# 追加数据
data = ['A', 'B', 'C', 'D']
f_sheet.append(data)

# 保存文件
f.save('./tmp.xlsx')

 

多行数据使用循环遍历的方式添加

from openpyxl import load_workbook

# 打开工作簿
f = load_workbook('./tmp.xlsx')

# 选择需要追加的工作表
f_sheet = f['Sheet1']

# 准备多行数据
data_list = [
    ['A', 'B', 'C', 'D'],
    ['E', 'F', 'G', 'H'],
    [1, 2, 3, 4]
]

# 循环添加
for i in data_list:
    f_sheet.append(i)

# 保存文件
f.save('./tmp.xlsx')

 

 

   

2. 写入和读取Excel

2.1. 设置表名

  • 获取或设置工作表的名称。

title 只能获取已赋值的对象,查看表名 get_sheet_names 更合适

title 修改表名(将原 Sheet1 修改为 new_Sheet1)

from openpyxl import load_workbook

# 打开工作簿
f = load_workbook('./tmp.xlsx')

# 获取工作表对象
sheet = f['Sheet1']

# 修改工作表名称
sheet.title = 'new_Sheet1'

# 保存文件
f.save('./tmp.xlsx')

 

2.2. 写入数据

  • 获取或设置工作表中指定单元格的数据、样式等信息。该方法需要指定行列索引,例如cell(row=1, column=1)表示获取第1行第1列的单元格数据。

语法

[工作表].cell(
    row:        #必选参数,指定单元格的行号
    column:     #必选参数,指定单元格的列号
    value:      #可选参数,单元格的值,默认值为None
    coordinate: #可选参数,单元格的坐标,默认值为None。如果同时设置了row和column参数,那么coordinate参数会被自动计算。
)

指定 某行、某列 写入数据。注意:这种方式会将指定文件的原有内容覆盖,工作表留一个Sheet1 

import openpyxl

# 创建一个 工作簿
wb = openpyxl.Workbook()

# 获取工作表对象
ws = wb.active

# 第1行、1列:插入字符串
ws.cell(1, 1, 'Hello')
# 第1行、2列:插入数字
ws.cell(1, 2, 1)
# 第1行、3列:插入数字
ws.cell(1, 3, 10)
# 第1行、4列:插入公式
ws.cell(1, 4, '=B1+C1')
# 第1行、5列:设置格式
ws.cell(row=1, column=5, value='测试')

# 保存文件
wb.save('./tmp.xlsx')

 

向已有数据的文件中,写入指定内容

import openpyxl

# 打开一个工作簿
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
sheet = wb['Sheet1']

# 向文件中写入内容
sheet.cell(2, 1, 'abc')    #第2行、1列
sheet.cell(2, 2, '无敌')   #第2行、2列

# 保存文件
wb.save('./tmp.xlsx')

 

向某个工作簿插入多条数据

import openpyxl

# 打开一个工作簿
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
sheet = wb['Sheet2']

# 准备每行内容
data = [
    ['包子', '面条', '稀饭', '油条', '豆浆'],
    ['卖火柴', '卖火机', '卖石油', '卖火石'],
    ['西瓜', '香蕉', '苹果', '蓝莓', '石榴']
]

# 设置开始行、列
start_row = 2
start_col = 3

# 记录初始列
init_col = start_col
for data_list in data:        #遍历这个列表
    for value  in data_list:  #遍历列表中的列表,这才是要插入的数据
        sheet.cell(row=start_row, column=start_col, value=value)  #指定行、列,插入数据
        start_col += 1    #每次遍历,列数+1
    start_row += 1        #每次遍历一个列表,行数+1
    start_col = init_col  #每次遍历一个列表,列数回到初始值

# 保存文件
wb.save('./tmp.xlsx')

# 关闭文件
wb.close()

 

2.3. 插入空白行/列

  • 分别用于在指定的行或列插入新的空白行或空白列。

插入空白行(原本行的数据会下移n行,n取决于插入的空白行数)

insert_rows(
    [行号]    #必选参数,指定插入的行号
    [行数]    #可选参数,指定插入n行空白,默认1
)
# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet2']

# 第2行插入1行空白行
wb_sheet.insert_rows(2)

# 第2行插入3行空白行
wb_sheet.insert_rows(2, 3)

# 保存文件
wb.save('./tmp.xlsx')

 

 插入空白列(原本列的数据会右移n列,n取决于插入的空白列数)

insert_cols(
    [列号]    #必选参数,指定插入的列号
    [列数]    #可选参数,指定插入n列空白,默认1
)
# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet2']

# 第2列插入1列空白列
wb_sheet.insert_cols(2)

# 第2列插入3列空白列
wb_sheet.insert_cols(2, 3)

# 保存文件
wb.save('./tmp.xlsx')

    

2.4. 迭代读取指定行、列

语法

iter_rows(
    min_row:要迭代的起始行号,默认值为1。
    max_row:要迭代的最后行号,默认值为最大行号,即ws.max_row的值。
    min_col:要迭代的起始列号,默认值为1。
    max_col:要迭代的最后列号,默认值为最大列号,即ws.max_column的值。
    values_only:默认为False,如果设置为True,则仅返回单元格的值,而不是单元格对象。
)

 表内容如图

 

指定开始行、结束行和开始列、结束列

import openpyxl

# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet2']

# 指定读取 2-3 行,返回值(而非对象)
rows = wb_sheet.iter_rows(min_row=2, max_row=3, values_only=True)

# 遍历2-3行
for i in rows:
    print(i)

# 指定读取 2-3 行和 3-4 列
rows = wb_sheet.iter_rows(min_row=2, max_row=3, min_col=3, max_col=4, values_only=True)

# 遍历2-3行,3-4列
for i in rows:
    print(i)

 

2.5. 遍历所有数据行

  • 分别返回一个生成器对象,用于遍历工作表中所有的行。

 表内容如图

   

遍历所有存在数据的行(从第1行开始,无论第1行是否有数据)

import openpyxl

# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet2']

# 遍历所有有数据的行
for row in wb_sheet.rows:
    # 再遍历这一行的所有值
    for i in row:
        # 输出单元格名和值
        print(i.coordinate, i.value)
    # 每行做一个间隔
    print('-------------- 下一行 --------------')

输出结果如下:

A1 None
B1 None
C1 None
D1 None
E1 None
F1 None
G1 None
-------------- 下一行 --------------
A2 None
B2 None
C2 包子
D2 面条
E2 稀饭
F2 油条
G2 豆浆
-------------- 下一行 --------------
A3 None
B3 None
C3 卖火柴
D3 卖火机
E3 卖石油
F3 卖火石
G3 None
-------------- 下一行 --------------
A4 None
B4 None
C4 西瓜
D4 香蕉
E4 苹果
F4 蓝莓
G4 石榴
-------------- 下一行 --------------

   

指定遍历第2行 

# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet2']

# 遍历第2行
for i in wb_sheet[2]:
    # 输出单元格名和值
    print(i.coordinate, i.value)

 

2.6. 遍历所有数据列

  • 分别返回一个生成器对象,用于遍历工作表中所有的列。

 表内容如图

 

遍历所有存在数据的列(从第1列开始,无论第一列是否有数据)

import openpyxl

# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet2']

# 遍历所有有数据的列
for col in wb_sheet.columns:
    # 再遍历这一列的所有值
    for i in col:
        # 输出单元格名和值
        print(i.coordinate, i.value)
    # 每列做一个间隔
    print('-------------- 下一列 --------------')

输出结果

A1 None
A2 None
A3 None
A4 None
-------------- 下一列 --------------
B1 None
B2 None
B3 None
B4 None
-------------- 下一列 --------------
C1 None
C2 包子
C3 卖火柴
C4 西瓜
-------------- 下一列 --------------
D1 None
D2 面条
D3 卖火机
D4 香蕉
-------------- 下一列 --------------
E1 None
E2 稀饭
E3 卖石油
E4 苹果
-------------- 下一列 --------------
F1 None
F2 油条
F3 卖火石
F4 蓝莓
-------------- 下一列 --------------
G1 None
G2 豆浆
G3 None
G4 石榴
-------------- 下一列 --------------

 

2.7. 读取最大行号/列号

  • 分别返回当前工作表中最大的行数和最大的列数,可以用来遍历整个工作表的数据。

语法

# 查看最后一行的行号
[工作表].max_row

# 查看最后一列的列号
[工作表].max_column

 

查看最后一行行号,输出最后一行的值

import openpyxl
# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet2']

# 获取最大行
max_rows = wb_sheet.max_row
print(f'存在数据的最大行为:{max_rows}')

# 通过行号遍历最后一行的数据
for i in wb_sheet[max_rows]:
    print(i.coordinate, i.value)

 

查看最后一列的列号

import openpyxl
# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet2']

# 获取最大行
max_col = wb_sheet.max_column
print(f'存在数据的最大列为:{max_col}')

 

2.8. 判断空行、列

openpyxl 中没有直接判断的方法,使用循环判断。判断图表如下:

 

判断空行

# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet2']

# 获取最大行数、最大列数
max_row = wb_sheet.max_row
max_col = wb_sheet.max_column

# 通过行数、列数去遍历
for row  in wb_sheet.iter_rows(max_row=max_row, max_col=max_col):
    # 判断空行
    if all(cell.value is None for cell in row):
        print(f'第{row[0].row}行是空行')

 

判断空列的方法与空行相似

# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet2']

# 获取最大行数、最大列数
max_row = wb_sheet.max_row
max_col = wb_sheet.max_column

# 通过行数、列数去遍历
for col  in wb_sheet.iter_cols(max_row=max_row, max_col=max_col):
    # 判断空列
    if all(cell.value is None for cell in col):
        print(f'第{col[0].column_letter}行是空列')

 

 

3. 设置Excel格式

3.1. 56种颜色代码

索引值颜色名称颜色代码
0黑色000000
1白色FFFFFF
2红色FF0000
3深红色800000
4黄色FFFF00
5绿色00FF00
6深绿色8000
7蓝色0000FF
8深蓝色80
9洋红色FF00FF
10深洋红色800080
11青色00FFFF
12深青色8080
13AutoCADFF9933
14自定义1FF6600
15自定义2FFCC00
16棕色993300
17橄榄绿333300
18深橄榄绿333333
19深灰色808080
20浅灰色C0C0C0
21橙色FF9900
22蓝灰色666699
23白色网格F2F2F2
24淡黄色FFFFCC
25亮绿色C8D531
26光绿松石99CCFF
27浅天蓝99CC00
28淡蓝色CCFFFF
29玫瑰色FF99CC
30薰衣草色CC99FF
31棕褐色CC9966
32浅蓝色99CCFF
33水绿色00FFFF
34石灰色CCFF00
35黄金色CC9900
36天蓝色0066CC
37杨李色CC99CC
38浅橙色FEBF00
39鲜肉色FFBF00
40深棕色663300
41橄榄褐色333300
42深红色660000
43暗黄色999900
44森林绿色6600
45绿松石色3399FF
46蓝灰色666699
47蓝绿色6699
48灰色40969696
49灰色 25C0C0C0
50天蓝色0066CC
51茶色FFC000
52深绿色3300
53浅绿色00FFFF
54玫瑰红FFAFAF
55杨李色800080

 

3.2. 设置字体属性

  • 例如:字体名称、字号、颜色和是否加粗等。

语法

openpyxl.styles.Font(
    name="Calibri"    #字体名称(Arial、Calibri、Times New Roman、Verdana、Helvetica、Tahoma)
    size=11           #字体大小
    bold=False        #是否加粗
    italic=False      #是否倾斜
    underline="none"  #下划线类型
    color="000000"    #字体颜色,红(FF0000)、橙(993300)、黄(FFFF00)、绿(00FF00)、青(00FFFF)、蓝(0000FF)、紫(CC99FF)
    scheme="None"     #字体下划线颜色方案
    strike=False      #删除线。
)

设置单个单元格属性

import openpyxl
from openpyxl.styles import Font

# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')
# 指定工作表名
wb_sheet = wb['Sheet1']

# 指定坐标A1,设置属性(颜色:红色)
wb_sheet['A1'].font = Font(color='FF0000')

# 指定坐标(1行2列)和(2行2列)为蓝色
wb_sheet.cell(row=1, column=2).font = Font(color='0000FF')
wb_sheet.cell(row=2, column=2).font = Font(color='0000FF')

# 保存文件
wb.save('./tmp.xlsx')

 

设置某个工作表所有存在数据的单元格属性

# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet2']

# 将工作表所有存在数据的单元格设置属性(获取最大行数、最大列数)
max_row = wb_sheet.max_row
max_col = wb_sheet.max_column

# 通过行数、列数去遍历
for row  in wb_sheet.iter_rows(max_row=max_row, max_col=max_col):
    # 遍历单个单元格
    for cell in row:
        # 设置属性(字体大小:18,字体加粗,字体删除线)
        cell.font = openpyxl.styles.Font(size=18, bold=True,strike=True)

#保存文件
wb.save('./tmp.xlsx')

 

指定表格设置属性

import openpyxl
# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet2']

# 指定开始行、结束行;开始列,结束列设置属性
start_row,end_row = 1,3    #1-3行
start_col,end_col = 2,4    #2-4列

# 通过行数、列数去遍历
for row  in wb_sheet.iter_rows(min_row=start_row, max_row=end_row, min_col=start_col, max_col=end_col):
    # 遍历单个单元格
    for cell in row:
        # 设置属性(字体颜色:红色)
        cell.font = openpyxl.styles.Font(color='FF0000')

#保存文件
wb.save('./tmp.xlsx')

   

3.3. 设置填充属性

  • 例如:填充类型、填充颜色、前景色、背景色等。

语法

openpyxl.styles.PatternFill(
    fill_type    #填充类型
    fg_color     #前景颜色
    bg_color     #背景颜色
    start_color  #开始颜色
    end_color    #结束颜色,仅在 fill_type 为 “gradient” 时有效
    pattern_type #填充的图案类型,只有在 fill_type 为 “solid” 或 “light* / dark*” 等条纹填充时有效
)

填充类型包含:
    none        #不填充
    solid       #实心填充
    mediumGray, darkGray, lightGray, black: 灰阶填充
    darkHorizontal, darkVertical, darkDown, darkUp, darkGrid, darkTrellis,lightHorizontal, lightVertical, lightDown, lightUp, lightGrid, lightTrellis: 线条或块条纹填充
    gray0625    #62.5% 灰阶填充
    gradient    #渐变填充
    path        #自定义填充

填充的图案类型包括:
    none        #无图案
    solid       #单色图案
    gray0625    #62.5% 灰阶图案
    mediumGray, darkGray, lightGray, black: 灰阶图案
    darkHorizontal, darkVertical, darkDown, darkUp, darkGrid, darkTrellis, lightHorizontal, lightVertical, lightDown, lightUp, lightGrid, lightTrellis: 线条或块条纹图案

示例(设置背景色为绿色)

from openpyxl import load_workbook
from openpyxl.styles import PatternFill

wb = load_workbook('./tmp.xlsx')
wb_sheet = wb['Sheet1']

# 设置A1填充类型为实心填充,背景颜色为绿色
wb_sheet['A1'].fill = PatternFill(fill_type='solid', start_color='00FF00')
# 设置A2填充类型为条纹填充,背景颜色为红色,条纹颜色为黄色
wb_sheet['A2'].fill = PatternFill(fill_type='lightVertical', start_color='FF0000', end_color='FFFF00')

wb.save('./tmp.xlsx')

 

3.4. 设置对齐属性

  • 例如:水平对齐方式、垂直对齐方式、自动换行等。

语法

openpyxl.styles.Alignment(
    horizontal    #水平对齐方式, 默认general(一般对齐)
    vertical      #垂直对齐方式
    wrap_text     #是否自动换行(True 或 False)
    shrink_to_fit #是否缩小字体以适应单元格大小(True 或 False)
    indent        #缩进级别(0-255)
    reading_order #读取顺序(1: 从左到右; 2: 从右到左)
)

水平对齐选项:
    general           #默认值,一般对齐
    left              #左对齐
    center            #居中对齐
    right             #右对齐
    fill              #填充对齐
    justify           #两端对齐
    centerContinuous  #连续居中对齐(仅限于分布居中)
    distributed       #分布对齐

垂直对齐选项:
    top          #上对齐
    center       #居中对齐
    bottom       #下对齐
    justify      #两端对齐
    distributed  #分布对齐

示例(设置单个单元格对齐方式)

from openpyxl import load_workbook
from openpyxl.styles import Alignment

wb = load_workbook('./tmp.xlsx')
wb_sheet = wb['Sheet1']

# 居中对齐
wb_sheet['A1'].alignment = Alignment(horizontal='center', vertical='center')

# 左对齐,自动换行,缩小字体以适应单元格大小
wb_sheet['A2'].alignment = Alignment(horizontal='left', vertical='top', wrap_text=True, shrink_to_fit=True)

# 分布对齐
wb_sheet['A3'].alignment = Alignment(horizontal='distributed', vertical='center')

wb.save('./tmp.xlsx')

   

示例(设置多个单元格对齐)

from openpyxl import load_workbook
from openpyxl.styles import Alignment

wb = load_workbook('./tmp.xlsx')
wb_sheet = wb['Sheet1']

# 设置单元格的对齐方式为居中
alignment = Alignment(horizontal='center', vertical='center')

# 设置开始行号和结束行号、开始列号和结束列号
start_rows,end_rows = 2,5
start_col, end_col = 2,5

# 采用遍历的方式分别对各个单元格设置对齐方式
for row in wb_sheet.iter_rows(min_row=start_rows, max_row=end_rows, min_col=start_col, max_col=end_col):
    for cell in row:
        # 为每个单元格设置对齐方式
        cell.alignment = alignment

wb.save('./tmp.xlsx')

 

3.5. 设置边框属性

  • 例如:边框样式、边框颜色、边框位置等。

语法

openpyxl.styles.Border(
    left        #左边框样式(参考下方选项)
    right       #右边框样式(参考下方选项)
    top         #上边框样式(参考下方选项)
    bottom      #下边框样式(参考下方选项)
    diagonal    #对角线样式(参考下方选项)
    diagonal_direction  #对角线方向(up: 对角线从下到上; down: 对角线从上到下)
    diagonal_color      #对角线颜色,同颜色规范
)

边框样式选项:
    none              #没有边框
    thin              #细边框
    medium            #中等边框
    dashed            #虚线边框
    dotted            #点线边框
    thick             #粗边框
    double            #双边框
    hair              #细边框,类似于毛发
    mediumDashDot     #中等虚线边框
    dashDot           #虚线点线边框
    mediumDashDotDot  #中等点线点线边框
    dashDotDot        #虚线点线点线边框
    mediumDashed      #中等虚线边框

举例(设置单个单元格边框)

from openpyxl import load_workbook
from openpyxl.styles import Border,Side

wb = load_workbook('./tmp.xlsx')
wb_sheet = wb['Sheet1']

# 为 A1 单元格添加双线边框,颜色为红色
border = Border(
                left=Side(style='double',   color='FF0000'),
                right=Side(style='double',  color='FF0000'),
                top=Side(style='double',    color='FF0000'),
                bottom=Side(style='double', color='FF0000')
)
wb_sheet['A1'].border = border

# 为 A2 单元格添加细虚线边框,颜色为蓝色
thin_border = Border(
                    left=Side(style='thin',   color='0000FF'),
                    right=Side(style='thin',  color='0000FF'),
                    top=Side(style='thin',    color='0000FF'),
                    bottom=Side(style='thin', color='0000FF')
)
wb_sheet['A2'].border = thin_border

wb.save('./tmp.xlsx')

 

举例(设置多个单元格边框),使用遍历逐个设置边框

from openpyxl import load_workbook
from openpyxl.styles import Border,Side

wb = load_workbook('./tmp.xlsx')
wb_sheet = wb['Sheet1']

# 准备一个虚线边框模板,颜色为红色
thin_border = Border(
                left=Side(style='thin',   color='FF0000'),
                right=Side(style='thin',  color='FF0000'),
                top=Side(style='thin',    color='FF0000'),
                bottom=Side(style='thin', color='FF0000')
)

# 设置开始行号和结束行号、开始列号和结束列号
start_rows,end_rows = 2,5
start_col, end_col = 2,5

# 采用遍历的方式分别对各个单元格设置边框
for row in wb_sheet.iter_rows(min_row=start_rows, max_row=end_rows, min_col=start_col, max_col=end_col):
    for cell in row:
        # 为每个单元格设置边框
        cell.border = thin_border

wb.save('./tmp.xlsx')

 

3.6. 合并单元格

  • 分别用于合并指定区域中的单元格和取消已经合并的单元格区域。

合并单元格语法

worksheet.merge_cells(
    range_string=None    #指定要合并的单元格范围。例如:A1:A2
    start_row=None       #是合并范围的左上角单元格的行号。
    start_column=None    #是合并范围的左上角单元格的列号。
    end_row=None         #是合并范围的右下角单元格的行号。
    end_column=None      #是合并范围的右下角单元格的列号。
)
  • 当指定range_string参数时,将自动计算另外4个参数。
  • 如果同时指定了5个参数参数,则以range_string参数为准。

取消合并单元格语法

worksheet.unmerge_cells(
    range_string=None    #指定要取消的合并单元格的范围。
    start_row=None       #是要取消的合并单元格的左上角单元格的行号。
    start_column=None    #是要取消的合并单元格的左上角单元格的列号。
    end_row=None         #是要取消的合并单元格的右下角单元格的行号。
    end_column=None      #是要取消的合并单元格的右下角单元格的列号。
)
  • 用法与合并单元格一致,不做举例说明

 

同一行合并(A1:B1,如果2个单元格都有数据,那么只保留A1;B1:A1 这种语法是错误的,合并行或列,必须从走往右、从上往下选择)

# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet1']

# 指定A1和B1合并
wb_sheet.merge_cells('A1:B1')

# 保存文件
wb.save('./tmp.xlsx')

斜对行合并

# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet1']

# 指定A1和B2合并(自动计算4个单元格)
wb_sheet.merge_cells('A1:B2')

# 保存文件
wb.save('./tmp.xlsx')

 指定开始行、列和结束行列(自定义方法适用于遍历)

# 打开文件
wb = openpyxl.load_workbook('./tmp.xlsx')

# 指定工作表名
wb_sheet = wb['Sheet1']

# 指定开始行号、结束行号;开始列号、结束列号
wb_sheet.merge_cells(start_row=2, end_row=5, start_column=3, end_column=7)

# 保存文件
wb.save('./tmp.xlsx')

 

3.7. 设置组合样式

from openpyxl import load_workbook
from openpyxl.styles import Alignment,NamedStyle,Font,Border,Side,PatternFill

# 打开工作簿和对应的工作表
wb = load_workbook('./tmp.xlsx')
wb_sheet = wb['Sheet1']

# 定义一个名为 my_style 的样式对象
my_style = NamedStyle(name="my_style")
# 设置字体属性
my_style.font = Font(size=14, bold=True)
# 设置填充属性
my_style.fill = PatternFill(start_color='FFC7CE', end_color='FFC7CE', fill_type='solid')
# 设置边框属性
my_style.border = Border(left=Side(style='thin', color='000000'),
                          right=Side(style='thin', color='000000'),
                          top=Side(style='thin', color='000000'),
                          bottom=Side(style='thin', color='000000'))
my_style.alignment = Alignment(horizontal='center', vertical='center')

# 设置开始行号和结束行号、开始列号和结束列号
start_rows,end_rows = 1,3
start_col, end_col  = 1,5

# 采用遍历的方式分别对各个单元格设置对齐方式
for row in wb_sheet.iter_rows(min_row=start_rows, max_row=end_rows, min_col=start_col, max_col=end_col):
    for cell in row:
        # 为每个单元格设置自定义的属性
        cell.style = my_style

# 保存文件
wb.save('./tmp.xlsx')
# 关闭文件
wb.close()

 

 

4. 其他方法

4.1. csv文件导入Excel

通过 pandas.read_csv 读取csv文件内容,语法如下

pandas.read_csv(
    filepath_or_buffer #必选参数,指定文件
    sep                #可选参数,指定分隔符(默认逗号)
    delimiter          #可选参数,指定分隔符,与sep一样,可用任何长度的字符串作为分隔符。
    skipinitialspace   #可选参数,忽略分隔符后的空白,默认为False。
    header             #可选参数,指定第n行作为每列的列名(例如指定第2行,那么不会输出第1行)
    names              #可选参数,指定列名(例如:names=['AA','BB','CC','DD'],使用列表给每列取列名)
    usecols            #可选参数,通过索引指定列数( [0,1,2] 和 [0,2,1] 读取的结果一致,不会更改数据的顺序)
    nrows              #指定读取的行数(nrows=1 读取第2行)
    skiprows           #可选参数,指定跳过某行(skiprows=[0,2] 跳过1和3行)
    skipfooter         #可选参数,指定跳过尾部行数(skipfooter=2 跳过最后2行)
    encoding           #指定编码格式,默认为None,使用系统默认编码。
)

通过 to_excel 保存到Excel文件,语法如下

to_excel(
    excel_writer    #指定工作簿名
    sheet_name      #指定工作表名
    startrow        #写入数据的起始行
    startcol        #写入数据的起始列。
    float_format    #精度设置。
    columns         #要写入的列,默认为None,表示写入所有列。
    header          #是否写入列名,默认为True。
    index           #是否写入索引,默认为True。
    index_label     #索引列的列名。
    merge_cells     #合并单元格。
    encoding        #指定编码格式,默认为None,使用系统默认编码。
)

读取csv文件内容保存到Excel文件(如果存在该文件自动覆盖;如果不存在该文件自动创建)

import pandas

# 读取csv文件,指定分隔符
f = pandas.read_csv('./csv.txt', sep=',')

# 将csv文件内容覆盖到Excel,执行工作表名为AAA(默认为Sheet1)
f.to_excel('tmp.xlsx', index=False, sheet_name='AAA')

 

读取csv文件内容,保存到Excel指定一个新的Sheet

import pandas

# 读取csv文件
f = pandas.read_csv('./csv.txt', sep=',')

# 指定追加模式
with pandas.ExcelWriter('tmp.xlsx', mode='a') as w:
    # 将追加一个工作表BBB到Excel文件,如果BBB存在则报错
    f.to_excel(w, sheet_name='BBB', index=False)

 

读取csv文件内容,指定写入开始行(列)到Excel文件

import pandas

# 读取csv文件
f = pandas.read_csv('./csv.txt', sep=',')

# 指定追加模式
with pandas.ExcelWriter('tmp.xlsx', mode='a') as w:
    # 指定工作表名(ccc),从第11行、4列开始写入数据
    f.to_excel(w, sheet_name='CCC', index=False, startrow=10, startcol=3)

 

4.2. 画图

① 模块语法

matplotlib.pyplot 内置的方法

matplotlib.pyplot.[方法]

方法如下( plt 为 matplotlib.pyplot 的简称):
    plt.title()    #设置图表标题;
    plt.xlabel()   #设置x轴标签;
    plt.ylabel()   #设置y轴标签;
    plt.grid()     #添加网格线到图表中;
    plt.legend()   #在图表中添加图例;
    plt.savefig()  #将图表保存到指定的文件中。
    plt.xticks()   #设置x轴刻度标签;
    plt.yticks()   #设置y轴刻度标签;

    plt.plot()     #绘制折线图、散点图、条形图等;
    plt.boxplot()  #绘制箱体图;
    plt.bar()      #绘制垂直方向的条形图;
    plt.hist()     #绘制直方图;
    plt.pie()      #绘制饼图;
    plt.imshow()   #绘制图像;
    plt.contour()  #绘制等高线图;
    plt.scatter()  #绘制散点图;
    plt.stem()     #绘制干状图(即将每个点的值以线的形式展示);
    plt.step()     #绘制阶梯图;
    plt.polar()    #绘制极坐标图;
    plt.subplots() #创建Figure对象和多个子图;


    plt.semilogx() #以10为底的对数刻度绘制x轴;
    plt.semilogy() #以10为底的对数刻度绘制y轴;
    plt.loglog()   #以10为底的对数刻度绘制x、y轴;
    plt.fill()     #填充两条曲线之间的区域;
    plt.text()     #在图表中添加文本注释;

折线图语法(matplotlib.pyplot.plot)

matplotlib.pyplot.plot(
    x          #横坐标数组或一个可迭代对象;
    y          #纵坐标数组或一个可迭代对象;
    c          #散点图中点的颜色;
    label      #该图例标签的字符串;
    linestyle  #折线的样式;
    linewidth  #折线或线框的线宽;
    marker     #散点图的标记样式;
    markersize #标记大小;
    alpha      #透明度;
    edgecolors #散点或折线周围的颜色;
    color      #折线或线框的颜色;
    markeredgecolor    #标记边界的颜色;
    markeredgewidth    #标记边界的线宽;
    markerfacecolor    #标记内部的颜色;
    linestyle          #折线或线框的样式;
    dash_capstyle      #折线中间断点的样式;
    dash_joinstyle     #折线中间断点的连接样式;
    solid_capstyle     #线框起点或终点的样式;
    solid_joinstyle    #线框起点或终点在交叉区域的样式;
    zorder             #控制图层顺序,越大的值表示越靠近上层;
    drawstyle          #折线的绘制方式,可以是"steps-pre"、“steps-mid"或"steps-post”;
    dashes             #自定义折线的样式,例如[10, 5, 20, 5]表示线段长10,空隙长5,线段长20,空隙长5;
    antialiased        #抗锯齿效果,默认为True;
    fillstyle          #散点的填充样式,可以是"full"、“left”、“right"或"bottom”;
    solid_joinstyle    #线框起点或终点在交叉区域的样式;
    visible            #对象是否可见;
    clip_on            #是否将对象剪裁为轴范围内;
    clip_path          #剪裁路径;
    markerfacecoloralt #用于面向未填充的标记的交替面颜色。
)

柱状图语法(matplotlib.pyplot.bar)

matplotlib.pyplot.bar(
    x          #柱状图中每个柱的横坐标;
    height     #每个柱的高度;
    width      #每个柱的宽度,为浮点数或数组;
    align      #柱的对齐方式,可以是’center’、‘edge’、‘none’,分别表示居中对齐、边缘对齐和不对齐;
    bottom     #每个柱底部的高度;
    log        #是否使用对数坐标轴;
    color      #柱状的颜色,可以是单个颜色字符串,也可以是RGB或RGBA序列、灰度值或html字符串;
    edgecolor  #每个柱的边框颜色;
    linewidth  #每个边框的线宽;
    hatch      #每个柱填充的图案样式(纹理);
    capsize    #误差线末端箭头的长度;
    error_kw   #误差线相关参数:
    elinewidth #误差线线宽;
    capsize    #误差线末端箭头的长度;
    capthick   #误差线末端箭头的厚度;
    ecolor     #误差线颜色。
    align      #对齐方式,可以是“edge”,“center”。
    label      #柱状图的标签;
    alpha      #透明度;
    visible    #是否可见;
    zorder     #控制图层顺序,越大的值表示越靠近上层;
    tick_label #柱状图的刻度标签;
    xerr       #绘制误差线;
    yerr       #绘制误差线。
)

颜色写法

red:红色
g:绿色
b:蓝色
c:青色
m:品红
y:黄色
k:黑色
w:白色。

 

② 折线图

Excel数据如下:

  

读取3列数据,绘制折线图

import pandas
import matplotlib.pyplot as plt

# 防止乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

# 读取Excel文件内容,如果读取csv文件,则使用pandas.read_csv
df = pandas.read_excel('./tmp.xlsx', sheet_name='AAA')

# 提取横坐标的数据(常见的:日期,时长)
x = df['data'].to_numpy()
# 通过列名(c1/c2/c3)提取画图的数据
y1 = df['c1'].to_numpy()
y2 = df['c2'].to_numpy()
y3 = df['c3'].to_numpy()

# 绘制折线图
plt.plot(x, y1, label='c1')  # 指定纵坐标y1,并自定义图例标题为c1
plt.plot(x, y2, label='c2')  # 指定纵坐标y2,并自定义图例标题为c2
plt.plot(x, y3, label='c3')  # 指定纵坐标y3,并自定义图例标题为c3
plt.legend()                 # 显示图例标题
plt.xlabel('横坐标名称')
plt.ylabel('纵坐标名称')
plt.title('折线图标题')
plt.savefig('./aa.jpg')      # 保存图片
plt.show()  #查看图片

  

如果列名没有在第一行,那么在读取的时候直接跳过n行

# 读取Excel文件内容,header跳过前10行
df = pandas.read_excel('./tmp.xlsx', sheet_name='AAA', header=10)

  

增加属性(标记点、网格、跳过n行)

import pandas
import matplotlib.pyplot as plt

# 防止乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

# 读取Excel文件内容,如果读取csv文件,则使用pandas.read_csv
df = pandas.read_excel('./tmp.xlsx', sheet_name='AAA', header=40)

# 提取横坐标的数据(常见的:日期,时长)
x = df['data'].to_numpy()
# 通过列名(c1/c2/c3)提取画图的数据
y1 = df['c1'].to_numpy()
y2 = df['c2'].to_numpy()
y3 = df['c3'].to_numpy()

# 定义图表大小(长15,高8)
plt.figure(figsize=(15,8))
# 绘制折线图。label自定义图例名称,marker自定义标记样式,markersize指定标记大小
plt.plot(x, y1, label='c1', marker='o', markersize=3)
plt.plot(x, y2, label='c2', marker='o', markersize=3)
plt.plot(x, y3, label='c3', marker='o', markersize=3)
plt.legend()    #显示图例标题
plt.grid()      #显示网格线
plt.xlabel('横坐标名称')
plt.ylabel('纵坐标名称')
plt.title('折线图标题')
plt.savefig('./aa.jpg')    # 保存图片
plt.show()  #查看图片

  

③ 柱状图

多条柱状图重叠

import pandas
import matplotlib.pyplot as plt

# 防止乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

# 读取Excel文件内容
df = pandas.read_excel('./tmp.xlsx', sheet_name='AAA', header=40)

# 提取横坐标的数据(常见的:日期,时长)
x = df['data'].to_numpy()
# 通过列名(c1/c2/c3)提取画图的数据
y1 = df['c1'].to_numpy()
y2 = df['c2'].to_numpy()
y3 = df['c3'].to_numpy()

# 定义图表大小(长15,高8)
plt.figure(figsize=(15,8))
# 绘制折线图(label为自定义图例名称;width为柱状宽0-1;alpha为透明度0-1;edgecolor为边框颜色)
plt.bar(x, y1, label='c1', width=0.5, alpha=0.5, edgecolor='black')
plt.bar(x, y2, label='c2', width=0.5, alpha=0.5, edgecolor='black')
plt.bar(x, y3, label='c3', width=0.5, alpha=0.5, edgecolor='black')
plt.legend()                 # 显示图例标题
plt.xlabel('横坐标名称')
plt.ylabel('纵坐标名称')
plt.title('折线图标题')
# plt.savefig('./aa.jpg')    # 保存图片
plt.show()  #查看图片

  

多条图形重叠颜色难以区分,让x轴+n(右移动n)

import pandas
import matplotlib.pyplot as plt

# 防止乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

# 读取Excel文件内容
df = pandas.read_excel('./tmp.xlsx', sheet_name='AAA', header=40)

# 提取横坐标的数据(常见的:日期,时长)
x = df['data'].to_numpy()
# 通过列名(c1/c2/c3)提取画图的数据
y1 = df['c1'].to_numpy()
y2 = df['c2'].to_numpy()
y3 = df['c3'].to_numpy()

# 定义图表大小(长15,高8)
plt.figure(figsize=(15,8))
# 绘制折线图(label为自定义图例名称;width为柱状宽0-1;alpha为透明度0-1;edgecolor为边框颜色;color为柱状颜色)
plt.bar(x, y1, label='c1', width=0.2, alpha=0.5, edgecolor='black',color='g')
plt.bar(x+0.2, y2, label='c2', width=0.2, alpha=0.5, edgecolor='black',color='c')
plt.bar(x+0.4, y3, label='c3', width=0.2, alpha=0.5, edgecolor='black',color='m')
plt.legend()                 # 显示图例标题
plt.xlabel('横坐标名称')
plt.ylabel('纵坐标名称')
plt.title('折线图标题')
plt.savefig('./aa.jpg')    # 保存图片
plt.show()  #查看图片

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/647756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python本地安装库:一个简单易懂的指南

Python本地安装库&#xff1a;一个简单易懂的指南 Python是一种高级的编程语言&#xff0c;它拥有庞大的社区支持和无数的第三方库。如果你在使用Python时需要一些额外的功能&#xff0c;那么你可能需要安装一些库。本文将介绍如何在本地安装库&#xff0c;以及一些需要注意的…

chatgpt赋能python:如何更新Python库?Python更新库完全指南

如何更新Python库&#xff1f;Python更新库完全指南 Python作为一种最受欢迎的编程语言&#xff0c;其库和工具的数量是惊人的。这些库是Python生态系统的重要组成部分&#xff0c;以便帮助开发人员解决不同类型的问题。然而&#xff0c;这些库会更新&#xff0c;开发人员需要…

什么是椭圆曲线上的加法

椭圆曲线图形示例 注意&#xff0c;椭圆曲线随着你参数的不同&#xff0c;有不同的形态&#xff0c;这里仅是一种示例&#xff0c;详细的关于椭圆曲线的知识可以后附扩展知识连接 椭圆曲线上的加法 椭圆曲线上的加法不是我们通常意义上的数值加法&#xff0c;而是一种特殊的几…

干翻Mybatis源码系列之第十篇:Mybatis Plugins基本概念

给自己的每日一句 不从恶人的计谋&#xff0c;不站罪人的道路&#xff0c;不坐亵慢人的座位&#xff0c;惟喜爱耶和华的律法&#xff0c;昼夜思想&#xff0c;这人便为有福&#xff01;他要像一棵树栽在溪水旁&#xff0c;按时候结果子&#xff0c;叶子也不枯干。凡他所做的尽…

Oracle中的行列互转———pivot、unpivot函数用法

一、需求说明 项目开发过程中涉及到oracle数据库的数据操作&#xff1b;但是需要将数据进行列的互转&#xff0c;通过查阅资料可知在oracle中有三种方式可以实现行列互转&#xff1a; ①使用decode 函数&#xff1b; ②使用case when 函数&#xff1b; ③使用pivot函数&…

Linux之设置主机名

目录 Linux之设置主机名 查看主机名 语法格式 案例 修改主机名 语法格式 案例 --- 修改静态主机名为joker 配置静态解析 为Linux主机指派域名解析 Linux之设置主机名 查看主机名 语法格式 hostnamectl [status] [--static|--transient|--pretty] 解析&#xff1a; s…

极致呈现系列之:Echarts地图的浩瀚视野(一)

目录 Echarts中的地图组件地图组件初体验下载地图数据准备Echarts的基本结构导入地图数据并注册展示地图数据结合visualMap展示地图数据 Echarts中的地图组件 Echarts中的地图组件是一种用于展示地理数据的可视化组件。它可以显示全国、各省市和各城市的地图&#xff0c;并支持…

整形在内存中的存储-原码补码反码的理解与应用

目录 一、概论 1.1 C语言中基本的数据类型 1.2 类型的基本归类 二、整形在内存中的存储 2.1 原码、反码、补码 2.2 存储补码和大小端存储 三、计算各基本数据类型的范围计算原理 3.1 有符号类型的整形范围 3.2 无符号类型的整形范围 3.3 例题 一、概论 C语言提供了非常…

【Java基础学习打卡07】Java语言概述

目录 引言一、Java语言1.Java语言简介2.Java语言优势3.Java能做什么&#xff1f; 二、Java之父三、Java简史1.Java版本时间线2.Java发展重要节点 总结 引言 一、Java语言 1.Java语言简介 Java语言是一种以面向对象为基础的高级编程语言。吸收了C语言的各种优点&#xff0c;又…

【IMX6ULL驱动开发学习】06.APP与驱动程序传输数据+自动创建设备节点(hello驱动)

一、APP与驱动之间传输数据 /*驱动从APP获取数据*/ unsigned long copy_from_user(void *to, const void *from, unsigned long n)/*驱动传输数据到APP*/ unsigned long copy_to_user(void *to, const void *from, unsigned long n)二、使用copy_to_user、copy_from_user在AP…

32908字长文理解Large CV Model:Segment Anything

作者&#xff1a;猛码Memmat 目录 Abstract1. IntroductionTaskModelData engineDatasetResponsible AIExperimentsRelease 2. Segment Anything TaskTaskPre-trainingZero-shot transferRelated tasksDiscussion 3. Segment Anything ModelImage encoderPrompt encoderMask de…

十个实用MySQL函数

函数 0. 显示当前时间 命令&#xff1a;。 作用: 显示当前时间。 应用场景: 创建时间&#xff0c;修改时间等默认值。 例子&#xff1a; 1. 字符长度 命令&#xff1a;。 作用: 显示指定字符长度。 应用场景: 查看字符长度时。 例子&#xff1a; 2. 日期格式化 命令…

【群智能算法改进】一种改进的白鲸优化算法 改进白鲸优化算法 改进后的EBWO[1]算法【Matlab代码#40】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 原始BWO算法2. 改进的白鲸优化算法EBWO2.1 Logistic映射2.2 透镜成像折射方向学习 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节&#xff1a;资源获取】 1. 原始BWO算法 白鲸优化算法 (BWO&…

LeetCode —— 206. 反转链表

LeetCode —— 206. 反转链表 一、题目描述&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head …

【Shiro】第二章 Shiro概述

目录 1、Shiro简介 2、核心组件 1、Shiro简介 【1】什么是Shiro? Shiro是apache旗下一个开源框架&#xff0c;它将软件系统的安全认证相关的功能抽取出来&#xff0c;实现用户身份认证&#xff0c;权限授权、加密、会话管理等功能&#xff0c;组成了一个通用的安全认证框…

华为OD机试真题 JavaScript 实现【租车骑绿道】【2023Q1 100分】

一、题目描述 部门组织绿岛骑行团建活动&#xff0c;租用公共双人自行车骑行&#xff0c;每辆自行车最多坐两人、最大载重 M。 给出部门每个人的体重&#xff0c;请问最多需要租用多少双人自行车。 二、输入描述 第一行两个数字 m、n&#xff0c;自行车限重 m&#xff0c;代…

管理类联考——逻辑——技巧篇——论说文模块

正论模块 一直为社会、企业所重视。正是因为___让我们在应对挑战中超越自我&#xff0c;形成了一种保持可持续发展的能力与定力,涵养了自强不息、卧薪尝胆的品质&#xff0c;弥补了心智和能力的短板。古今中外这样的事例比比皆是/正如__所言“__”(事实证据或引典&#xff09;…

Mybatis学习之插件

Mybatis学习之插件 Plugins Mybatis中的插件虽然名称叫插件&#xff0c;但实质上是通过动态代理实现的。和我们平时讲的插件概念不一样&#xff0c;但是本质上都是给外部提供接口进行扩展。 MyBatis 允许我们在映射语句执行过程中的某一点进行拦截调用。MyBatis允许我们使用…

【C/C++】引用()的概念和用法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

推荐几款可以大幅提高开发效率的vscode插件

1、Vue 2 Snippets 这是一款基于vue2的代码片段提示插件&#xff0c;特别好用&#xff0c;可以有效的提高我们的编码速度。 他的能力非常强大&#xff0c;具体还需要我们去看他的文档文档地址 &#xff0c;解锁更多能力。 2、Path Autocomplete 这是一款路劲提示插件 vscod…