Python的openpyxl库:代码

本文详细介绍了如何使用Python的openpyxl库进行Excel文件的操作,包括读取、写入数据,创建和删除工作表,格式化单元格,以及处理数据范围和特殊格式如合并单元格等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import openpyxl as l
import time

# 有对应操作的话,保存就好了,保存到硬盘上 。。。 wb.save(file_result_path)

file_open_path = r'D:\T\Documents\MobileFile\桌面\python学习\表\test_openpyxl.xlsx'
file_result_path = r'D:\T\Documents\MobileFile\桌面\python学习\表\result.xlsx'
wb = l.load_workbook(file_open_path)  # 指定路径,打开工作簿
# ws = wb['Sheet1']  # 打开工作表
ws = wb['sheet_yzy1']  # 打开工作表

# -----------------------------------------------------------------
# wb = l.Workbook()        # 新建 空的工作簿

# ws = wb['Sheet']  # 1_按照sheet名字 获取工作表
# ws = wb.active  # 1_激活的工作表 获取工作表

# wb.worksheets  # 获取所有的'sheet对象'     。。。可以接着下标,获取单个sheet对象

# wb.sheetnames            #1_获取所有的'sheet名字'    可以接下标,看某个名字。
# ws.title                 #1_获取某个'sheet名字'      。。一般用title修改sheet名字

# wb.remove(wb['preSheet2'])  # 删除工作表   。。。参数是sheet对象

# new_ws = wb.create_sheet('yzy1',0)  # 新建工作表:  1(不必须)给sheet名字 会自动重命名为Sheet+数字 。。。2(不必须)还可以指定索引,默认在最后面添加。

# new_ws = wb.copy_worksheet(wb['Sheet1'])  # 创建 表的副本,返回一个id不同的new_ws  .。。会自动给新的sheet重命名: 'Copy'

# cell = ws.cell(1, 2)  # 获取单元格对象
# cell_data = ws.cell(1, 2).value  #  不是index  获取某个单元格的值,也可以修改

# for循环 也可以设置步长

# cell.row, cell.column     # 获取单元格所在的行 和 列       不是index

'''
2023.10.03
'''
# 获取 范围内的单元格  (特别重要)
# cell_area = ws.iter_rows(min_row=1, max_row=3, min_col=1, max_col=3)  # 最小行,最大行,最小列,最大列 ,按照顺序写的话,参数可省略     (不是index)
# for row in cell_area:  # 拿到每一行的数据
#     # print(row)
#     for cell in row:  # 一行内,每一个单元格的数据
#         print(cell.value)
# -------

# print(ws.max_row)       #最大的行数
# print(ws.max_column)    #最大的列数

# ws.cell(r, 5).fill = l.styles.PatternFill(patternType='solid', fgColor='FFFF00')  # 给单元格设置填充颜色
# ws.cell(r, 5).font = l.styles.Font(color='c00000')  # 给单元格设置字体颜色


# 实例: C列文本和D列百分比的拼接
# for row in range(1, ws.max_row + 1):
#     cell_data_C = ws.cell(row, 3).value  # 2_指定单元格_纯数字,不是index
#     cell_data_D = ws.cell(row, 4).value  # 2_指定单元格_纯数字,不是index
#
#     tmp = str(int(cell_data_D * 100)) + '%'  # 因为D列是百分比,获取是小数,需要处理。
#
#     data = cell_data_C + '(' + tmp + ')'
#     ws.cell(row, 5, data)  # 2_指定单元格_纯数字,不是index      可以直接写入数据
# -------------

'''
2023.10.04
'''
# 实例:读取txt(以空格分割的数据),然后把数据写入excel里。
txt_file = open(r'D:\T\Documents\MobileFile\桌面\python学习\表\test_txt_excel.txt', mode='r',
                encoding='utf-8')  # r是read
lines = txt_file.readlines()  # 读取所有行

# 去掉 结尾的'\n',结果还是返回到lines里  (还是去掉\n吧,不然 '自动换行'打开的时候 会换行)
# for line in range(0, len(lines)):
#     lines[line] = lines[line].split('\n')[0]
#
# col_first = ws.max_column + 2  # 和原来的数据 隔一列
# for row in range(len(lines)):
#     row_data = lines[row]  # 获取每一行的数据
#     cell_data = row_data.split(' ')  # 拿到空格分割后的数据列表
#     # print(cell_data)
#     for col in range(len(cell_data)):
#         ws.cell(row + 1, col_first + col, cell_data[col])  # 写入数据
#  ---------

# 打印出所有的sheet名字:
# print(wb.sheetnames)
# for i in wb.sheetnames:       #循环的可以是列表
#     print(i)      #1_方法

# print(wb.worksheets)
# for i in wb.worksheets:
#     print(i.title)  # 2_方法
#     print(str(i)[12:-2])  # 3_方法
# ----------


# 给所有sheet的名字前面,加pre
# for i in range(len(wb.worksheets)):   # 1_方法
#     wb.worksheets[i].title = 'pre' + wb.worksheets[i].title

# for i in wb.worksheets:            # 2_方法
#     i.title = 'pre' + i.title
# -------


