import xlwings as xw
import time
from time import sleep
import os
app=xw.App(visible=True,add_book=False)
wb = app.books.open (r'E:/䐁蕳/营销渠道保单清单.xlsx')
time.sleep(10)
sht = wb.sheets['sheet1']
exist_list =["正常有效","标体通过","承保","人工核保","新增险种","自核通过"]
为什么我这段保留的字,只有第一个能够显示出来呢,其余都不行呢?
rows = sht.api.UsedRange.Rows.count
cols = sht.api.UsedRange.columns.count
rng = sht[0, :cols]
for cell in rng:
if cell.value == '保单状态':
print (cell.address)
a = cell.address
a_range = sht.range("AO2:AO"+str(rows))
cell_list = []
for cell in a_range:
cell_list.append (cell)
cell_list.reverse ()
print (" 开始调整行和列……")
for cell in cell_list:
if cell.value is not None: # 单元格不为空则开始比对
find_flag = 0 # 匹配标志
for exist_value in exist_list:
if cell.value.find (exist_value) != -1: \
find_flag = 1 # 匹配则将标志置为1
break
else:
continue # 匹配不上则继续
if find_flag == 0: # 没匹配上的删除整行
cell_to_del = cell.address
# print(cell_to_del)
sht.range (cell_to_del).api.EntireRow.Delete ()
else: # 单元格为空直接删除
cell_to_del = cell.address
# print(cell_to_del)
sht.range (cell_to_del).api.EntireRow.Delete ()
首先,代码中保留的字串定义缺少引号,应该写成:
exist_list = ["正常有效","标体通过","承保","人工核保","新增险种","自核通过"]
在循环删除单元格的代码段中,应该将两个if语句合并为一个,同时需要注意代码缩进的位置。完整的优化后代码如下:
import xlwings as xw
import time
from time import sleep
import os
app = xw.App(visible=True, add_book=False)
wb = app.books.open(r'E:/䐁蕳/营销渠道保单清单.xlsx')
time.sleep(10)
sht = wb.sheets['sheet1']
exist_list = ["正常有效", "标体通过", "承保", "人工核保", "新增险种", "自核通过"]
rows = sht.api.UsedRange.Rows.count
cols = sht.api.UsedRange.columns.count
rng = sht[0, :cols]
for cell in rng:
if cell.value == '保单状态':
print(cell.address)
a = cell.address
a_range = sht.range("AO2:AO" + str(rows))
cell_list = []
for cell in a_range:
cell_list.append(cell)
cell_list.reverse()
print("开始调整行和列……")
for cell in cell_list:
if cell.value: # 单元格不为空则开始比对
find_flag = 0 # 匹配标志
for exist_value in exist_list:
if exist_value in cell.value:
find_flag = 1 # 匹配则将标志置为1
break
if find_flag == 0: # 没匹配上的删除整行
cell_to_del = cell.address
sht.range(cell_to_del).api.EntireRow.Delete()
else: # 单元格为空直接删除
cell_to_del = cell.address
sht.range(cell_to_del).api.EntireRow.Delete()
wb.save()
wb.close()
app.quit()
此外,应该在代码结尾处加上保存和关闭工作簿以及退出应用程序的代码,如下所示:
wb.save()
wb.close()
app.quit()