首页 > 解决方案 > python和openpyxl:如何替换excel表上新出现的日期?

问题描述

我有一个包含两列(A和B)数据的excel表,如下所示:

一个 (供参考)
苹果 (“情侣 1”)
番茄 萝卜 (“情侣 2”)
香蕉 猕猴桃 (“情侣 3”)
苹果 (“情侣1”新出现)
番茄 萝卜 (《情侣2》新登场)
沙拉 茄子 (“情侣 4”)

我想用à 0(零)替换同一“夫妇”的每一个新出现,就像这样:

一个 (供参考)
苹果 (“情侣 1”)
番茄 萝卜 (“情侣 2”)
香蕉 猕猴桃 (“情侣 3”)
0 0
0 0
沙拉 茄子 (“情侣 4”)

我教过这样一个简单的代码就可以了:


import openpyxl
from openpyxl import *
import numpy
from numpy import *

wb = load_workbook("Desktop/programme/wb.xlsx")

ws = wb["Sheet"]

stop_row = ws.max_row + 1

for n1 in range(1,stop_row) :

    for n2 in range(2,stop_row) :

        item_a = ws.cell(row=n1, column=1).value
        item_b = ws.cell(row=n1, column=2).value

        item_1 = ws.cell(row=n2, column=1).value
        item_2 = ws.cell(row=n2, column=2).value

        if (item_a == item_1 and item_b == item_2) or (item_a == item_2 and item_b == item_1) :

            ws.cell(row=n2, column=1).value = 0
            ws.cell(row=n2, column=2).value = 0

但我得到的是:

一个 (供参考)
苹果 (“情侣 1”)
0 0 (“情侣 2”)
0 0 (“情侣 3”)
0 0 (“情侣1”新出现)
0 0 (《情侣2》新登场)
0 0 (“情侣 4”)

知道为什么吗?

谢谢

标签: pythonexcel

解决方案


第一次迭代,n1 = 1 和 n2 = 1。值item_1item_a将与该设置相同,因为它们指向同一个单元格。与item_2和相同item_b。也许你的第二个循环应该是range(n1 + 1, stop_row)?如果 n1 + 1 大于 stop_row,请不要担心;它只是不会计算任何东西,而不是循环。

另外,请注意,如果这样做,则必须从 0 开始 n1,否则将永远不会考虑第一行。


推荐阅读