Openpyxl笔记
文章目录
- 介绍
- 工作薄操作
- 创建工作薄对象
- 打开工作薄
- 工作薄属性
- 工作薄方法
- 遍历工作薄中的工作表
- 工作表操作
- 创建工作表
- 指定工作表
- 删除工作表
- 复制工作表
- 获取工作表的总行数和总列数
- 工作表的Table
- 创建Table
- 删除Table
- 工作表属性
- 工作表方法
- 获取工作表中的所有值
- 按行遍历工作表中的单元格
- 按列遍历工作表中的单元格
- 常用方法
- 工作表插入空行或空列
- 工作表增加一行数据
- 单元格操作
- 单元格的表示
- 单元格方法
- 查看单元格的值
- 遍历单元格
- 单元格的移动范围
- 设置超链接
- 设置百分比格式
- 合并/取消合并单元格
- 装饰部分
- 行高和列宽
- 使用数字格式
- 使用公式
- 条件格式
- 实例
- 新建1-12月工作表
- 除了9月份的工作表以外都删除
介绍
- 官方文档
- 安装
- 安装openpyxl
pip3 install openpyxl
- 如果需要插入图片,还需要安装pillow库
pip3 install pillow
- 安装openpyxl
工作薄操作
创建工作薄对象
- 语法
from openpyxl import Workbookwb = Workbook() dest_filename = 'empty_book.xlsx' ws1 = wb.active ws1.title = "range names" ws1['F5'] = 3.14 print(ws1['F5'].value) wb.save(filename = dest_filename)
打开工作薄
- 语法
import openpyxl file1 = r'd:\\文件名称.xlsx' wb = openpyxl.load_workbook(file1) print(wb.sheetnames)
- 选项
选项 说明 read_only=True 只读模式,节省内存,必须使用close()关闭 write_only = True 只写模式,
工作薄属性
- 常用属性
属性 说明 active 获取当前活跃的Worksheet worksheets 以列表的形式返回所有的Worksheet(表格) data_only 默认为False,为True时只读取数据不显示公式 read_only 判断是否以read_only模式打开Excel文档 encoding 获取文档的字符集编码 properties 获取文档的元数据,如标题,创建者,创建日期等 sheetnames 获取工作簿中的表(列表)
工作薄方法
- 常用方法
方法 说明 工作簿.sheetnames 获取所有表格的名称 工作簿[‘工作表名’] 通过表格名称获取Worksheet对象 工作簿.active 获取活跃的表格 remove 删除一个工作表对象【对象】 create_sheet 创建一个空的表格【表名】 copy_worksheet 在Workbook内拷贝表格【对象】
遍历工作薄中的工作表
- 遍历工作表
import openpyxl file1 = r'd:\\文件名称.xlsx' wb = openpyxl.load_workbook(file1) for sheet in wb:print(sheet.title)
工作表操作
创建工作表
- 新建指定工作表
import openpyxl file1 = r'd:\\文件名称.xlsx' wb = openpyxl.Workbook() ws1 = wb.create_sheet("Mysheet_1") # 在末尾插入工作表(默认值) ws2 = wb.create_sheet("Mysheet_2", 0) # 在最前插入工作表 ws3 = wb.create_sheet("Mysheet_3", -1) #在倒数第二位插入 ws3.sheet_properties.tabColor = "1072BA" # 设置工作表背景 wb.save(filename = file1)
指定工作表
- 指定第几个工作表
ws = wb.worksheets[0]
- 指定工作表名称
ws = wb['4月']
删除工作表
- 删除指定工作表
import openpyxl file1 = '文件名称.xlsx' wb = openpyxl.load_workbook(file1) ws = wb['4月'] wb.remove(ws) wb.save(file1)
复制工作表
- 复制指定工作表
import openpyxl file1 = '文件名称.xlsx' wb = openpyxl.load_workbook(file1) ws = wb.copy_worksheet(wb['Sheet']) # 这里是工作表对象 ws.title = "新复制工作表" wb.save(file1)
获取工作表的总行数和总列数
- ws为工作表对象
rows = ws.max_rowcolumns = ws.max_column
工作表的Table
创建Table
- res为Table的范围如A1:E5;ws.dimensions表示整个工作表
- style
- name:Table样式
- showRowStripes 行间隔变色
- showColumnStripes 列间隔变色
- 创建Table
import openpyxl file1 = 'd:\\06fping_net.xlsx' wb = openpyxl.load_workbook(file1) ws = wb.active tab = openpyxl.worksheet.table.Table(displayName="Table1", ref=ws.dimensions)# Add a default style with striped rows and banded columns style = openpyxl.worksheet.table.TableStyleInfo(name="TableStyleMedium9", showFirstColumn=False,showLastColumn=False, showRowStripes=True, showColumnStripes=False) tab.tableStyleInfo = style ws.add_table(tab) wb.save(file1)
删除Table
- 代码
del ws.tables["Table1"]
工作表属性
- 常用属性
属性 说明 title 工作表的名称 dimensions 表格的大小,这里的大小是指含有数据的表格的大小,即:左上角的坐标:右下角的坐标 max_row 表格的最大行 min_row 表格的最小行 max_column 表格的最大列 min_column 表格的最小列 rows 按行获取单元格(Cell对象) - 生成器 工作表.rows columns 按列获取单元格(Cell对象) - 生成器 工作表.columns freeze_panes 冻结窗格 工作表.freeze_panes = “C3” sheet_properties.tabColor 工作表背景色如:“1072BA” values 按行获取表格的内容(数据) - 生成器 - freeze_panes
- 参数比较特别,主要用于在表格较大时冻结顶部的行或左边的行.
- 对于冻结的行,在用户滚动时,是始终可见的,可以设置为一个Cell对象或一个端元个坐标的字符串,单元格上面的行和左边的列将会冻结(单元格所在的行和列不会被冻结)。
- 例如我们要冻结第一行那么设置A2为freeze_panes
- 如果要冻结第一列,freeze_panes取值为B1
- 如果要同时冻结第一行和第一列,那么需要设置B2为freeze_panes
- freeze_panes值为none时 表示 不冻结任何列。
- freeze_panes
工作表方法
获取工作表中的所有值
- 只想要工作表中的值
- 代码
import openpyxl file1 = r'd:\\文件名称.xlsx' wb = openpyxl.load_workbook(file1) ws = wb.active for row in ws.values:for value in row:print(value)
按行遍历工作表中的单元格
- 代码
import openpyxl file1 = r'd:\\文件名称.xlsx' wb = openpyxl.load_workbook(file1) ws = wb.active # values_only=True 参数,可以仅仅获取value for row in ws.iter_rows(min_row=1, max_col=3, max_row=3,values_only=True):for cell in row:# 按行遍历单元格print(cell.value)
- 输出
A1 B1 C1 A2 B2 C2 A3 B3 C3
按列遍历工作表中的单元格
- 代码
import openpyxl file1 = r'd:\\文件名称.xlsx' wb = openpyxl.load_workbook(file1) ws = wb.active for col in ws.iter_cols(min_row=1, max_col=3, max_row=3):for cell in col:# 按列遍历单元格print(cell.value)
- 输出
A1 A2 A3 B1 B2 B3 C1 C2 C3
常用方法
- 常用方法
方法 说明 iter_rows 按行获取所有单元格,内置属性有(min_row,max_row,min_col,max_col) iter_columns 按列获取所有的单元格 append 在表格末尾添加数据 merged_cells 合并多个单元格 unmerged_cells 移除合并的单元格
工作表插入空行或空列
- 代码
con = ["序号","编号","速率(G)","接口","状态","分配","模块","接口描述"] #ws为工作表对象 ws.append(con)
工作表增加一行数据
- 使用列表
- 代码
con = ["序号","编号","速率(G)","接口","状态","分配","模块","接口描述"] #ws为工作表对象 ws.append(con)
单元格操作
单元格的表示
- 单元格的表示
表示 说明 ws[‘A1:C10’] A1:C10区域 ws[‘1:10’] 1到10行 ws[‘A:C’] A到C列
单元格方法
- 常用方法
方法 说明 row 单元格所在的行 column 单元格坐在的列 value 单元格的值 coordinate 单元格的坐标
查看单元格的值
- 查看单元格的值
import openpyxl file1 = 'd:\\文件名称.xlsx' wb = openpyxl.load_workbook(file1) ws = wb.active print(ws["B10"].value) print(ws.cell(row=1,column=3).value) print(ws.cell(1,3).value)
遍历单元格
- 遍历单元格
import openpyxl file1 = 'd:\\文件名称.xlsx' wb = openpyxl.load_workbook(file1) ws = wb.active rng = ws["A1:C10"] for row in rng: # 循环每行for cell in row: # 循环每个单元格print(cell.value)
单元格的移动范围
- 这会将范围内的单元格D4:F10向上移动一行,向右移动两列。
- 这些单元格将覆盖任何现有的单元格。
- 移动公式使用translate=True选项
- 代码
ws.move_range("D4:F10", rows=-1, cols=2)
设置超链接
- 设置超链接
import openpyxl file1 = Path('d:\\文件名称.xlsx')wb = openpyxl.Workbook() ws1 = wb.active wb.create_sheet('temp1') # 设置网址超链接 url = "http://www.baidu.com" ws1.cell(row = 1,column = 1).value = '=HYPERLINK("{}","{}")'.format(url,'百度') # 设置文件内超链接 link = f"{ file1.name }#temp1!A1" ws1.cell(row = 2,column = 2).value = '=HYPERLINK("{}","{}")'.format(link,'temp表') # 设置单元格为蓝色 ws1.cell(row = 1,column = 1).style = "Hyperlink" ws1.cell(row = 2,column = 2).style = "Hyperlink" wb.save(filename = file1)
设置百分比格式
- 设置超链接
import openpyxl file1 = 'd:\\文件名称.xlsx' wb = openpyxl.load_workbook(file1) ws = wb.active ws["A5"].number_format = openpyxl.styles.numbers.BUILTIN_FORMATS[10] ws["A5"].value = 0.02 wb.save(file1)
合并/取消合并单元格
- 取消
from openpyxl.workbook import Workbook wb = Workbook() ws = wb.active ws.merge_cells('A2:D2') ws.unmerge_cells('A2:D2') # or equivalently ws.merge_cells(start_row=2, start_column=1, end_row=4, end_column=4) ws.unmerge_cells(start_row=2, start_column=1, end_row=4, end_column=4)
装饰部分
行高和列宽
- 设置行高
工作表.row_dimensions[1].height = 200
- 设置列宽
工作表.column_dimensions['B'].width = 100
- 设置列宽,变量方式
from openpyxl.utils import get_column_lettercol = 5 sht.column_dimensions[get_column_letter(col)].width = 18
使用数字格式
- 代码
import datetime from openpyxl import Workbook wb = Workbook() ws = wb.active # set date using a Python datetime ws['A1'] = datetime.datetime(2010, 7, 21) ws['A1'].number_format
使用公式
- 代码
from openpyxl import Workbook wb = Workbook() ws = wb.active # add a simple formula ws["A1"] = "=SUM(1, 1)" wb.save("formula.xlsx")
条件格式
- 代码
from openpyxl import Workbook from openpyxl.styles import Color, PatternFill, Font, Border from openpyxl.styles.differential import DifferentialStyle from openpyxl.formatting.rule import ColorScaleRule, CellIsRule, FormulaRule,Rule wb = Workbook() ws = wb.active # 创建填充'redFill' redFill = PatternFill(start_color='EE1111',end_color='EE1111',fill_type='solid')# 添加双色刻度'A1:A10' # 采用excel“RRGGBB”风格的颜色。 ws.conditional_formatting.add('A1:A10',ColorScaleRule(start_type='min', start_color='AA0000',end_type='max', end_color='00AA00')) # 添加一个三色刻度'B1:B10' ws.conditional_formatting.add('B1:B10',ColorScaleRule(start_type='percentile', start_value=10, start_color='AA0000',mid_type='percentile', mid_value=50, mid_color='0000AA',end_type='percentile', end_value=90, end_color='00AA00'))# 基于单元格比较添加条件格式'C2:C10' # addCellIs(范围字符串、运算符、公式、stopIfTrue、wb、字体、边框、填充) # 如果单元格小于“公式”,则设置格式 ws.conditional_formatting.add('C2:C10',CellIsRule(operator='lessThan', formula=['C$1'], stopIfTrue=True, fill=redFill)) # 如果单元格位于“公式”之间,则设置格式 ws.conditional_formatting.add('D2:D10',CellIsRule(operator='between', formula=['1','5'], stopIfTrue=True, fill=redFill)) # 使用公式格式化 ws.conditional_formatting.add('E1:E10',FormulaRule(formula=['ISBLANK(E1)'], stopIfTrue=True, fill=redFill)) # 除了2色和3色刻度之外,格式规则采用字体、边框和填充进行样式设置: myFont = Font() myBorder = Border() ws.conditional_formatting.add('E1:E10',FormulaRule(formula=['E1=0'], font=myFont, border=myBorder, fill=redFill)) # 使用特殊公式高亮显示包含特定文本的单元格 red_text = Font(color="9C0006") red_fill = PatternFill(bgColor="FFC7CE") dxf = DifferentialStyle(font=red_text, fill=red_fill) rule = Rule(type="containsText", operator="containsText", text="highlight", dxf=dxf) rule.formula = ['NOT(ISERROR(SEARCH("highlight",A1)))'] ws.conditional_formatting.add('A1:F40', rule) wb.save(r"d:\\test.xlsx")
实例
新建1-12月工作表
- 新建1-12月工作表
import openpyxl file1 = '文件名称.xlsx' wb = openpyxl.load_workbook(file1) for i in range(1,12):wb.create_sheet(f'{ i }月') wb.save(file1)
除了9月份的工作表以外都删除
- 除了9月份的工作表以外都删除
import openpyxl file1 = '文件名称.xlsx' wb = openpyxl.load_workbook(file1) AllWS = wb.sheetnames for ws in AllWS:if ws != "9月":wb.remove(wb[ws]) wb.save(file1)
Openpyxl笔记相关推荐
- excel文件.xlsx操作 openpyxl 笔记
1 .xls文件 用xlrd和xlwt两个库,一个读一个写,最大行列是65536行,256列 2 .xlsx文件需用openpyxl库读写,最大行列是1048576行,16384列(采取的是xml存储 ...
- python输出字体的大小_Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格
Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格 Python 需要创建和读取excel表里面的数据,需要用 openpyxl 这个包,今天安装好备用. 首先,进入C命令窗口 ...
- Python入门:对Excel数据处理的学习笔记【第十一章】openpyxl库的使用
注:该学习笔记是根据曾志贤老师编写的<从Excel到Python,用Python轻松处理Excel数据>所学习整理的笔记. 第11章 openpyxl库的使用 目录 第11章 openpy ...
- openpyxl 插入列_[Python]Excel编程(openpyxl)学习笔记
1.基本概念 在openpyxl中,主要用到三个概念:Workbooks,Sheets,Cells. Workbook就是一个excel工作表: Sheet是工作表中的一张表页: Cell就是简单的一 ...
- openpyxl学习笔记(2020--8-11)——制图续
甜甜圈 # Doughnut charts are similar to pie charts except that they use a ring instead of a circle. # T ...
- openpyxl超详细笔记
文章目录 前言 引入库 基本操作 创建新的工作薄 加载已存在的工作簿 创建新的工作表 当前工作表 指定工作表 已存在的全部工作簿 选择单个单元格 单元格属性 单元格的样式属性 单元格的值 选择单元格 ...
- 【Python_笔记】openpyxl中Workbook()和.load_workbook()区别
记录学习旅程~ 欢迎各位道友指教与交流~ 准备开始实操时发现一个问题,即Workbook()是创建一个类对象,而load_workbook()是一个方法加载存在的excel. 由于在学习openpyx ...
- python 将内容写入表格 xlsx openpyxl使用笔记
点击查看官方文档 初步使用 创建工作表.工作簿, 写入.读取内容, 保存.读取工作表 from openpyxl import Workbook, load_workbookwb = Workbook ...
- Python学习笔记——openpyxl读取工作表的数据有效性设置信息
今天在用openpyxl读取表格信息时,需要根据表格中单元格的数据有效性设置中的序列内容来进行下一步操作判断.但是对于如何获取该序列的字符串值一点也不了解,网上查找资料只找到用DataValidati ...
最新文章
- 如何选择正确的RAID级别
- 基于 Kafka 与 Debezium 构建实时数据同步
- UI(UGUI)框架(一)---------概述与保存/读取面板类型与路径
- Soft-Actor-Critic-强化学习算法
- 安装Docker的三种方式
- linux 删除分区_详解linux系统架构--文件系统体系
- Python编程常见出错信息及原因分析(2)
- ubuntu终端连接远程计算机
- 分享自TERRY-V 《Qt Creator生成带图标的exe文件》
- AngularJS 1.x系列:AngularJS控制器(3)
- 游戏蛮牛unity权威指南全实例讲解书籍上线
- 【Hive】Hive 建表语句详解
- masm5安装教程_小编为你演示win7系统使用masm5 0的操作步骤【详细说明】的恢复步骤...
- 学嵌入式职业发展方向有哪些?
- 计算机求圆面积公式,如何计算圆的面积?
- 水货三星Android手机验机方法
- XP系统如何连接Win10共享打印机--win10专业版
- 您的 MAD 得分是多少?| MAD Skills
- 干货 | 80篇+网络安全面试经验帖
- 耶鲁大学《博弈论》课程——重复博弈