无法将替换的字符串保存到工作簿中

时间:2019-09-19 12:49:39

标签: python openpyxl

在工作簿中替换字符串之后。替换的字符串未反映在工作簿中。

import os, sys, re
from re import *
from openpyxl import *

f='C:/Python3/CODES/output.xlsx'
wb = load_workbook(f)

for sheet in wb:
    #print ("\n")
    print ("checking sheet:", sheet)

    for row in sheet.iter_rows(min_row=0,max_row=2):
            for col in sheet.iter_cols(min_col=0,max_col=1):
                for cell in row:
                    cv=cell.value
                    str_input1 = r"Safety"
                    re.search(str_input1 ,str(cv))
                    rep = str(cv).replace("Safety","1pc")

                    wb.save('C:/Python3/CODES/output10.xlsx')   

无错误信息。 “ rep”包含我想要的确切值。

1 个答案:

答案 0 :(得分:0)

现在,您要做的就是将单元格内容读入一个变量,然后更改该变量。 cv不是对该单元格的引用,您正在创建一个新字符串。

代码中的最后一个for循环应读取如下内容:

for cell in row:
    cv=cell.value
    str_input1 = r"Safety"
    re.search(str_input1 ,str(cv))
    rep = str(cv).replace("Safety","1pc")
    cell.value = rep # Add this line

...
# This should not be in your loop
wb.save('C:/Python3/CODES/output10.xlsx')

值得注意的另一件事是您的re.search没有做任何事情。它所做的只是返回一个match对象,您甚至都没有检查它的结果。如果要有条件地将“安全”替换为“ 1pc”,则只需删除以下两行:

str_input1 = r"Safety"
re.search(str_input1 ,str(cv))

编辑:正如评论中所指出的,我已经将wb.save从for循环中移出了。您只应在进行所有更改后保存它,而不是每次更改单元格时都保存。