如下是需要处理的Excel文件,可以看到在27行和117行处的E列存在数据不一致情况,需进行“切片删除”
运行结果图如下:
我们可以发现,E列27行至117行处的不一致数据已经被删除,即实现了在Excel文件内部进行进行**“切片化”**的数据删除操作!!!
在Excel中,切片是一种数据筛选工具,它允许您以交互的方式对数据进行过滤和分析。切片删除功能是指删除已创建的切片。
要删除切片,您可以按照以下步骤操作:
删除切片后,相关的切片将从工作表中移除。注意,这不会影响数据本身,只是移除了用于筛选数据的切片控件。请注意,切片删除功能只适用于Excel 2013及更高版本。在较早的版本中,删除切片的步骤可能略有不同,但大致思路是一样的。
delete_slices
方法是openpyxl库提供的一个函数,用于删除Excel工作表中的切片。
底层原理涉及以下几个步骤:
load_workbook
函数,openpyxl库可以读取Excel文件,并将其加载到内存中以进行后续操作。workbook['Sheet1']
语句,我们选择要操作的具体工作表。这里假设工作表的名称为"Sheet1"。delete_slices
方法,可以删除工作表中的所有切片。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')