Openpyxl перебирает ячейки, не может сравнивать ячейки со строкой
У меня возникли проблемы с итерацией по каждой ячейке в рабочей книге и сравнением значения вызова со строковым объектом. Я могу успешно сравнить объекты datetime в книге, но когда дело доходит до обычных объектов String, ничего не печатается, а ячейки не обновляются.
wb = openpyxl.load_workbook(pathz, read_only=False)
ws = wb.active
for row in ws.iter_rows():
for cell in row:
if cell.value == a:
print("Found datetime cell")
cell.value = newDate
if cell.value == "Hello":
print("Found string cell")
cell.value = "Goodbye"
wb.save(pathz)
1 ответ
Решение
Вы должны быть в состоянии читать и записывать даты и строки в файл в формате Excel без проблем. Код ниже показывает, как это работает для обоих типов содержимого ячеек.
Строка, которую пытался сопоставить ОП, содержала символ дефиса в Юникоде. '\u2013'
, который не совпадает с ASCII '-'
символ, поэтому строки не совпадают. Строки в приведенном ниже примере используют этот символ черты Unicode.
# -*- coding: utf-8 -*-
import openpyxl
import datetime
#create a workbook containing a string and save it
wb = openpyxl.Workbook()
ws = wb.active
ws['A1'] = datetime.datetime(2017, 4, 1)
ws['A2'] = '4/1/2017–4/30/2017' # The dash between the dates is '\u2013'
wb.save('Test.xlsx')
#open that workbook and read it
wb = openpyxl.load_workbook('Test.xlsx', read_only=False)
ws = wb.active
for row in ws.iter_rows():
for cell in row:
print('Cell: [{}] is type({}): "{}"'.format(cell.coordinate, type(cell.value).__name__, cell.value))
if cell.value == '4/1/2017–4/30/2017':
print('Found "4/1/2017–4/30/2017"')
Запуск этого на Python 3.6 приводит к следующему выводу:
Cell: [A1] is type(datetime): "2017-04-01 00:00:00"
Cell: [A2] is type(str): "4/1/2017–4/30/2017"
Found "4/1/2017–4/30/2017"