Python 2.7,openpyxl 2.4.x
我试图在Excel中读取一个日期值(" 05/01/2016")并且已应用自定义数字格式的单元格(" yyyymm")所以它显示为" 201605"。我想要最终得到的是应用自定义数字格式后的值(即用户在excel中看到的内容(" 201605"))。知道如何使用openpyxl做到这一点?
注意:我不能简单地将日期重新格式化为yyyymm,因为用户可能会更改自定义格式,我需要应用自定义格式后的最终结果。那么也许在openpyxl中可以在读取的单元格中应用自定义格式?
我意识到这与这篇文章(similar question)非常相似,但我并不确定如何在我的环境中应用它
提前感谢您的帮助。
答案 0 :(得分: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