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
: 不显示网格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. 单个单元格数据读写
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. 多个单元格数据读写
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)
cell.value
:获取或设置值cell.column
: 数字列标,例:1cell.column_letter
: 字母列标,例:Acell.row
: 行号cell.coordinate
: 坐标,例如'A1'
cell.data_type
: 数据类型, 's' = string
字符串,'n' = number
数值,会根据单元格值自动判断cell.number_format
:单元格格式,默认'General'
常规,详见excel
自定义数据类型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. 设置单元格字体格式、行高列宽、对齐格式
name
:字体名称。size
:字体大小。color
:颜色。bold
:加粗。italic
:斜体underline
:下划线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
:缩进'dashDot','dashDotDot', 'dashed','dotted', 'double','hair', 'medium', 'mediumDashDot', 'mediumDashDotDot', 'mediumDashed', 'slantDashDot', 'thick', 'thin'
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)
2. 设置单元格自动换行
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)
3. 写入整行数据
import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
sheet = wb.create_sheet('sheet2')
lis = ['张三','在家','地址','学号','手机','昵称']
sheet.append(lis)
wb.save("test.xlsx")
4. 设置单元格边框
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")
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列