2017-02-01 127 views
-2

的Python 2.7,openpyxl 2.4.x的使用数字格式openpyxl读取单元格值? - 终极版

我试图读取小区是在Excel中的日期值(“2016年5月1日”),并具有格式应用自定义数字(“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