首页 > 其他分享 >Openpyxl操作Excel

Openpyxl操作Excel

时间:2023-12-29 15:45:06浏览次数:22  
标签:wb openpyxl excel Excel ws DataValidation 操作 path Openpyxl

Openpyxl操作Excel

1.锁定列

'''
锁定列的整体逻辑:
	1.首先对整张表进行锁定并设置密码
	2.对指定的不需要锁定的列,每一个单元格进行解锁
'''
# 模块导入
import openpyxl
from openpyxl.styles import Protection

excel_path = r"C:\1.xlsx"
# 1.打开表,读取Sheet
wb = openpyxl.load_workbook(excel_path)
ws = wb.active				# 默认读取第一个Sheet
# ws = wb['Sheet4']			# 读取指定Sheet

# 2.锁定整张表
ws.protection.set_password('123')		# 锁定整张表并设置密码,可以不写这一行
ws.protection.enable()

# 3.对指定列进行解锁
rows = ws.max_row			# 计算总行数
for e_row in range(1,rows+1):
    ws[f"A{str(e_row)}"].protection = Protection(locked=False)
    ws[f"B{str(e_row)}"].protection = Protection(locked=False)
   

# 4.文件保存
wb.save(filename=excel_path)

2.数据有效性

2.1 需求1:整数范围

import openpyxl
from openpyxl.worksheet.datavalidation import DataValidation

excel_path = r"C:\text.xlsx"

# 打开文件并读取
wb = openpyxl.load_workbook(excel_path)
ws = wb['Sheet1']

'''
对B列设置有效性规则,只能输入1-10之间的整数
'''
dv = DataValidation(type='whole',
                            # operator='greaterThanOrEqual',
                            operator='between',
                            formula1=1,
                    		formula2=10,
                            errorTitle='错误',
                            error='必须是1-10之间的整数')
rows = ws.max_row
dv.add(f"B1:B{str(str(rows))}")
ws.add_data_validation(dv)

wb.save(excel_path)

2.2 需求2:选择下拉框

import openpyxl
from openpyxl.worksheet.datavalidation import DataValidation

excel_path = r""

wb = openpyxl.Workbook()		# 不设置Excel路径,默认为新建
ws = wb.active

# 选择列表
dv = DataValidation(type="list",
                                formula1='"a,b,c"',
                                sqref=('A1:A10'),
                                promptTitle='提醒',
                                prompt='请输入a,b,c中的一个')
ws.data_validations.append(dv)
wb.save(excel_path)

3.读表-读取问题

import openpyxl

# 读表:如有公式,读取结果为公式
wb = openpyxl.load_workbook(excel_path)
ws = wb.active				# 默认读取第一个Sheet
# ws = wb['Sheet2']			# 读取指定Sheet
	
# 读表:所有单元格读取的均为数据,保存时也会覆盖掉公式
wb_copy = openpyxl.load_workbook(excel_path, data_only=True)
ws_copy = wb_copy.active

4.DataValidation参数解读

·参数:【type】
	源码
        type = NoneSet(values=("whole", "decimal", "list", "date", "time",
                           "textLength", "custom"))
    解析:
    	【whole】:整数
        【decimal】:小数
        【list】:序列,类似于下拉框,选择指定元素
        【date】:日期
        【time】:时间
        【textLength】:文本长度
        【custom】:自定义
        
·参数:【operator】
	源码
    	operator = NoneSet(values=("between", "notBetween", "equal", "notEqual","lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual"))
    解析:
    	【between】:介于
        【notBetween】:未介于
        【equal】:等于
        【notEqual】:不等于
        【lessThan】:小于
        【lessThanOrEqual】:小于或等于
        【greaterThan】:大于
        【greaterThanOrEqual】:大于或等于

·参数:【errorStyle】
	源码
    	errorStyle = NoneSet(values=("stop", "warning", "information"))
	解析:
    	【stop】:停止
        【warning】:警告
        【information】:信息
        
        
·参数:【sqref】    
	最后一个参数sqref,是填写要设置数据验证的区域
    

import openpyxl
from openpyxl.worksheet.datavalidation import DataValidation

excel_path = r""

wb = openpyxl.Workbook()
ws = wb.active

# 选择列表
dv = DataValidation(type="list",
                                formula1='"a,b,c"',
                                sqref=('A1:A10'),
                                promptTitle='提醒',
                                prompt='请输入a,b,c中的一个')

# 只能填入1-10之间的整数
dv2 = DataValidation(type="whole",
                                  formula1=1,
                                  formula2=10,
                                  sqref=('B1:B10'),
                                  errorTitle='错误',
                                  error='输入的必须在1-10之间的整数')

ws.data_validations.append(dv)

ws.data_validations.append(dv2)

'''
# 设定单元格有效性并生效的第二种方式
# 不使用参数sqref指定单元格时,使用以下方式是同样的效果
dv2 = DataValidation(type='whole',
                            operator='greaterThan',
                            formula1=0,
                            errorTitle='错误',
                            error='必须是正整数')
dv2.add(f"AI{str(e_row)}")
ws.add_data_validation(dv2)
'''


wb.save(excel_path)
        

