广告位联系
返回顶部
分享到

Python使用openpyxl处理Excel文件的方法

python 来源:互联网 作者:佚名 发布时间:2022-08-17 22:07:56 人浏览
摘要

前言 安装openpyxl模块: 1 pip install openpyxl 导入模块: 1 import openpyxl 官方文档: 1. Excel窗口 工作簿(workbook):Excel的文件 工作表(worksheet):一个工作簿由多个工作表组成 列(column)

前言

安装openpyxl模块:

1

pip install openpyxl

导入模块:

1

import openpyxl

官方文档:

 

1. Excel窗口

  • 工作簿(workbook):Excel的文件
  • 工作表(worksheet):一个工作簿由多个工作表组成
  • 列(column):工作表的列名为A、B、C等的大写字母
  • 行(row):工作表的行名称为1、2、3等的数字
  • 单元格(cell):工作表中的每个格子称为单元格,用(列名,行名)表示

 

2. 读取Excel文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

# author:mlnt

# createdate:2022/8/16

 

import openpyxl

from openpyxl.utils import get_column_letter, column_index_from_string

 

# 1.打开文件

# 使用openpyxl.load_workbook()方法打开Excel文件

filename = 'data.xlsx'

work_book = openpyxl.load_workbook(filename=filename)  # 加载Excel文件

 

# 2.获取工作表名称

"""

- Excel文件对象.sheetnames:获取工作簿文件的所有工作表,以列表数据类型返回

- Excel文件对象.active:获取当前工作表的名称

"""

# 获取所有工作表的名称

work_sheets = work_book.sheetnames

print(f'工作表列表:{work_sheets}')

# 工作表列表:['Sheet1', 'Sheet2', 'Sheet3']

 

# 获取当前工作表的名称

current_sheet = work_book.active

print(f'当前工作表:{current_sheet}')

# 当前工作表:

 

# 获取当前工作表的内容

title = current_sheet.title

print(f'当前工作表标题:{title}')

# 当前工作表标题:Sheet1

 

# 3.切换工作表

work_sheet = work_book['Sheet2']  # 返回名称相应的工作表

print(f'当前工作表:{work_sheet.title}')

# 当前工作表:Sheet2

work_sheet = work_book['Sheet1']  # 返回名称相应的工作表

print(f'当前工作表:{work_sheet.title}')

# 当前工作表:Sheet1

 

# 4.获取工作表的内容

print(f'单元格A1: {work_sheet["A1"].value}')

print(f'单元格B1: {work_sheet["B1"].value}')

print(f'单元格C1: {work_sheet["C1"].value}')

print(f'单元格D1: {work_sheet["D1"].value}')

print(f'单元格E1: {work_sheet["E1"].value}')

print(f'单元格F1: {work_sheet["F1"].value}')

 

# 单元格A1: 姓名

# 单元格B1: 字

# 单元格C1: 号

# 单元格D1: 所处时代

# 单元格E1: 别称

# 单元格F1: 代表作

 

# 获取单元格相对位置信息

# column:列,row:行,coordinate:坐标

print(f'单元格A1: {work_sheet["A1"].column}, {work_sheet["A1"].row}, {work_sheet["A1"].coordinate}')

print(f'单元格B1: {work_sheet["B1"].column}, {work_sheet["B1"].row}, {work_sheet["B1"].coordinate}')

print(f'单元格C1: {work_sheet["C1"].column}, {work_sheet["C1"].row}, {work_sheet["C1"].coordinate}')

print(f'单元格D1: {work_sheet["D1"].column}, {work_sheet["D1"].row}, {work_sheet["D1"].coordinate}')

print(f'单元格E1: {work_sheet["E1"].column}, {work_sheet["E1"].row}, {work_sheet["E1"].coordinate}')

print(f'单元格F1: {work_sheet["F1"].column}, {work_sheet["F1"].row}, {work_sheet["F1"].coordinate}')

# 单元格A1: 1, 1, A1

# 单元格B1: 2, 1, B1

# 单元格C1: 3, 1, C1

# 单元格D1: 4, 1, D1

# 单元格E1: 5, 1, E1

# 单元格F1: 6, 1, F1

 

 

# 5.获取工作表内容的列数和行数

print(f'工作表列数:{work_sheet.max_column}')

print(f'工作表行数:{work_sheet.max_row}')

# 工作表列数:6

# 工作表行数:20

 

# 6.获取单元格内容

