python openpyxl模块使用教程

目录

  • [安装 openpyxl 模块](#安装 openpyxl 模块)
  • 工作簿相关方法
  • 工作表对象
  • 单元格相关方法
    • [1. 单元格对象获取](#1. 单元格对象获取)
    • [2. 单元格属性](#2. 单元格属性)
    • [3. 单元格样式](#3. 单元格样式)
    • [4. 插入/删除 行列](#4. 插入/删除 行列)

安装 openpyxl 模块

c 复制代码
pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple

工作簿相关方法

  • openpyxl.Workbook() : 新建工作簿,配合 save 方法使用

  • openpyxl.load_workbook( path ) : 打开存在的工作簿

  • wb[ sheet_name ] : 获取指定名称的工作表对象

  • wb.get_sheet_by_name('Sheet1'): 获取指定名称的工作表对象

  • wb.sheetnames: 获取所有工作表名称,以列表形式返回

  • wb.worksheets:获取所有工作表对象,以列表形式返回

  • wb.create_sheet( title=None, index=None ) : 创建/新增工作表。title为工作表的名称 ;index为该工作表的位置,参数可不写,默认在最后增加名称为 Sheet的工作表

  • wb.copy_worksheet(sheet):在当前工作簿复制指定的工作表并返回复制后的工作表对象

  • wb.remove(sheet):删除指定的工作表

  • ws.save(path):保存到指定路径path的Excel文件中,若文件不存在会新建,若文件存在会覆盖

  • wb.index( worksheet ): 获取工作表的索引

  • wb.move_sheet( sheet, offset=0 ): 移动工作表

工作表对象

  • ws.title:获取或设置工作表名
  • ws.max_row:工作表最大行数
  • ws.max_column:工作表最大列数
  • ws.append(list):表格末尾追加数据
  • ws.merge_cells('A2:D2' / start_row= , end_row= , start_column= , end_column= ):合并单元格
  • ws.unmerge_cells('A2:D2' / start_row= , end_row= , start_column= , end_column= ):解除合并单元格
  • ws.sheet_properties.tabColor = "1072BA": 设置/获取 sheet 标签按钮颜色
  • ws.delete_rows(1, ws.max_row): 清空工作表
  • ws.sheet_view.showGridLines = False: 不显示网格

单元格相关方法

1. 单元格对象获取

  • ws['A1']:根据坐标获取单个单元格对象
  • ws.cell( row, column, value=None ):根据行列获取单个单元格对象
  • ws[1]:获取第一行所有单元格对象,ws['1']也可
  • ws['A']:获取第A列所有单元格对象
  • ws['A':'B']:获取从A到B列所有单元格对象,ws['A:B']也可
  • ws[1:2]:获取从1到2行所有单元格对象,ws['1:2']也可
  • ws['A1':'B2']:获取从A1到B2范围所有单元格对象,ws['A1:B2']也可。
  • ws.values:获取所有单元格数据的可迭代对象,可以通过for循环迭代或通过list(ws.values)转换为数据列表
  • ws.rows:获取所有数据以行的格式组成的可迭代对象
  • ws.columns:获取所有数据以列的格式组成的可迭代对象
  • ws.iter_rows(min_row=None, max_row=None, min_col=None, max_col=None):获取指定边界范围并以行的格式组成的可迭代对象,默认所有行
  • ws.iter_cols(min_col=None, max_col=None, min_row=None, max_row=None): 获取指定边界范围并以列的格式组成的可迭代对象,默认所有列

单元格写入后一定要保存,否则Excel不会变化
1. 单个单元格数据读写

py 复制代码
import openpyxl

source_path = 'test.xlsx'
source_wb = openpyxl.load_workbook(source_path )
sour_sheet = source_wb['Sheet1'] # 获取 Sheet1 对象

# 读/写  B2 单元格数据
sour_sheet['B2'].value = 12
cell_value = sour_sheet['B2'].value
print('B2 ', cell_value)

# 读/写 2行 2列 数据
sour_sheet.cell(2, 3).value = 34
cell_value = sour_sheet.cell(2, 3).value
print('2行3列 ', cell_value)

2. 多个单元格数据读写

py 复制代码
import openpyxl

source_path = 'test.xlsx'
source_wb = openpyxl.load_workbook(source_path )
sour_sheet = source_wb['Sheet1'] # 获取 Sheet1 对象

test_data = [
    [1, 2 , 3],
    [4, 5 , 6],
    [7, 8 , 9],
]

# 写  A1:C3 单元格数据
cells_obj = sour_sheet['A1:C3']  # 获取此范围内单元格对象
index_row = 0
index_column = 0
for row_cells in cells_obj:
    for col_cell in row_cells:
        col_cell.value = test_data[index_row][index_column]
        index_column += 1
    index_row += 1
    index_column = 0

# 读 A1:C3 单元格数据
for row_cells in cells_obj:
    for col_cell in row_cells:
        print(col_cell.value)

2. 单元格属性

  • cell.value :获取或设置值
  • cell.column : 数字列标,例:1
  • cell.column_letter : 字母列标,例:A
  • cell.row : 行号
  • cell.coordinate : 坐标,例如'A1'
  • cell.data_type : 数据类型, 's' = string字符串,'n' = number数值,会根据单元格值自动判断
  • cell.number_format :单元格格式,默认'General'常规,详见excel自定义数据类型

3. 单元格样式

  • cell.font :获取或设置单元格Font对象 (字体名称,字体大小,是否加粗,字体颜色等)
  • cell.border : 获取或设置单元格边框
  • cell.alignment : 获取或设置单元格水平/垂直对齐方式
  • cell.fill:获取或设置单元格填充颜色
  • ws.row_dimensions[行号]:获取行对象(非行数据,包括行的相关属性、行高等)
  • ws.column_dimensions[字母列标]:获取列对象(非行数据,包括行的相关属性、列宽等)
  • get_column_letter(index):根据列的索引返回字母
  • column_index_from_string(string):根据字母返回列的索引
  • row_obj.height:获取或设置行高
  • column_obj.width:获取或设置列宽
  • 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) : 拆解单元格
  • ws.column_dimensions['A'].auto_size = True: 自适应第一列的宽度
  • ws.row_dimensions[row[0].row].auto_size = True: 自适应所有行的高度
  • ws.cell(row, column).has_style: 判断该单元格是否有特殊格式
  • ws.cell(row, column)._style: 复制该单元格所有格式,只能在本工作簿内复制

openpyxl模块中与字体,颜色,背景,边框,字体,行宽,行高,单元格格式等相关的内容都放在了styles模块中

复制合并的单元格,只能一个个的复制单个单元格格式,再执行合并操作

  1. 设置单元格字体格式、行高列宽、对齐格式
  • Font 类设置样式
    • name:字体名称。
    • size:字体大小。
    • color:颜色。
    • bold:加粗。
    • italic:斜体
    • underline:下划线
  • Alignment 类设置样式
    • horizontal:横向(左右)对齐方式。
      • 可选参数 'left' , 'centerContinuous' , 'center' , 'distributed' , 'right' , 'fill' , 'general' , 'justify'
    • vertical:竖向(上下)对齐方式。
      • 可选参数 'bottom' , 'center' , 'distributed' , 'top' , 'justify'
    • text_rotation=0: 文本旋转
    • wrap_text=False: 是否换行
    • shrink_to_fit = False: 是否缩小字体适应列宽
    • indent = 0 :缩进
  • border_style 控制边框样式
    • 'dashDot','dashDotDot', 'dashed','dotted', 'double','hair', 'medium', 'mediumDashDot', 'mediumDashDotDot', 'mediumDashed', 'slantDashDot', 'thick', 'thin'
py 复制代码
from openpyxl.styles import Font, colors, Alignment # 导入必需的类
# Font对象表示字体样式,Alignment对象表示对齐方式
import openpyxl

source_path = 'test.xlsx'
source_wb = openpyxl.load_workbook(source_path )
sour_sheet = source_wb['Sheet1'] # 获取 Sheet1 对象

# 设置字体  设置 等线24号,加粗斜体,字体颜色红色
my_red = openpyxl.styles.colors.Color(rgb='00FF0000')
bold_itatic_24_font = Font(name='等线', size=24, italic=True, color=my_red, bold=True)
sour_sheet['A1'].font = bold_itatic_24_font

# 设置对齐方式 设置B1中的数据垂直居中和水平居中
sour_sheet['B1'].alignment = Alignment(horizontal='center', vertical='center')

# 设置行高和列宽 第2行行高
sour_sheet.row_dimensions[2].height = 40
# C列列宽
sour_sheet.column_dimensions['C'].width = 30

source_wb.save(source_path)
  1. 设置单元格自动换行
py 复制代码
from openpyxl import Workbook
from openpyxl.styles import Alignment

# 创建一个新的Excel工作簿
wb = Workbook()
# 选择第一个工作表
ws = wb.active

# 在A1单元格中添加长文本
ws['A1'] = '这是一份非常长的文本,需要进行自动换行才能全部显示出来。'

# 设置A1单元格自动换行
ws['A1'].alignment = Alignment(wrap_text=True)
  1. 写入整行数据
py 复制代码
import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
 
sheet = wb.create_sheet('sheet2')
lis = ['张三','在家','地址','学号','手机','昵称']
sheet.append(lis)
 
wb.save("test.xlsx")
  1. 设置单元格边框
py 复制代码
import openpyxl
from openpyxl.styles import Border, Side

wb = openpyxl.Workbook()        # 创建一个excel文件
sheet = wb.active               # 获得一个的工作表
sheet.title = "边框控制"

border = Border(left=Side(border_style='thin', color='000000'),
                right=Side(border_style='mediumDashed', color='000000'),
                top=Side(border_style='double', color='000000'),
                bottom=Side(border_style='dashed', color='000000'))

sheet['B2'].border = border

wb.save("test.xlsx")

4. 插入/删除 行列

  • ws.insert_rows(row_index,amount=1):在第row_index行上方插入amount列,默认插入1列
  • ws.insert_cols(col_index,amount=1):在第col_index列左侧插入amount列,默认插入1列
  • ws.delete_rows(row_index,amount=1):从row_index行开始向下删除amount行,默认删除1行
  • ws.delete_cols(col_index,amount=1):从col_index列开始向右删除amount行,默认删除1列
相关推荐
葬爱家族小阿杰20 分钟前
python执行测试用例,allure报乱码且未成功生成报告
开发语言·python·测试用例
xx155802862xx22 分钟前
Python如何给视频添加音频和字幕
java·python·音视频
酷爱码23 分钟前
Python实现简单音频数据压缩与解压算法
开发语言·python
jllllyuz44 分钟前
如何为服务器生成TLS证书
运维·服务器·数据库
花果山总钻风1 小时前
SQLAlchemy 中的 func 函数使用指南
python
知识中的海王1 小时前
Python html 库用法详解
开发语言·python
面朝大海,春不暖,花不开1 小时前
使用 Python 正则表达式实现文本替换与电话号码规范化
python·mysql·正则表达式
淘小白_TXB21961 小时前
Python网页自动化Selenium中文文档
python·selenium·自动化·网页自动化
伍六星1 小时前
Flask和Django,你怎么选?
数据库·django·flask
杜哥无敌2 小时前
ORACLE 修改端口号之后无法启动?
数据库·oracle