5.单元格规则生效的两种方式

'''
1.使用DataValidation方法中的参数sqref指定
2.add_data_validation方法实现
'''

import openpyxl
from openpyxl.worksheet.datavalidation import DataValidation

excel_path = r""

wb = openpyxl.Workbook()
ws = wb.active

# 选择列表
dv = DataValidation(type="list",
                                formula1='"a,b,c"',
                                sqref=('A1:A10'),
                                promptTitle='提醒',
                                prompt='请输入a,b,c中的一个')

# 只能填入1-10之间的整数
dv2 = DataValidation(type="whole",
                                  formula1=1,
                                  formula2=10,
                                  sqref=('B1:B10'),
                                  errorTitle='错误',
                                  error='输入的必须在1-10之间的整数')

ws.data_validations.append(dv)

ws.data_validations.append(dv2)

'''
# 设定单元格有效性并生效的第二种方式
# 不使用参数sqref指定单元格时,使用以下方式是同样的效果
dv2 = DataValidation(type='whole',
                            operator='greaterThan',
                            formula1=0,
                            errorTitle='错误',
                            error='必须是正整数')
dv2.add(f"AI{str(e_row)}")
ws.add_data_validation(dv2)
'''


wb.save(excel_path)

标签:wb,openpyxl,excel,Excel,ws,DataValidation,操作,path,Openpyxl
From: https://www.cnblogs.com/xukaik/p/17935010.html

相关文章

  • k8s常用命令操作
    获取所有节点的污点信息kubectlgetnodes-o='custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[*].key,TaintValue:.spec.taints[*].value,TaintEffect:.spec.taints[*].effect'获取集群内的所有域名kubectlgetingress-A-o=custom-columns=Host:.spec.rul......
  • [python] 基于Dataset库操作数据库
    dataset库是Python中一个用于操作数据库的简单库,它提供了一种简洁的方式与各种关系型数据库进行交互,例如SQLite、MySQL、PostgreSQL等。你可以使用dataset库来执行查询、插入、更新和删除操作,而无需编写复杂的SQL语句。dataset库适用于小规模的数据存储和查询场景,相比csv和json文......
  • esxi主机,自动创建30个vm,并自动完成vm初始化操作
    1[root@jump-servershell]#catfor.sh2#!/bin/bash34ESXIPASSWD=******5HOSTPASSWD=******67foriin`seq101130`8do9N=$i10echo-e"\n=================虚拟机Jump-Node$N开始制作================"1......
  • Linux操作系统中软件安装:用RPM包管理器安装软件步骤
    安装软件的一般步骤如下:1.打开终端,作为root用户或使用sudo命令获取管理员权限。2.使用RPM命令进行软件包的安装。例如,使用“rpm-ivh软件包名称.rpm”命令来安装软件包,其中“-i”表示安装,“-v”表示显示详细安装信息,“-h”表示以适当的哈希标记显示安装进度。常用命令如下:除了RP......
  • Mac—Scrcpy在Macbook上实现同屏/多屏协同操作安卓手机界面(支持 Win、Mac、Linux)
    1、效果展示:就在那么一瞬间,就成功弹出了手机界面,真的是激动又兴奋,真的很有成就感耶~而且,不单单是投屏,是协同投屏/同屏,电脑端也可以操控手机啦~ 2、背景介绍投屏功能已经满足不了现有需求了,投屏,只是把手机界面投屏到电脑上,但是,不能在电脑端操作手机界面。而且,隔壁华为的手机+......
  • c++教程2操作符
    2操作符算数运算赋值比较逻辑运算条件检查size优先级数据类型转换2.1算数运算arithmetic.cpp#include<iostream>usingnamespacestd;intmain(){inta=8,b=4;cout<<"Additionresult:"<<(a+b)<<endl;cout<<"Subt......
  • 操作系统
    操作系统的概念、功能操作系统的特征并发共享虚拟异步并发和共享为两个最基本的特征,两者互为存在条件。......
  • 文件批量重命名之在线版本-前端的本地文件操作
    批量文件重命名是一个低频但时不时又会遇到的需求,非常适合在线工具的形式,即用即走。搜索了一圈,没有发现可以直接实现这个功能的网站,不过找到了相关的APIFileSystemFileHandle.move()forlocalfiles-ChromePlatformStatusChrome于111版本(2023年3月)添加了move这个A......
  • 【数据结构】C语言实现单链表的基本操作
    单链表基本操作的实现导言大家好,很高兴又和大家见面啦!!!在上一篇中,我们详细介绍了单链表的两种创建方式——头插法与尾插法,相信大家现在对这两种方式都已经掌握了。今天咱们将继续介绍单链表的基本操作——查找、插入与删除。在开始今天的内容之前,我们先通过尾插法创建一个单链表,如......
  • 表单导出excel 的解决方案
    场景:当只有底图和数据的的时候,底图是一个背景图,次背景图上会有空白的区域,留下来的空白区域是用来展示回显的数据的,一下情形需要导出excel文档纯前端方案一:1.先用一个数组将此底图上的数据收集起来,组成一个数组,同时设置key和value ,当然key就是收集来的数据,value就是......