# cell(column=n, row=m)

for j in range(1, work_sheet.max_row + 1):

    for i in range(1, work_sheet.max_column + 1):

        print(work_sheet.cell(column=i, row=j).value, end=' ')

    print()

 

# 7.工作表对象的rows和columns

"""

创建工作表对象成功后,会自动产生数据产生器(generators):

rows: 工作表数据产生器以行方式包裹,每一行用一个Tuple包裹;

columns:工作表数据产生器以列方式包裹,每一列用一个Tuple包裹。

"""

print(type(work_sheet.rows))  #

print(type(work_sheet.columns))  #

 

for cell in list(work_sheet.columns)[0]:

    print(cell.value)

 

for cell in list(work_sheet.rows)[1]:

    print(cell.value, end=' ')

 

# 逐行遍历

print('逐行遍历开始...')

for row in work_sheet.rows:

    for cell in row:

        print(cell.value, end=' ')

    print()

print('逐行遍历结束...')

 

# 逐列遍历

print('逐列遍历开始...')

for column in work_sheet.columns:

    for cell in column:

        print(cell.value, end=' ')

    print()

print('逐列遍历结束...')

 

# 8.用整数取代域名

"""

get_column_letter(数值):将数值转成字母

column_index_from_string(字母):将字母转成数值

"""

 

print(f'列数:{get_column_letter(work_sheet.max_column)}')

print(f"3 --> {get_column_letter(3)}")

print(f"26 --> {get_column_letter(26)}")

print(f"39 --> {get_column_letter(39)}")

print(f"46 --> {get_column_letter(46)}")

print(f"120 --> {get_column_letter(120)}")

# 列数:F

# 3 --> C

# 26 --> Z

# 39 --> AM

# 46 --> AT

# 120 --> DP

 

print(f"A --> {column_index_from_string('A')}")

print(f"F --> {column_index_from_string('F')}")

print(f"AB --> {column_index_from_string('AB')}")

print(f"BBC --> {column_index_from_string('BBC')}")

print(f"CNN --> {column_index_from_string('CNN')}")

# A --> 1

# F --> 6

# AB --> 28

# BBC --> 1407

# CNN --> 2406

 

# 9.切片

# 使用切片的概念读取某区间数据

# 逐行读取

for row in work_sheet['A3':'F4']:

    for cell in row:

        print(cell.value, end=' ')

    print()

# 白居易 乐天 香山居士 唐朝 诗魔、诗王 《长恨歌》、《卖炭翁》、《琵琶行》

# 杜甫 子美 少陵野老 唐朝 诗圣 《春望》、《茅屋为秋风所破歌》、《登高》、《望岳》

data.xlsx:

 

3. 写入Excel文件

1

2

3

4

5

6

import openpyxl

 

# 1.创建空白工作簿

work_book = openpyxl.Workbook()

# 2.保存Excel文件

work_book.save('new_workbook.xlsx')

 

4. 复制Excel文件

1

2

3

4

5

6

import openpyxl

 

filename = 'data.xlsx'

work_book = openpyxl.load_workbook(filename=filename)  # 开启工作簿

backup_name = filename[:filename.find('.xlsx')] + '-backup.xlsx'

work_book.save(backup_name)

效果:

 

5. 创建工作表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

# author:mlnt

# createdate:2022/8/16

 

import openpyxl

 

# 1.创建空白工作簿

work_book = openpyxl.Workbook()

print(f'工作表列表:{work_book.sheetnames}')  # 工作表列表:['Sheet']

# 2.创建新的工作表

work_book.create_sheet()

print(f'工作表列表:{work_book.sheetnames}')  # 工作表列表:['Sheet', 'Sheet1']

work_sheet = work_book.active  # 获取当前工作表

print(f'当前工作表:{work_sheet.title}')  # 当前工作表:Sheet

 

"""

在创建工作表时,预设的工作表名称为”SheetN“,N为数字编号,以递增方式显示;

新建的工作表放在工作表列的最右边。

可以通过在create_sheet()中添加参数title和index设置新工作表的名称及位置(工作表位置从0开始)

"""

work_book.create_sheet(index=0, title='工作表1')

work_book.create_sheet(index=2, title='工作表3')

print(f'工作表列表:{work_book.sheetnames}')

# 工作表列表:['工作表1', 'Sheet', '工作表3', 'Sheet1']

 

# 3.删除工作表

# 删除”工作表3“

work_book.remove(work_book['工作表3'])