# 对 开头不是pre的sheet表,进行删除:
# for sheet_name in wb.sheetnames:
#     # print(sheet_name)
#     # if sheet_name.find('pre', 0, 4) != -1:        # 1_if
#     if sheet_name[:3] != 'pre':                 # 2_if
#         wb.remove(wb[sheet_name])  # 用worksheets不行,因为删除工作表之后,它会变化
# ---------------

'''
2023.10.05
'''
# 获取奇数行的数据:
# row_area = ws.iter_rows(1, ws.max_row, 1, ws.max_column)  # 获取区域的单元格
# for row in row_area:  # 整个奇数行 一行的单元格对象
#     for cell in row:
#         # print(cell.row)
#         if cell.row % 2 == 1:
#             print(cell.row, cell.column, cell.value)
# -------

# 获取C列数据,然后把数据 添加在最后一行。
# list_c = []  # 数据存到列表里,更容易操作
# row_area = ws.iter_rows(1, ws.max_row, 3, 3)  # 获取C列
# # print('row_area: ', row_area)
#
# for row in row_area:  # 一行的单元格对象
#     # print('row_data: ', row_data)
#     for cell in row:
#         # print('cell.value: ', cell.value)
#         list_c.append(cell.value)
# # print(list_c)
# ws.append(list_c)  # 在sheet的最后一行,添加数据
# ------

'''
2023.10.06
'''
# 区域范围内的'空格' ,重新赋值。。。对<= 3的单元格,重新赋值。
# for row in range(1, ws.max_row + 1):
#     # print(row)
#     for col in range(1, ws.max_column + 1):
#         cell_data = ws.cell(row, col).value
#         # print(cell_data)
#
#         # if str(cell_data) == 'None':  # 1_'None'是NoneType类型,需要转化成str
#         #     ws.cell(row, col, 'yzy')
#
#         if cell_data == None:  # 2_或者直接None
#             ws.cell(row, col, 'yzy')
#
#         if cell_data != None and cell_data <= 3:  # 需要先处理下None和str类型,直接参与计算会报错。
#             ws.cell(row, col, str(ws.cell(row, col).value) + '(<= 3)')
# ----------

# 每一行累加,如果大于5,在最后的一列写>5
# sum = 0
# row_area = ws.iter_rows(2, ws.max_row, 2, ws.max_column)  # 获取区域单元格
#
# for row in row_area:
#     # print(row)
#     for cell in row:
#         # print(cell)
#         sum += cell.value
#     if sum > 5:
#         ws.cell(cell.row, cell.column + 1, '>5')  # 获取单元格所在的行 he 列  ,不是index
#     sum = 0
# ------

# 把B列'数学'的 不同值的行,分别写在很多个sheet里:        ...功能类似于筛选
# row_area = ws.iter_rows(2, ws.max_row, 2, 2)  # 获取区域单元格_B列
# list_B = []  # 数据类型:单元格数值-这个单元格所在的行号  (存储双列的数据)
# for row in row_area:  # 给list_B赋值
#     for cell in row:
#         # print(cell.value)
#         list_B.append(str(cell.value) + '-' + str(cell.row))    # 获取单元格所在的行
#
# str_different_values = ''  # 看B列'数学'不同的数值,有多少个。
# for i in list_B:
#     values = i.split('-')[0]
#     # print(type(values))
#     if str_different_values.find(values) == -1:
#         str_different_values += values + ','  # str里没有这个数据,就添加到str里
#         new_ws = wb.create_sheet()  # 有多少个不同的值,就创建多少个sheet,并以值的名字命名。
#         new_ws.title = '数学_' + str(values)
# # print('str: ' + str_different_values)
#
# for i in list_B:  # 写数据
#     cell_value = int(i.split('-')[0])  # 单元格里的值
#     row = int(i.split('-')[1])  # 这个单元格所在的行号
#
#     sheet_name = '数学_' + str(cell_value)
#     new_ws = wb[sheet_name]  # 选中这个要插入数据的sheet
#     # print(new_ws)
#
#     row_area = ws.iter_rows(row, row, 1, ws.max_column)  # 获取区域单元格_B列
#
#     list_data = []
#     for row in row_area:  # 获取原来的表,整行的数据
#         for cell in row:
#             list_data.append(cell.value)
#     # print(list_data)
#     new_ws.append(list_data)  # 在sheet的最后一行,写入数据
# -----------


# ------------------------------------------------------------------
# EndTag的生成:
update_time_EndTag = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())  # 格式化时间
date_show_row_EndTag = ws.max_row + 2  # 日期展示的行号

ws.merge_cells(start_row=date_show_row_EndTag, end_row=date_show_row_EndTag, start_column=1, end_column=5)  # 合并单元格
fill_color_EndTag = l.styles.PatternFill(patternType='solid', fgColor='FFFF00')  # 填充颜色
align_method_EndTag = l.styles.Alignment(horizontal='left', vertical='center')  # 对齐方式

ws.cell(date_show_row_EndTag, 1, 'EndTag-最后生成时间:' + str(update_time_EndTag))  # 给单元格赋值
ws.cell(date_show_row_EndTag, 1).fill = fill_color_EndTag  # 给单元格设置填充颜色
ws.cell(date_show_row_EndTag, 1).alignment = align_method_EndTag  # 给单元格设置对齐方式

wb.save(file_result_path)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值