代码:



#-*- coding: utf-8 -*-
import os,openpyxl
from openpyxl.styles import Border, Side,PatternFill

if __name__ == '__main__':
#bug如果标题行里面有\r,会被转换成了_x000D_
#有一个安全过滤的库,叫什么来着?
#作成一个新的空的Excel
wb = openpyxl.Workbook()
# 保存
wb.save('example.xlsx')
#打开
wb = openpyxl.load_workbook('example.xlsx')
#当前打开的sheet页 wb.active
ws = wb.active
# 更改默认名称Sheet`
ws.title = "WorkSheetTitle"
# 定义第二个sheet页
ws2 = wb.create_sheet("NewWorkSheet2")

# 定义第三个sheet页
# `0` 的设定 会将该sheet页 置于wb最前面
ws3 = wb.create_sheet("NewWorkSheet3", 0)
ws.title = "WorkSheetTitle"

ws = wb._sheets[0]
ws.title = "AA"
# WS的tab颜色设定
ws.sheet_properties.tabColor = "FF0000"

# 给单元格赋值
ws["A1"] = "HOGE"
ws["B1"] = "FUGA"

# 指定行列给单元格赋值
ws.cell(row=4, column=2, value=10)
# 指定行列给单元格赋值(9X9的单元格)
v = 0
for i in range(1,10):
for n in range(1,10):
ws.cell(row=i, column=n, value=v)
v += 1
# column名和値顺序(追加)放入单元格中
column_title = ["FirstName", "LastName"]
rows = [
column_title,
["Tarou", "Tanaka"],
["Tarou", "Suzuki"],
["Tarou", "Uchiayama"],
]
for row in rows:
ws.append(row)
# 单元格内换行
ws['A1'] = "A\nB\nC"
ws['A1'].alignment = openpyxl.styles.Alignment(wrapText=True)
# 设置font
font = openpyxl.styles.Font(
name = "宋体",
size = 15,
)
a1 = ws["A1"]
a1.font = font
a1.value = "TEST"
# 设置单元格border的style
border = Border(
left=Side(
border_style="thin",
color="FF0000"
),
right=Side(
border_style="thin",
color="FF0000"
),
top=Side(
border_style="thick",
color="FF0000"
),
bottom=Side(
border_style="thin",
color="FF0000"

)
)
b2 = ws["B2"]
b2.border = border
b2.value = "TEST"
# 合并单元格
ws.merge_cells("A1:E1")
ws["A1"] = "HOGE"

# 单元格填充颜色
fill = PatternFill(fill_type='solid',
fgColor='FFFF0000')
b2 = ws["B2"]
b2.fill = fill
b2.value = "TEST"

# 设置超链接 到“example”sheet页 鼠标定格在A5单元格
ws["A1"] = "Link"
ws["A1"].hyperlink = "example.xlsx#example!A5"

#读Excel文档
for row in ws:
for cell in row:
print(cell)


# 保存
wb.save('example.xlsx')
os.system('example.xlsx')


拆分单元格



import openpyxl

workbook = openpyxl.load_workbook(path) #加载已经存在的excel
# workbook = openpyxl.Workbook(path)
name_list = workbook.sheetnames
# worksheet = workbook.get_sheet_by_name(name_list[0]) #最新版本已经不能使用这种方法
worksheet = workbook[name_list[0]]


m_list = worksheet.merged_cells #合并单元格的位置信息,可迭代对象(单个是一个'openpyxl.worksheet.cell_range.CellRange'对象),print后就是excel坐标信息
cr = []
for m_area in m_list:
# 合并单元格的起始行坐标、终止行坐标。。。。,
r1, r2, c1, c2 = m_area.min_row, m_area.max_row, m_area.min_col, m_area.max_col
# 纵向合并单元格的位置信息提取出
if r2 - r1 > 0:
cr.append((r1, r2, c1, c2))
print('符合条件%s' % str(m_area))

# 这里注意需要把合并单元格的信息提取出再拆分
for r in cr:
worksheet.unmerge_cells(start_row=r[0], end_row=r[1],
start_column=r[2], end_column=r[3])

workbook.save(path)