python之openpyxl模块

 
更多

 openpyxl模块
Python_Openpyxl
1. 安装
pip install  openpyxl
2. 打开⽂件
①  创建
from  openpyxl  import  Workbook
#  实例化
wb = Workbook()
# 激活  worksheet
ws = wb.active
②  打开已有
>>> from  openpyxl  import   load_workbook
>>> wb2  = load_workbook(‘⽂件名称.xlsx’)
3. 储存数据
# ⽅式⼀:数据可以直接分配到单元格中 (可以输⼊公式)
ws[‘A1’] =  42
# ⽅式⼆:可以附加⾏,从第⼀列开始附加 (从最下⽅空⽩处,最左开始)(可以输⼊多⾏)
ws.append([1, 2,  3])
# ⽅式三:Python   类型会被⾃动转换
ws[‘A3’] =  datetime.datetime.now().strftime(“%Y-%m-%d”)
4. 创建表(sheet)
# ⽅式⼀:插⼊到最后(default)
>>> ws1  = wb.create_sheet(“Mysheet”)
#  ⽅式⼆:插⼊到最开始的位置
>>> ws2  = wb.create_sheet(“Mysheet”,  0)
5. 选择表(sheet)
# sheet 名称可以作为  key  进⾏索引
>>> ws3  = wb[“New  Title”]
>>> ws4  = wb.get_sheet_by_name(“New  Title”)
>>> ws  is ws3 is   ws4
True
6. 查看表名(sheet)
#  显⽰所有表名
>>>  print(wb.sheetnames)
[‘Sheet2’, ‘New Title’,   ‘Sheet1’]
#  遍历所有表
>>> for  sheet in  wb:

print(sheet.title)
7. 访问单元格(call)
①  单⼀单元格访问
#  ⽅法⼀
>>> c  = ws[‘A4’]
# ⽅法⼆:row ⾏;column  列
>>> d  = ws.cell(row=4,  column=2, value=10)
#  ⽅法三:只要访问就创建
>>> for  i in  range(1,101):


for j in  range(1,101):
ws.cell(row=i,  column=j)
②  多单元格访问

 
#  通过切⽚
>>> cell_range  = ws[‘A1′:’C2’]
# 通过⾏(列)
>>> colC  = ws[‘C’]
>>> col_range  = ws[‘C:D’]
>>> row10  = ws[10]
>>> row_range  = ws[5:10]
# 通过指定范围(⾏ → ⾏)
>>> for  row in  ws.iter_rows(min_row=1,  max_col=3, max_row=2):


for cell in   row:
print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.B1>
<Cell Sheet1.C1>
<Cell Sheet1.A2>
<Cell Sheet1.B2>
<Cell Sheet1.C2>
# 通过指定范围(列 → 列)
>>> for  row in  ws.iter_rows(min_row=1,  max_col=3, max_row=2):


