使用for循环和if语句将公式写入excel列

ajsxfq5m  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(134)

我打算使用Python编写Excel公式到一个特定的列'M'。但我想跳过/忽略如果另一个列名“状态”包含关闭的话。我对所有其他工作的方法都是开放的。
我的代码:

for row in range(len(df["Status"])):
        for x in range(len(df["Status"])):
            if str(df["Status"]) == "Closed":
                break   
        
        else:
            dateFmt = workbook.add_format({'num_format': 'dd mmm yyyy'})
            formula1 = f'=IF(M{row}="Pending", N{row}-D{row}, IF(M{row}="Closed", VALUE(L{row}), IF(M{row}="Select...", "NA")))'
            formula2 = f'=IF(M{row}="Closed", VALUE(N{row}), IF(M{row}="Pending", TODAY()))'
            worksheet.write_formula(f'N{row}', formula2, dateFmt)
            worksheet.write_formula(f'L{row}', formula1)

我期望它是这样的:expected output with formula applied by python
但我的密码给予我:not the outcome i wanted

其他详细信息我想使用Python查看Excel数据中的整个列M“状态”。如果列M包含单词“已关闭”,则跳过该行,不执行任何操作。如果包含单词“待定”,则在另一列L和列N中输入公式。

我的代码没有跳过包含Closed这个词的行,并将数据值重置为零,日期为1900年(见图),我的标题变为FALSE。然而,它对包含Pending这个词的行工作得很完美(见图)。

h79rfbju

h79rfbju1#

我无法验证您的Excel公式,但是,这是我将应用到您的代码的逻辑。

  • 仅将公式写入包含待定状态的行
  • 当状态为已关闭时忽略行
for row, status in enumerate(df.Status):
    if status == "Pending":
        dateFmt = workbook.add_format({'num_format': 'dd mmm yyyy'})
        formula1 = f'=IF(M{row}="Pending", N{row}-D{row}, IF(M{row}="Closed", VALUE(L{row}), IF(M{row}="Select...", "NA")))'
        formula2 = f'=IF(M{row}="Closed", VALUE(N{row}), IF(M{row}="Pending", TODAY()))'
        worksheet.write_formula(f'N{row}', formula2, dateFmt)
        worksheet.write_formula(f'L{row}', formula1)

相关问题