1.找出用户行为偏好.xlsx中 Sheet3 表中空着的格子,并输出这些格子的坐标。
import os
print(f'当前工作目录为:{os.getcwd()} \n')
import warnings
warnings.filterwarnings('ignore')
path = './OpenPyXL_test/'
from openpyxl import load_workbook
exl = load_workbook(path+'用户行为偏好.xlsx')
print(f'excel文件中的表包括:{exl.sheetnames}\n')
sheet3 = exl['Sheet3']
print(f'Sheet3内容大小:{sheet3.dimensions}\n')
cells = sheet3[sheet3.dimensions]
for rows in cells:
for cell in rows:
if not cell.value:
print(f'{cell.coordinate} is None \n')
2.Excel 在原有工作簿中修改数据并保存。
(1)修改并保存数据
from openpyxl import load_workbook
exl = load_workbook(filename=path+'用户行为偏好.xlsx')
sheet = exl.get_sheet_by_name("Sheet3")
print(f"修改前 sheet['A1']:{sheet['A1'].value}")
sheet['A1'].value = 'hello world'
print(f"修改后 sheet['A1']:{sheet['A1'].value}")
exl.save(filename=path+'用户行为偏好_changed.xlsx')
(2)验证是否修改成功
exl_ = load_workbook(filename=path+'用户行为偏好_changed.xlsx')
a1 = exl_['Sheet3']['A1'].value
if a1 == 'hello world':
print(f"修改成功!\n exl_['Sheet3']['A1'].value={a1}")
else:
print(f"修改失败!\n exl_['Sheet3']['A1'].value={a1}")
3.创建新的表格写入数据并保存
# 1、导入 openpyxl 中的 Workbook 类
from openpyxl import Workbook
# 2、初始化一个 Workbook 对象
wb = Workbook()
print(f'默认sheet:{wb.sheetnames}')
# 3、通过 Workbook 对象的 create_sheet 函数创建一个 sheet
# title sheet 名称
# index sheet 位置,默认从0开始
sheet = wb.create_sheet(title='mysheet',index=0)
print(f'添加后sheet:{wb.sheetnames}')
# 4、在新建的 sheet 中写入数据
# 比如在 A1 单元格中写入‘test’
sheet['A1'].value='test'
print(f"sheet['A1'].value = {sheet['A1'].value}")
# 5、保存
wb.save(path+'create_sheet_test.xlsx')
4.将公式写入单元格保存
from openpyxl import load_workbook
exl_1 = load_workbook(filename=path+'用户行为偏好_changed.xlsx')
sheet = exl_1['订单时长分布']
print(f'订单时长分布值范围:{sheet.dimensions}\n')
sheet['A15'].value = '合计'
sheet['D15'] = '=SUM(D2:D14)'
exl_1.save(filename='用户行为偏好_changed.xlsx')
import xlwings as xw
app = xw.App(visible=False,add_book=False)
wb = app.books.open('用户行为偏好_changed.xlsx')
wb.save()
wb.close()
app.quit()
exl_2 = load_workbook(filename='用户行为偏好_changed.xlsx',data_only=True)
sheet = exl_2['订单时长分布']
print(f"sheet['A15']={sheet['A15'].value},sheet['D15']={sheet['D15'].value}")
print(f"{sheet['D1'].value}求和值为SUM(D2:D14)={sheet['D15'].value}")
注:即使设置了 data_only=True,也不能立即获取到刚刚添加的公式计算后的结果,需要自己 手动/添加代码 打开下 对应excel表格,然后 ctrl s保存下,再运行上面代码才能获取到对应公式计算后的值。
你可以使用下面代码自动打开指定 excel 文件然后保存使写入的公式生效,使用前你需要安装 xlwings,输入pip3 install xlwings即可,再后面我们也会学习这个模块。
5.插入空列/行
sheet = exl_1['Sheet3']
sheet.insert_cols(idx=2)
sheet.insert_rows(idx=2)
exl_1.save(filename=path+'用户行为偏好_changed.xlsx')
6.删除和移动列和行
(1)删除
sheet.delete_cols(idx=5,amount=2)
sheet.delete_rows(idx=2,amount=5)
exl_1.save(filename=path+'用户行为偏好_changed.xlsx')
(2)移动
sheet.move_range('B3:E16',rows=1,cols=-1)
exl_1.save(filename=path+'用户行为偏好_changed.xlsx')
7.Excel样式
(1)设置单个cell(单元格)字体样式
Font(name字体名称,size大小,bold粗体,italic斜体,color颜色) 。
from openpyxl import load_workbook
from openpyxl.styles import Font
exl_1 = load_workbook(filename=root_path+'用户行为偏好_1.xlsx')
sheet = exl_1['订单时长分布']
cell = sheet['A1']
cell.font
font = Font(name='黑体', size=20, bold=True, italic=True, color='FF0000')
cell.font = font
exl_1.save(filename=root_path+'用户行为偏好_1.xlsx')
(2)设置多个cell(单元格)字体样式
cells = sheet[2]
font = Font(name='黑体', size=10, bold=True, italic=True, color='FF0000')
for cell in cells:
cell.font = font
exl_1.save(filename=root_path+'用户行为偏好_1.xlsx')
8.设置边框样式
(1)设置单元格边框样式
Side :边线样式设置类,边线颜色等
Side(style=None, color=None, border_style=None)
- style:边线的样式,有以下值可选:double, mediumDashDotDot, slantDashDot, dashDotDot, dotted, hair, mediumDashed, dashed, dashDot, thin, mediumDashDot, medium, thick
- color:边线颜色
- border_style:style 的别名,必须设置,一般直接设置 border_style 就行,不用设置 style
Border :边框定位类,左右上下边线
Border常用参数解释:
- top bottom left right diagonal:上下左右和对角线的边线样式,为 Side 对象
- diagonalDown:对角线从左上角向右下角方向,默认为 False
- diagonalUp:对角线从右上角向左下角方向,默认为 False
from openpyxl.styles import Side, Border
side = Side(border_style='double', color='FF000000')
border = Border(left=side, right=side, top=side, bottom=side, diagonal=side, diagonalDown=True, diagonalUp=True)
cells = sheet[1]
cells[0].border
for cell in cells:
cell.border = border
exl_1.save(filename=root_path+'用户行为偏好_1.xlsx')
9.设置单元格其他样式
(1) 设置单元格背景色
from openpyxl.styles import PatternFill, GradientFill
pattern_fill = PatternFill(fill_type='solid',fgColor="DDDDDD")
gradient_fill = GradientFill(stop=('FFFFFF', '99ccff','000000'))
cells = sheet[3]
for cell in cells:
cell.fill = pattern_fill
cells = sheet[4]
for cell in cells:
cell.fill = gradient_fill
exl_1.save(filename=root_path+'用户行为偏好_1.xlsx')
(2)设置水平居中
openpyxl.styles 中的 Alignment 类常用参数介绍:
- horizontal:水平对齐,常见值
distributed, justify, center, left, fill, centerContinuous, right, general - vertical:垂直对齐,常见值
bottom, distributed, justify, center, top - textRotation:文字旋转角度,数值:0-180
- wrapText:是否自动换行,bool值,默认 False
from openpyxl.styles import Alignment
alignment = Alignment(horizontal='center', vertical='center')
cells = sheet[5]
for cell in cells:
cell.alignment = alignment
exl_1.save(filename=root_path+'用户行为偏好_1.xlsx')
(3)设置行高与列高
sheet.row_dimensions[1].height = 30
sheet.column_dimensions['C'].width = 24
exl_1.save(filename=root_path+'用户行为偏好_1.xlsx')
10.合并、取消合并单元格
|