2017-02-01 9 views
-2

Python 2.7, openpyxl 2.4.xЧтение значения ячейки с использованием формата номера openpyxl? - перевождь

Я пытаюсь прочитать ячейку, которая является значением даты («05/01/2016») в Excel и имеет пользовательское форматирование чисел применяется («YYYYMM») поэтому он отображается как «201605». То, что я хочу получить, - это значение после применения форматирования пользовательского номера (то есть то, что пользователь видит в excel («201605»)). Любая идея, как это сделать, используя openpyxl?

Примечание: Я не могу просто просто взять дату и переформатировать ее в yyyymm, так как пользователь может изменить собственное форматирование, и мне нужен какой бы то ни было конечный результат после применения настраиваемого формата. Так что, возможно, есть способ в openpyxl применить пользовательское форматирование в ячейках, которые читаются?

Я понимаю, что это очень похоже на этот пост (similar question), но я не был уверен, как применять его в моем обстоятельстве

Заранее спасибо за помощь.

+0

Я вижу пару downvotes, но не комментирует почему. Пожалуйста, дайте мне знать, чтобы я мог исправить все, что вызвало это. Спасибо. – Sharkbite

ответ

0

Это не реализовано. Что вы ищете - cell.number_format. Попробуйте следующее:

def pyDateFormat(nf): 
    import re 
    """Convert xlsx cell.number_format to Python date Format.""" 
    #xlsx Format = 'YYYYMMDD', 'YYYY\\-MM\\-DD' 
    #Python Format = '%Y%m%d' 
    nf = re.sub(r'\\',r'',nf,0,re.IGNORECASE) #Remove Escapes 
    nf = re.sub(r'([^Y]*)(Y+)(.*)',r'\1%Y\3',nf,0,re.IGNORECASE) #Change YYYY to %Y 
    nf = re.sub(r'([^M]*)(M+)(.*)',r'\1%m\3',nf,0,re.IGNORECASE) #Change MM to %m 
    nf = re.sub(r'([^D]*)(D+)(.*)',r'\1%d\3',nf,0,re.IGNORECASE) #Change DD to %d 
    return nf 
#end def pyDateFormat 

На нужном вам месте в отформатированный cell.value сделать:

cell = wb.ws['A1'] 
    if cell.is_date: 
    value = cell.value.date().__format__(pyDateFormat(cell.number_format)) 

Испытано с Python: 3.4.2 - openpyxl: 2.4.1 - LibreOffice: 4,3 .3.2