Найти и заменить текст в файле xlsx на python openpyxl в любой ячейке внутри листа - PullRequest
0 голосов
/ 25 марта 2020

В настоящее время мне нужно заменить текст: «привет» на «привет», где бы он ни появлялся в файлах (файлах) xlsx [подумайте, найдите и замените].

После логи c из Найти и заменить в ячейках из Excel в python, я вижу, что могу успешно открыть исходный файл xlsx, а затем, наконец, сохранить в новый файл xlsx, однако мой текст никогда не будет заменен.

Примечание. Мой текст может появляться в начале, середине или конце строки, и ячейка, в которой он появляется, может варьироваться от одного файла xlsx к следующему.

Вот мой код в настоящее время:

wb = openpyxl.load_workbook(sourcefile.xlsx')
            wb.sheetnames
            sheet = wb["sheet1"]
            amountOfRows = sheet.max_row
            amountOfColumns = sheet.max_column

            for i in range(amountOfColumns):
                for k in range(amountOfRows):
                    cell = str(sheet[get_column_letter(i+1)+str(k+1)].value)
                    if( str(cell[0]) == "hello"):
                        newCell = "hi"+cell[1:]
                        sheet[get_column_letter(i+1)+str(k+1)]=newCell

            wb.save('targetFile.xlsx')

Есть идеи, где я все испортил? Любое руководство будет с благодарностью!

1 Ответ

1 голос
/ 25 марта 2020

Используйте in ключевое слово и метод замены

import openpyxl

wb = openpyxl.load_workbook("sourcefile.xlsx")
ws = wb["sheet1"]

i = 0
for r in range(1,ws.max_row+1):
    for c in range(1,ws.max_column+1):
        s = ws.cell(r,c).value
        if s != None and "hello" in s: 
            ws.cell(r,c).value = s.replace("hello","hi") 

            print("row {} col {} : {}".format(r,c,s))
            i += 1

wb.save('targetfile.xlsx')
print("{} cells updated".format(i))

Если вы хотите поиск / замена без учета регистра или более сложное сопоставление, вы можете использовать регулярное выражение , Добавьте import #re и используйте

if s != None and re.search('hello',s,flags=re.I): 
    ws.cell(r,c).value = re.sub('hello',"Hi",s,flags=re.I)
...