红星闪闪的M 2021-03-23 15:53 采纳率: 57.1%
浏览 47

请大神指点,小白跪谢

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 ()
  • 写回答

1条回答 默认 最新

  • 关注

    首先,代码中保留的字串定义缺少引号,应该写成:

    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()
    
    评论

报告相同问题?

悬赏问题

  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 有人知道怎么在R语言里下载Git上的miceco这个包吗
  • ¥15 GPT写作提示指令词
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥20 关于DAC输出1.000V对分辨率和精度的要求
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题
  • ¥15 哪位能做百度地图导航触点播报?