Openpyxl 总结(续)

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)

例子二

from openpyxl import Workbook
from openpyxl.styles import Font, Alignment
wb = Workbook() # Create a workbook
 
 
# 需要获得特定的sheet,需要使用的方法是:
ws3 = wb['Sheet2']#通过list传入名字的方式 或者以下方法
# wb.get_sheet_by_name(title:str)#title为想要获取的sheet_name
print('----------------插入表操作--------------------')
ws1 = wb.create_sheet('第一个sheet表',index=0) # 插入新的工作表,放在0位置
ws2 = wb.create_sheet('最后一个工作表')# 默认插在最后
 
print('----------------查看表操作--------------------')
ws = wb.active #获得这个book的第一个sheet表名
print(ws)
print(wb.worksheets) # 打印这个book里面的所有工作表
print(wb.worksheets[1]) # 打印这个book里面的第二个工作表
print(wb.sheetnames) # 查看所有的sheet表,结果是列表形式,也可以用遍历:
for sheet in wb:
    print(sheet.title) # 相当于遍历上面wb.sheetnames的列表
 
print('----------------修改表操作--------------------')
ws.title = '修改第一个表名' # 因为 ws = wb.active获取的是第一个表名,所以修改的就是第一个
wb.worksheets[1].title = '修改索引为1的表名'
wb['最后一个工作表'].title = '修改名为最后一个工作表的表名' # 修改名为‘最后一个工作表’的表名字
 
print('----------------单元格、字体格式操作--------------------')
d = ws.cell(row=1, column=1)
d.font = Font(name='微软雅黑', size=14, bold=True) # bold=True加粗
# 第一行第一列单元格内容水平居中和垂直居中
d.alignment = Alignment(horizontal='center', vertical='center')
# 设置行高
ws.row_dimensions[1].height = 20
# 设置A列宽度,这样只能设置一列宽度
# ws.column_dimensions['A'].width = 10
# 字典遍历一起设置列宽
dic = {'A': '22', 'B': '13', 'C': '60', 'D': '27'} # 如果表头数据增减,这里面也要相应修改
for i, j in dic.items():
	ws.column_dimensions[i].width = j # 列宽
# 冻结首行
ws.freeze_panes = 'A2'
# 设置第一行第七列单元格格式为日期格式
ws.cell(row=1, column=7).number_format = 'yyyy/mm/dd'
 
print('----------------copy表操作--------------------')
copy_sheet = wb.copy_worksheet(wb.active) # copy第一个表
copy_sheet2 = wb.copy_worksheet(wb.worksheets[1]) # copy索引1位置的表
copy_sheet3 = wb.copy_worksheet(wb['最后一个工作表']) # copy名为‘最后一个工作表’的表
 
print('----------------单元格内容操作--------------------')
A4 = ws['A4'] # 因为 ws = wb.active获取的是第一个表名,所以直接访问第一个表的A4单元格,返回A4单元格,或者是创建一个原本不存在的单元格
A4 = 'A4内容'# 对A4单元格内容修改
d = ws.cell(row = 4,column=2,value = 10) #修改4行2列(也就是B4)的值为10
data=['姓名','杰克','里斯','安妮']
for i in range(len(data)):
    ws['A%d'%(i+1)]=data[i]    # 写入第一个工作表A列数据
 
for j in range(len(data)):
    wb.worksheets[1]['A%d'%(i+1)] = data[i] # 写入索引为1的工作表的A列数据
 
print('----------------删除表操作--------------------')
wb.remove(wb.worksheets[0]) # 删除索引为0的sheet表
wb.remove(wb['最后一个工作表']) # 删除名为‘最后一个工作表’的表
 
print('----------------保存工作簿操作--------------------')
wb.save('测试.xlsx') # 只有保存后里面修改的内容才可以找到
# 保存完文件后,可以通过如下方法查找文件路径
import os
print(os.path.abspath('测试.xlsx')) #查找打印某个文件的路径
 
ws_rows_len =  ws.max_row      # 最大行数
ws_columns_len = ws.max_column   # 最大列数

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值