觉得有用,网上抄的
这篇文章主要介绍了Python openpyxl模块原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
此模块不是Python内置的模块需要安装,安装方法如下
pip install openpyxl
注意:
此模块只支持offce 2010,即是电子表格后缀是*.xlsx
1、openpyxl模块常用函数
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
|
import
openpyxl
wb
=
openpyxl.load_workbook(
'example.xlsx'
)
##### 工作表常用操作
print
(wb.active)
# 获取电子表格Worksheet是否有数据
print
(wb.read_only)
# 是否是以只读方式打开
print
(wb.encoding)
# 获取电子表格的编码
print
('', wb.properties)
# 获取电子表格属性如:标题、作者、创建时间等
print
(wb.worksheets)
# 获取工作表名
print
(wb.get_sheet_names())
# 获取工作表的所有名字
print
(wb.sheetnames)
# 获取工作表的所有名字跟wb.get_sheet_names()一样的功能
print
(wb.get_sheet_by_name(
'Sheet1'
))
# 通过工作表的名字,获取Worksheet对象操作电子表格
print
(wb.create_sheet(
'python创建的工作表'
))
# 创建的工作表,记得用save保存,才保存到硬盘上
print
(wb.copy_worksheet(wb[
'Sheet1'
]))
# 复制工作表
#### 工作表的常用操作
sheet1_obj
=
wb[
'Sheet1'
]
print
(sheet1_obj.title)
# 工作表的标题
print
(sheet1_obj.dimensions)
# 获取表格大小,返回格式如:A1:D6
print
(sheet1_obj.max_row)
# 表格最大行数
print
(sheet1_obj.min_row)
# 表格最小行数
print
(sheet1_obj.max_column)
# 表格最大列数
print
(sheet1_obj.min_column)
# 表格最小列数
print
(sheet1_obj.rows)
# 按行获取单元格(Cell对象)
print
(sheet1_obj.columns)
# 按列获取单元格(Cell对象)
print
(sheet1_obj.freeze_panes)
# 冻结窗格
print
(sheet1_obj.values)
# 按行获取表格的内容(数据)
print
(sheet1_obj.iter_rows())
#迭代器方式,按行获取所有单元格(Cell对象)
print
(sheet1_obj.iter_columns())
#迭代器方式,按列获取所有单元格(Cell对象)
sheet1_obj.append([
'1列'
,
'2列'
,
'3列'
,
'4列'
])
#往工作表最后一行插入多列数据
#### 单元格的常用操作
sheet1_obj.merged_cells
#合并单元格
sheet1_obj.unmerge_cells
#取消合并单元格
print
(sheet1_obj[
'A2'
].row)
# 获取行数
print
(sheet1_obj[
'A2'
].column)
# 获取列数
print
(sheet1_obj[
'B1'
].value)
#获取单元格的值
wb.save(
'example.xlsx'
)
#保存单元格
|
2、利用openpyxl模块创建一张电子表格
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from
openpyxl
import
Workbook
wb
=
Workbook()
# print(wb.get_sheet_names()) # 获取工作表的名字
ws
=
wb.get_sheet_by_name(
'Sheet'
)
# 获取Sheet工作表对象
# print(ws.title) # 获取工作表的标题
ws.title
=
'Student'
# 设置新的工作表
# 设置内容
ws[
'A1'
]
=
'Hello World'
import
datetime
ws[
'A2'
]
=
datetime.datetime.now()
wb.save(
'new_sample.xlsx'
)
|
运行效果
3、利用openpyxl模块对电子表格运算操作(求和数、平均数)
表格例子如下:
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
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import
openpyxl
from openpyxl.styles
import
Alignment
def process_worksheet(sheet):
avg_column = sheet.max_column + 1
# 平均数,存放在最后一列
sum_column = sheet.max_column + 2
# 求和,存放在最后第二列
for
row in sheet.iter_rows(min_row=2, min_col=2):
scores = [cell.value
for
cell in row]
# 获取一行的值
sum_score = sum(scores)
# 求一行的和
avg_score = sum_score / len(scores)
# 求一行的平均数
avg_cell = sheet.cell(row=row[0].row, column=avg_column)
sum_cell = sheet.cell(row=row[0].row, column=sum_column)
avg_cell.value = avg_score
# 定位到单元格,设置总分
sum_cell.value = sum_score
# 定位到单元格,设置平均分
# 设置对齐方式,水平是右对齐,垂直是居中
align = Alignment(horizontal=
'left'
, vertical=
'center'
, wrap_text=True)
avg_cell.alignment = align
sum_cell.alignment = align
# 设置平均分和总分的标题
sheet.cell(row=1, column=avg_column).value =
'平均分'
sheet.cell(row=1, column=sum_column).value =
'总分'
def main():
wb = openpyxl.load_workbook(
'example.xlsx'
)
sheet = wb.get_sheet_by_name(
'Sheet1'
)
process_worksheet(sheet)
wb.save(
'example.xlsx'
)
if
__name__ ==
'__main__'
:
main()
|
运行效果
4、多张电子表格合并为一张电子表格
准备3张电子表格
员工1.xlsx
员工2.xlsx
员工3.xlsx
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
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import
openpyxl
import
glob
import
os
def
merge_xlsx_files(xlsx_files):
wb
=
openpyxl.load_workbook(xlsx_files[
0
])
# 打开第一张电子表格
ws
=
wb.active
# 激活 worksheet
ws.title
=
'merged result'
# 合并结果
for
filename
in
xlsx_files[
1
:]:
workbook
=
openpyxl.load_workbook(filename)
sheet
=
workbook.active
# 激活 worksheet
for
row
in
sheet.iter_rows(min_row
=
2
):
# 从第二行开启迭代
values
=
[cell.value
for
cell
in
row]
# 返回一列的值,以列表类型
ws.append(values)
# 把列表增加到新的表格里面
return
wb
def
get_all_xlsx_files(path):
"""指定后缀名,获取所有跟后缀相关的文件类型,返回列表"""
xlsx_files
=
glob.glob(os.path.join(path,
'*.xlsx'
))
sorted
(xlsx_files, key
=
str
.lower)
# 排序
return
xlsx_files
def
main():
path
=
os.path.join(os.path.dirname(os.getcwd()),
'临时测试'
,
'excels'
)
# 目录自行配置
xlsx_files
=
get_all_xlsx_files(path)
wb
=
merge_xlsx_files(xlsx_files)
wb.save(
'merge_data.xlsx'
)
# 保存数据到硬盘
if
__name__
=
=
'__main__'
:
main()
|
运行效果(硬盘多出一张电子表格 merge_data.xlsx)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。