print(f'工作表列表:{work_book.sheetnames}') # 工作表列表:['工作表1', 'Sheet', 'Sheet1']

# 删除”Sheet“

del work_book['Sheet']

print(f'工作表列表:{work_book.sheetnames}') # 工作表列表:['工作表1', 'Sheet1']

 

# 4.写入单元格

work_sheet = work_book.active  # 获取当前工作表

print(f'当前工作表:{work_sheet.title}')  # 当前工作表:Sheet

rows = [

    ['姓名', '年龄', '联系方式', '学历'],

    ['张三', '18', '18888886666', '大专'],

    ['王二狗', '28', '18888888888', '研究生'],

    ['苟恭芝', '38', '18888889999', '博士'],

    ['李华', '20', '18888887777', '本科'],

    ['曹亠强', '18', '18888883333', '大专']

]

for row in rows:

    work_sheet.append(row)

# 保存Excel文件

work_book.save('my_workbook.xlsx')

 

6. 设置单元格字体及颜色

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

# author:mlnt

# createdate:2022/8/16

import openpyxl

from openpyxl.styles import Font

 

wb = openpyxl.Workbook()  # 创建空白工作簿

ws = wb.active  # 获得当前工作表

"""

bold:加粗,值为True时表示粗体

italic:斜体,值为True时设置斜体

strike:删除线,值为True时设置删除线

name:字体名称,如:Arial

size:字号

color:字体颜色,color='FFFFFF'

"""

fontTitle1 = Font(name='微软雅黑', size=24)

ws['A1'].font = fontTitle1

ws['A1'] = '勿谓言之不预'

fontTitle2 = Font(name='楷体', size=18, bold=True)

ws['A2'].font = fontTitle2

ws['A2'] = '山不在高,有仙则名'

# 设置字体及颜色

# RGB颜色对照表:https://www.917118.com/tool/color_3.html

fontTitle3 = Font(name='Arial', size=20, italic=True, color='00FF7F')

ws['A3'].font = fontTitle3

ws['A3'] = 'The early bird catches the worm.'

 

# 保存Excel文件

wb.save('设置单元格字体.xlsx')

效果:

 

7. 数学公式的使用

常用的数学公式:

  • SUM():总和,如:SUM(A1:A3)
  • AVERAGE():平均值,如:AVERAGE(A1:A3)
  • MAX():最大值,如:MAX(A1:A3)
  • MIN():最小值,如:MIN(A1:A3)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

import openpyxl

 

wb = openpyxl.Workbook()  # 创建空白工作簿

ws = wb.active  # 获得当前工作表

rows = [

    ['学号', '姓名', '语文', '数学', '英语', '物理', '化学', '生物', '总分'],

    ['1001', '张三', 90, 98, 106, 80, 85, 78, '=SUM(C2:H2)'],

    ['1002', 'Tom', 93, 100, 96, 84, 75, 68, '=SUM(C3:H3)'],

    ['1003', 'Jack', 89, 80, 108, 70, 65, 88, '=SUM(C4:H4)'],

    ['1004', 'Mary', 110, 88, 88, 68, 68, 64, '=SUM(C5:H5)'],

    ['1005', 'Jane', 98, 78, 86, 56, 95, 72, '=SUM(C6:H6)']

]

for row in rows:

    # 将数据添加到工作表

    ws.append(row)

ws['B7'] = '总分'

ws['C7'] = '=SUM(C2:C6)'

ws['D7'] = '=SUM(D2:D6)'

ws['E7'] = '=SUM(E2:E6)'

ws['F7'] = '=SUM(F2:F6)'

ws['G7'] = '=SUM(G2:G6)'

ws['H7'] = '=SUM(H2:H6)'

 

ws['B8'] = '平均分'

ws['C8'] = '=AVERAGE(C2:C6)'

ws['D8'] = '=AVERAGE(D2:D6)'

ws['E8'] = '=AVERAGE(E2:E6)'

ws['F8'] = '=AVERAGE(F2:F6)'

ws['G8'] = '=AVERAGE(G2:G6)'

ws['H8'] = '=AVERAGE(H2:H6)'

 

ws['B9'] = '最高分'

ws['C9'] = '=MAX(C2:C6)'

ws['D9'] = '=MAX(D2:D6)'

ws['E9'] = '=MAX(E2:E6)'

ws['F9'] = '=MAX(F2:F6)'

ws['G9'] = '=MAX(G2:G6)'

