Python实现Excel切片删除功能(附源码)

使用Python实现Excel中的“切片删除”功能(附源码)

先上效果图!!!

如下是需要处理的Excel文件,可以看到在27行和117行处的E列存在数据不一致情况,需进行“切片删除
在这里插入图片描述
运行结果图如下:
在这里插入图片描述
在这里插入图片描述

我们可以发现,E列27行至117行处的不一致数据已经被删除,即实现了在Excel文件内部进行进行**“切片化”**的数据删除操作!!!

什么是“切片删除”?

Excel中,切片是一种数据筛选工具,它允许您以交互的方式对数据进行过滤和分析。切片删除功能是指删除已创建的切片。

要删除切片,您可以按照以下步骤操作:

  1. 在Excel工作表中,单击任意一个包含切片的单元格。
  2. 在“切片工具”选项卡上,选择“切片操作”组中的“删除”按钮。或者,您可以右键单击切片,然后选择“删除”。

删除切片后,相关的切片将从工作表中移除。注意,这不会影响数据本身,只是移除了用于筛选数据的切片控件。请注意,切片删除功能只适用于Excel 2013及更高版本。在较早的版本中,删除切片的步骤可能略有不同,但大致思路是一样的。

如何使用Python进行批量Excel数据文件的切片删除功能?

delete_slices方法是openpyxl库提供的一个函数,用于删除Excel工作表中的切片。

底层原理涉及以下几个步骤:

  1. openpyxl库加载Excel文件:通过调用load_workbook函数,openpyxl库可以读取Excel文件,并将其加载到内存中以进行后续操作。
  2. 定位要操作的工作表:使用workbook['Sheet1']语句,我们选择要操作的具体工作表。这里假设工作表的名称为"Sheet1"。
  3. 删除切片:调用delete_slices方法,可以删除工作表中的所有切片。
  4. 保存修改后的Excel文件:使用save方法将修改后的Excel文件保存到硬盘上。这样可以确保我们对切片的删除操作得以保存。

openpyxl库是一个强大的Python库,它允许我们处理Excel文件的各种操作。在删除切片的底层实现中,openpyxl库会解析Excel文件的结构,并找到切片相关的数据及其位置信息。然后,它会对这些数据进行相应的删除操作,并将修改后的数据重新写入到Excel文件中。

需要注意的是,openpyxl库只能操作XLSX格式的Excel文件,无法处理旧版本(.xls)的Excel文件。

代码如下:

import pandas as pd
import openpyxl

# 读取Excel文件
df = pd.read_excel('筛选后文件.xlsx')

# 获取要遍历的列号,假设列号为4(第5列)
column_num = 4

start_row = None
end_row = None

# 标记变量
flag_A = False
flag_B = False

# 保存要删除的行索引
rows_to_delete = []

# 遍历指定列的数据
for index, value in df.iloc[:, column_num].items():
    if value == '执行机构类型':
        # 获取坐标
        cell = df.iloc[:, column_num].index[index]
        start_row = cell + 2  # 行索引从0开始,所以需要加1
        flag_A = True
    elif value == 'IO接口类型':
        # 获取坐标
        cell = df.iloc[:, column_num].index[index]
        end_row = cell + 2  # 行索引从0开始,所以需要加1
        flag_B = True

    if flag_A and not flag_B:
        # 添加要删除的行索引
        rows_to_delete.append(index)

    if flag_A and flag_B:
        break  # 找到目标字段后跳出循环

# 删除行数据
df.drop(rows_to_delete, inplace=True)

# 输出行号信息
print(f"执行机构类型行号: {start_row}")
print(f"IO接口类型行号: {end_row}")

# 加载Excel文件
wb = openpyxl.load_workbook('筛选后文件.xlsx')
sheet = wb.active

# 删除E30到E950之间的数据
column_num = 4  # E列的列号为5

# 将右侧数据整体左移一列
for r in range(start_row, end_row + 1):

    for c in range(column_num, sheet.max_column):
        sheet.cell(row=r, column=c).value = sheet.cell(row=r, column=c + 1).value
        sheet.cell(row=r, column=c + 1).value = None

# 删除第5列(E列)
sheet.delete_cols(column_num)
wb.save('output.xlsx')