for cell in   row:
print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.B1>
<Cell Sheet1.C1>
<Cell Sheet1.A2>
<Cell Sheet1.B2>
<Cell Sheet1.C2>
# 遍历所有 ⽅法⼀
>>> ws  = wb.active
>>> ws[‘C9’]  = ‘hello world’
>>> tuple(ws.rows)
((<Cell Sheet.A1>,  <Cell Sheet.B1>,  <Cell Sheet.C1>),
(<Cell Sheet.A2>,  <Cell Sheet.B2>,  <Cell Sheet.C2>),

(<Cell Sheet.A8>,  <Cell Sheet.B8>,  <Cell Sheet.C8>),
(<Cell Sheet.A9>,  <Cell Sheet.B9>,  <Cell Sheet.C9>))
# 遍历所有 ⽅法⼆
>>> tuple(ws.columns)
((<Cell Sheet.A1>,
<Cell Sheet.A2>,
<Cell Sheet.A3>,

<Cell Sheet.B7>,
<Cell Sheet.B8>,
<Cell Sheet.B9>),
(<Cell Sheet.C1>,

<Cell Sheet.C8>,
<Cell Sheet.C9>))
8. 保存数据
>>> wb.save(‘⽂件名称.xlsx’)
9. 其他
① 改变 sheet 标签按钮颜⾊
ws.sheet_properties.tabColor  =  “1072BA”
②  获取最⼤⾏,最⼤列
#  获得最⼤列和最⼤⾏
print(sheet.max_row)
print(sheet.max_column)
③  获取每⼀⾏,每⼀列
sheet.rows为⽣成器, ⾥⾯是每⼀⾏的数据,每⼀⾏⼜由⼀个tuple包裹。
sheet.columns类似,不过⾥⾯是每个tuple是每⼀列的单元格。
# 因为按⾏,所以返回A1,  B1, C1这样的顺序
for row in  sheet.rows:
for cell in   row:
print(cell.value)
# A1, A2,  A3这样的顺序
for column in   sheet.columns:
for cell in   column:
print(cell.value)

 
④  根据数字得到字母,根据字母得到数字
from openpyxl.utils  import get_column_letter,  column_index_from_string
#  根据列的数字返回字母
print(get_column_letter(2))  # B
#  根据字母返回列的数字
print(column_index_from_string(‘D’))  # 4
⑤  删除⼯作表
#  ⽅式⼀
wb.remove(sheet)
#  ⽅式⼆
del  wb[sheet]
⑥ 矩阵置换(⾏ →  列)
rows = [
[‘Number’, ‘data1’, ‘data2’],
[2, 40, 30],
[3, 40, 25],
[4, 50, 30],
[5, 30, 10],
[6, 25, 5],
[7, 50, 10]]
list(zip(*rows))
# out
[(‘Number’, 2, 3,  4, 5, 6, 7),
(‘data1’, 40, 40,  50, 30, 25, 50),
(‘data2’, 30, 25,  30, 10, 5, 10)]
# 注意 ⽅法会舍弃缺少数据的列(⾏)
rows = [
[‘Number’, ‘data1’, ‘data2’],
[2, 40
],
#  这⾥少⼀个数据
[3, 40, 25],
[4, 50, 30],
[5, 30, 10],
[6, 25, 5],
[7, 50, 10],
]
# out
[(‘Number’, 2, 3,  4, 5, 6, 7),  (‘data1’, 40, 40, 50,  30, 25, 50)]
10. 设置单元格风格
①  需要导⼊的类
from openpyxl.styles  import  Font, colors,  Alignment
②  字体
下⾯的代码指定了等线24号,加粗斜体,字体颜⾊红⾊。直接使⽤cell的font属性,将Font对象赋值给它。
bold_itatic_24_font  = Font(name=’等线’, size=24,  italic=True,  color=colors.RED,  bold=True)
sheet[‘A1’].font  = bold_itatic_24_font
③  对齐⽅式
也是直接使⽤cell的属性aligment,这⾥指定垂直居中和⽔平居中。除了center,还可以使⽤right、left等等参数
# 设置B1中的数据垂直居中和⽔平居中
sheet[‘B1′].alignment  = Alignment(horizontal=’center’,  vertical=’center’)
④  设置⾏⾼和列宽
# 第2⾏⾏⾼
sheet.row_dimensions[2].height  = 40
# C列列宽
sheet.column_dimensions[‘C’].width  = 30
⑤  合并和拆分单元格

 
所谓合并单元格,即以合并区域的左上⾓的那个单元格为基准,覆盖其他单元格使之称为⼀个⼤的单元格。
相反,拆分单元格后将这个⼤单元格的值返回到原来的左上⾓位置。
# 合并单元格, 往左上⾓写⼊数据即可
sheet.merge_cells(‘B1:G1’)  #  合并⼀⾏中的⼏个单元格
sheet.merge_cells(‘A1:C3’) #   合并⼀个矩形区域中的单元格
合并后只可以往左上⾓写⼊数据,也就是区间中:左边的坐标。
如果这些要合并的单元格都有数据,只会保留左上⾓的数据,其他则丢弃。换句话说若合并前不是在左上⾓写⼊数据,合并后单元格
中不会有数据。
以下是拆分单元格的代码。拆分后,值回到A1位置
sheet.unmerge_cells(‘A1:C3’)
最后举个例⼦
import  datetime
from random import   choice
from time  import  time
from openpyxl  import  load_workbook
from openpyxl.utils  import  get_column_letter
# 设置⽂件  mingc
addr =  “openpyxl.xlsx”
#  打开⽂件
wb = load_workbook(addr)
#  创建⼀张新表
ws = wb.create_sheet()
#  第⼀⾏输⼊
ws.append([‘TIME’, ‘TITLE’,  ‘A-Z’])
# 输⼊内容(500⾏数据)
for i in  range(500):
TIME =  datetime.datetime.now().strftime(“%H:%M:%S”)
TITLE =  str(time())
A_Z = get_column_letter(choice(range(1,  50)))
ws.append([TIME,  TITLE, A_Z])
#  获取最⼤⾏
row_max = ws.max_row
#  获取最⼤列
con_max =  ws.max_column
#  把上⾯写⼊内容打印在控制台
for j in ws.rows:     # we.rows   获取每⼀⾏数据
for n in  j:
print(n.value, end=”\t”)    # n.value   获取单元格的值
print()
# 保存,save(必须要写⽂件名(绝对地址)默认  py 同级⽬录下,只⽀持  xlsx   格式)
wb.save(addr)

打赏

本文固定链接: https://www.cxy163.net/archives/1882 | 绝缘体

该日志由 绝缘体.. 于 2022年05月27日 发表在 首页 分类下,
原创文章转载请注明: python之openpyxl模块 | 绝缘体

报歉!评论已关闭.