【python操作excel数据有效性(含excel的基本操作)】学习笔记
Excel的数据有效性功能,可以对输⼊单元格的数据进⾏内容上的限制。当我们利⽤ excel ⽣成代码时,可以通过此类⽅式规范输⼊。以下是:
excel的基本操作
⽣成xlsx
wb = Workbook()
wb.save(xls_path)
加载excel⽂件
# 加载excel⽂件(data_only=True 代表以数据形式⽽⾮公式)
wb = load_workbook(xls_path, data_only=True)
新建 sheet页
wb = load_workbook(xls_path, data_only=True)
删除 sheet页
wb = load_workbook(xls_path, data_only=True)
加载 sheet页
wb = load_workbook(xls_path, data_only=True)
xxx_sheet = wb[sheet_name]
设置列宽
wb = load_workbook(xls_path, data_only=True)
xxx_sheet = wb[sheet_name]
lumn_dimensions["A"].width =20
加载 单元格
wb = load_workbook(xls_path, data_only=True)
xxx_sheet = wb[sheet_name]
cell = ll(row=1, column=1)# 1⾏1列
设置单元格格式
wb = load_workbook(xls_path, data_only=True)
python怎么读取excel的数据xxx_sheet = wb[sheet_name]
cell = ll(row=1, column=1)# 1⾏1列
from openpyxl.styles import Font
font = Font(b=True, color="FF0000")# 红⾊字体
cell.font = font
单元格赋值
wb = load_workbook(xls_path, data_only=True)
xxx_sheet = wb[sheet_name]
cell = ll(row=1, column=1)# 1⾏1列
cell.value ='YourName666'
获取 sheet页 最⼤列数、⾏数
wb = load_workbook(xls_path, data_only=True)
xxx_sheet = wb[sheet_name]
# 最⼤列数
print(xxx_sheet.max_column)
# 最⼤⾏数
print(xxx_sheet.max_row)
保存
wb = load_workbook(xls_path, data_only=True)
wb.save(xls_path)
excel数据有效性
wb = load_workbook(xls_path, data_only=True)
xxx_sheet= wb[sheet_name]
# 清空原有有效性校验规则
xxx_sheet.data_validations.dataValidation =[]
# 建⽴有效性(以"序列"的形式)
dv = DataValidation(type="list", formula1=f'={sheet_name}!$A$1', allow_blank=True) # 设置⾃定义提⽰消息
dv.promptTitle ="XXX"
dv.prompt ="XXX"
# 设置⾃定义错误消息
< ="XXX"
dv.add(ll(1,1))
xxx_sheet.add_data_validation(dv)
完整代码
# -*-coding: utf-8 -*-
import os
from time import sleep
from openpyxl import load_workbook, Workbook
from openpyxl.worksheet.datavalidation import DataValidation
class Data_Validation:
def__init__(self, xls_path:str='demo.xlsx'):
# 判断⽂件是否存在,若不存在,则⽣成该⽂件
if ists(xls_path)is False:
print(f"<{xls_path}> not exist, creat <{xls_path}>...")
wb = Workbook()
wb.save(xls_path)
# 加载excel⽂件(data_only=True 代表以数据形式⽽⾮公式)
self.wb = load_workbook(xls_path, data_only=True)
self.sheet_init()
def sheet_init(self):
"""
初始化 sheet页,即删除不必要的 sheet 页,新建所需的 sheet 页,并附上测试数据
初始化 sheet页,即删除不必要的 sheet 页,新建所需的 sheet 页,并附上测试数据 :return:
"""
sheet_need =['DEMO','base']
for sheet_name in self.wb.sheetnames:
if sheet_name not in sheet_need:
ve(self.wb[sheet_name])
print(f"<{sheet_name}> deleted")
for sheet_name in sheet_need:
if sheet_name not in self.wb.sheetnames:
ate_sheet(title=sheet_name)
print(f"<{sheet_name}> added")
# 加载 sheet页
base_sheet = self.wb['base']
# 设置列宽
lumn_dimensions["A"].width =20
# 加载单元格
cell = ll(row=1, column=1)
# 设置单元格格式
from openpyxl.styles import Font
font = Font(b=True, color="FF0000")# 红⾊字体
cell.font = font
# 单元格赋值
cell.value ='YourName666'
# # 最⼤列数
# print(base_sheet.max_column)
# # 最⼤⾏数
# print(base_sheet.max_row)
self.wb.save('demo.xlsx')
def load_validation(self, sheet_name:str='DEMO'):
DEMO_sheet = self.wb[sheet_name]
# 设置列宽
lumn_dimensions["A"].width =20
# 清空原有有效性校验规则
DEMO_sheet.data_validations.dataValidation =[]
# 建⽴有效性(以"序列"的形式)
dv = DataValidation(type="list", formula1=f'=base!$A$1', allow_blank=True) # 设置⾃定义提⽰消息
dv.promptTitle ="SELECT DATA"
dv.prompt ="Select data from <base>"
# 设置⾃定义错误消息
< ="Select data from <base>"
dv.add(ll(1,1))
DEMO_sheet.add_data_validation(dv)
print(f"<{sheet_name}> add data validation")
self.wb.save('demo.xlsx')
if __name__ =='__main__':
ins = Data_Validation()
ins.load_validation()
sleep(3)
运⾏结果(当前路径不存在 demo.xlsx 的情况下)
代码运⾏提⽰:
<demo.xlsx> not exist, creat <demo.xlsx>...
<Sheet> deleted
<DEMO> added
<base> added
<DEMO> add data validation
运⾏前⽬录⽂件结构
project
│ excel.py
运⾏后⽬录⽂件结构
project
│ demo.xlsx
│ excel.py
⽣产的 demo.xlsx ⽂件
⽂件下有两个 sheet页,分别为 DEMO,base
base内容如下
DEMO内容如下
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论