#python #excel #openpyxl
#python #excel #openpyxl
Вопрос:
это очень уникальная проблема, поэтому я надеюсь, что некоторые из вас смогут мне помочь с этим!
Итак, это проблема из нескольких частей, первая проблема заключается в том, что исходный код, который обрабатывает мои манипуляции с Excel, неправильно форматирует некоторые столбцы как столбец даты, это не то, что я пытаюсь здесь решить, но это может быть важно для предыстории. Похоже, что столбцы форматируются для времени эпохи, поэтому число 1 в столбце будет отображаться как 1900 или около того. Ради остальной части этого вопроса давайте предположим, что этот неправильный формат даты в порядке и что я просто вручную изменю формат в Excel позже.
Моя более заметная проблема возникает следующим образом; openpyxl (или мои ошибки в коде), похоже, устанавливает ячейки, содержащие номер 1, на -5. Это похоже на изображение ниже, все ячейки ХЭШТЕГА должны содержать «1» внутри.
Все, что отформатировано как дата, полностью исправно и изменится на их фактическое число, как только я изменю формат столбца на число. Ячейки с хэштегами изменятся на -5 или некоторое отрицательное число следующим образом;
Я попытался перебрать все ячейки вручную и исправить это с помощью следующего кода;
import datetime
from openpyxl import load_workbook, worksheet
date_string = datetime.date.today().strftime("%Y%B%d")
name_string = 'REDACTED'
wb = load_workbook(filename = name_string)
ws = wb.get_sheet_by_name(name = 'vInfo')
for row in ws.iter_rows():
for cell in row:
if (str(cell.value) == "-5"): # Or whatever the number was displaying on the sheet at the t ime)
print(cell.value)
cell.number_format = '0'
cell.value = int(1)
wb.save(name_string)
print("saved at " name_string)
Когда я запускал это, изменений не было, похоже, что cell.value на САМОМ деле не является отрицательным числом и, похоже, является какой-то ошибкой? Кроме того, каждый раз, когда сохраняется рабочая книга, отрицательное число уменьшается на единицу.
Я не могу предоставить исходный код, который генерирует файл Excel (в соответствии с NDA), но я надеюсь, что я объяснил достаточно, чтобы вы имели представление о том, с чем я столкнулся!
Я в полной растерянности, и я действительно надеюсь, что кто-нибудь сможет указать, что не так, и я большое вам спасибо за ваше время!
Комментарии:
1. вы можете просто щелкнуть перенос текста в ########### клетка, чтобы увидеть, что на самом деле внутри
2. Это давняя ошибка в Excel: он может отображать даты до 1900 года. Это всего лишь одна из многих причин, по которой на Excel не следует полагаться для обработки времени.
3. @VigneshRajendran Я это сделал, и, похоже, он показывает отрицательное число, которое увеличивается при каждом сохранении рабочей книги.
4. @CharlieClark Есть ли какой-нибудь способ программно предотвратить это?
5. Исправлена ошибка в Excel? Это зависит от программистов в Microsoft.
Ответ №1:
Microsoft Excel сообщает, что «Отрицательные или слишком большие даты будут отображаться как #########»
Например, я ввел отрицательное число -2 в ячейку
вы можете изменить формат ячейки на текст, чтобы показать отрицательное число.
from openpyxl.styles import numbers
cell.number_format = numbers.FORMAT_TEXT
или для вашего кода
cell.number_format = '@'
cell.value = "1"