ws['H9'] = '=MAX(H2:H6)'

 

ws['B10'] = '最低分'

ws['C10'] = '=MIN(C2:C6)'

ws['D10'] = '=MIN(D2:D6)'

ws['E10'] = '=MIN(E2:E6)'

ws['F10'] = '=MIN(F2:F6)'

ws['G10'] = '=MIN(G2:G6)'

ws['H10'] = '=MIN(H2:H6)'

 

wb.save('数学公式的使用.xlsx')

效果:

 

8. 设置单元格宽高

单元格预设的高度为12.75pt,72pt等于1英寸,使用column_dimensions属性可以设置行高;单元格默认宽度为8.43个英文字符宽度,可使用row_dimensions设置单元格的宽度如果将宽度或高度设置为0,则具有隐藏单元格的效果。

1

2

3

4

5

6

7

8

9

10

11

import openpyxl

 

wb = openpyxl.Workbook()  # 创建空白工作簿

ws = wb.active  # 获得当前工作表

 

ws['A1'] = '海内存知己'

ws['A2'] = '天涯若比邻'

ws['B2'] = 'Hello world'

ws.row_dimensions[1].height = 30  # 设置高度为30pt

ws.column_dimensions['B'].width = 30  # 设置宽度为30个英文字符宽

wb.save('设置单元格宽高.xlsx')

效果:

 

9. 设置单元格对齐方式

使用Alignment()方法,需设置2个参数:

horizontal(水平方向):

  • left:靠左
  • right: 靠右
  • center: 居中

vertical(垂直方向):

  • top:靠上
  • center:居中
  • bottom:靠下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import openpyxl

from openpyxl.styles import Alignment

 

wb = openpyxl.Workbook()  # 创建空白工作簿

ws = wb.active  # 获得当前工作表

ws['A1'] = '测试1'

ws['B1'] = '测试2'

ws['C1'] = '测试3'

ws.row_dimensions[1].height = 30  # 设置高度为40pt

ws.column_dimensions['B'].width = 20  # 设置宽度为20个字符宽

ws['A1'].alignment = Alignment(horizontal='left', vertical='top')  # 居左靠上

ws['B1'].alignment = Alignment(horizontal='center', vertical='center')  # 水平居中,垂直居中

ws['C1'].alignment = Alignment(horizontal='right', vertical='bottom')  # 靠右居下

 

# 保存excel文件

wb.save('设置单元格对齐方式.xlsx')

效果:

 

10. 合并与取消单元格合并

合并单元格:

使用merge_cells()合并单元格,可以合并同一行(row)、同一列(column)或一个区域的单元格

取消合并单元格:

unmerge_cells()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

# author:mlnt

# createdate:2022/8/16

 

import openpyxl

from openpyxl.styles import Alignment

 

wb = openpyxl.Workbook()  # 创建空白工作簿

ws = wb.active  # 获得当前工作表

 

"""

1.合并单元格

使用merge_cells()合并单元格,可以合并同一行(row)、同一列(column)或一个区域的单元格

"""

ws['A1'] = '早起的鸟儿有虫吃'

ws['A2'] = 'The early bird catches the worm.'

ws['A3'] = '人生如戏'

ws['C4'] = 'Where there is a will there is a way.'

ws.merge_cells('A1:D1')   # 合并A1:D1单元格

ws.merge_cells('A3:A8')   # 合并A3:A8单元格

ws.merge_cells('C4:G6')   # 合并C4:G6单元格

ws['A1'].alignment = Alignment(horizontal='center')

ws['A3'].alignment = Alignment(vertical='center')

ws['C3'].alignment = Alignment(horizontal='center', vertical='center')

 

# 2.取消合并单元格

# unmerge_cells()

ws.unmerge_cells('A3:A8')  # 取消合并A3:A8单元格

 

wb.save('合并与取消单元格合并.xlsx')

效果:

 

11. 创建图表

 

11.1 柱状图

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

# author:mlnt

# createdate:2022/8/16

"""

BarChart:柱状图

BarChart3D:3D柱状图

PieChart:饼图

PieChart:3D饼图

BubleChart:泡泡图

AreaChart:分区图

AreaChart3D:3D分区图

LineChart:折线图

LineChart3D:3D折线图

RedarChart:雷达图

StockChart:股票图

"""

import openpyxl

from openpyxl.chart import BarChart, Reference

 

