Форматирование столбца даты xlsx для разных культур/стран (Великобритания и США)

Боюсь, я не могу настроить идеальное воспроизведение, тем не менее, я надеюсь, что смогу получить некоторые подсказки.

Мой сервер приложений находится в Великобритании с настройками для Великобритании, а конечные пользователи, которым я хочу предоставить это улучшение, находятся в США с настройками для США.

Поэтому я пытаюсь облегчить преобразование типа даты, форматируя поле/столбец даты в Python следующим образом.

d.strftime('%m/%d/%Y')

Затем я пишу xlsx, используя формат

format3 = workbook.add_format({'num_format': 'mm/dd/yy'})
worksheet.write(row, col,  item[0], format3)

Когда я открываю xlsx и пытаюсь отфильтровать по дате, Excel неправильно распознает столбец как дату. Это проблема только для меня в Великобритании или также для моих пользователей в США?

Бонусный балл

Я видел ответ, теперь у меня более сложный вопрос. Допустим, я в Великобритании. Если я сохраню ячейку как дату в Excel, когда мои пользователи откроют ее в США, они увидят cel в своем локализованном формате.

Как я могу добиться этого в python xlsx?

Это то, что я пробовал

import xlsxwriter
from datetime import date
mydate = date(2021,12,29)
path = 'C:\\my\\path\\test.xlsx'
wb = xlsxwriter.Workbook(path)
format = wb.add_format({'num_format': 'dd/mm/yyyy'})
ws = wb.add_worksheet('mydates')
ws.write(0,0,'date')
ws.write(1,0,mydate, format)
wb.close()

Когда я открываю его в Excel, он говорит, что это дата, а не настроенная.

Но когда я запускаю из cmd control international и выбираю другой языковой формат (скажем, я переключаюсь с Великобритании на США) и снова открываю xlsx, формат даты не трансформируется


person Giulio    schedule 06.05.2021    source источник


Ответы (1)


Я пытаюсь облегчить преобразование типа даты

Нельзя просто пытаться облегчить преобразование типа даты, передав таким образом строку. Формат визуализации ячейки полностью не связан с значением содержимого ячейки, поэтому оставьте свой код (о визуализации формата) с workbook.add_format и worksheet.write

format3 = workbook.add_format({'num_format': 'mm/dd/yy'})
worksheet.write(row, col,  item[0], format3)

но удалите это глупое форматирование строки (в значении содержимого):

d # .strftime('%m/%d/%Y')

Он просто работает из коробки в xlsxwriter с собственными типами дат Python и Excel.

Бонусный балл

Существует волшебный трюк, чтобы получить бонусное очко. Вы должны использовать стандартный формат даты Excel: это число 14, E в шестнадцатеричном формате.

format = wb.add_format()
format.set_num_format(0x0E)

Сделанный!

person Giulio    schedule 06.05.2021