wb = openpyxl.Workbook()  # 创建空白工作簿

ws = wb.active  # 获得当前工作表

rows = [

    ['学号', '姓名', '语文', '数学', '英语', '物理', '化学', '生物'],

    ['1001', '张三', 90, 98, 106, 80, 85, 78],

    ['1002', 'Tom', 93, 100, 96, 84, 75, 68],

    ['1003', 'Jack', 89, 80, 108, 70, 65, 88],

    ['1004', 'Mary', 110, 88, 88, 68, 68, 64],

    ['1005', 'Jane', 98, 78, 86, 56, 95, 72]

]

for row in rows:

    # 将数据添加到工作表

    ws.append(row)

 

chart = BarChart()                          # 直方图

chart.title = '2022某班某小组学生成绩表'        # 图表标题

chart.y_axis.title = '分数'                  # y轴标题

chart.x_axis.title = '学员'                  # x轴标题

data = Reference(ws, min_col=3, max_col=8, min_row=1, max_row=6)  # 图表数据

chart.add_data(data, titles_from_data=True)  # 建立图表

x_title = Reference(ws, min_col=2, min_row=2, max_row=6)  # x轴标记名称

chart.set_categories(x_title)  # 设置x轴标记名称

ws.add_chart(chart, 'J1')      # 放置图标位置

wb.save('柱状图.xlsx')

效果:

 

11.2 饼图

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

# author:mlnt

# createdate:2022/8/16

 

import openpyxl

from openpyxl.chart import PieChart, Reference

 

wb = openpyxl.Workbook()  # 创建空白工作簿

ws = wb.active  # 获得当前工作表

rows = [

    ['科目', '分数'],

    ['语文', 90],

    ['数学', 98],

    ['英语', 106],

    ['物理', 80],

    ['化学', 85],

    ['生物', 78]

]

for row in rows:

    ws.append(row)

 

chart = PieChart()     # 饼图

chart.title = '某学员成绩分析表'

 

data = Reference(ws, min_col=2, min_row=1, max_row=7)  # 图表数据

chart.add_data(data, titles_from_data=True)  # 建立图表

labels = Reference(ws, min_col=1, min_row=2, max_row=7)  # 标签名称

chart.set_categories(labels)  # 设置标签名称

ws.add_chart(chart, 'D1')

wb.save('饼图.xlsx')

效果:


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/username666/article/details/126371916
相关文章
  • Python Django教程之实现新闻应用程序

    Python Django教程之实现新闻应用程序
    Django是一个用Python编写的高级框架,它允许我们创建服务器端Web应用程序。在本文中,我们将了解如何使用Django创建新闻应用程序。 我们将
  • 书写Python代码的一种更优雅方式(推荐!)

    书写Python代码的一种更优雅方式(推荐!)
    一些比较熟悉pandas的读者朋友应该经常会使用query()、eval()、pipe()、assign()等pandas的常用方法,书写可读性很高的「链式」数据分析处理代码
  • Python灰度变换中伽马变换分析实现

    Python灰度变换中伽马变换分析实现
    1. 介绍 伽马变换主要目的是对比度拉伸,将图像灰度较低的部分进行修正 伽马变换针对的是对单个像素点的变换,也就是点对点的映射 形
  • 使用OpenCV实现迷宫解密的全过程

    使用OpenCV实现迷宫解密的全过程
    一、你能自己走出迷宫吗? 如下图所示,可以看到是一张较为复杂的迷宫图,相信也有人尝试过自己一点一点的找出口,但我们肉眼来解谜
  • Python中的数据精度问题的介绍

    Python中的数据精度问题的介绍
    一、python运算时精度问题 1.运行时精度问题 在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和
  • Python随机值生成的常用方法

    Python随机值生成的常用方法
    一、随机整数 1.包含上下限:[a, b] 1 2 3 4 import random #1、随机整数:包含上下限:[a, b] for i in range(10): print(random.randint(0,5),end= | ) 查看运行结
  • Python字典高级用法深入分析讲解
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python浅析多态与鸭子类型使用实例
    什么多态:同一事物有多种形态 为何要有多态=》多态会带来什么样的特性,多态性 多态性指的是可以在不考虑对象具体类型的情况下而直
  • Python字典高级用法深入分析介绍
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本

    Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本
    我们的目标是秒杀淘宝或京东等的订单,这里面有几个关键点,首先需要登录淘宝或京东,其次你需要准备好订单,最后要在指定时间快速
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计