What indicates an Office Open XML Cell contains a Date/Time value?

前端 未结 6 2012
-上瘾入骨i
-上瘾入骨i 2020-11-27 13:26

I\'m reading an .xlsx file using the Office Open XML SDK and am confused about reading Date/Time values. One of my spreadsheets has this markup (generated by Excel 2010)

6条回答
  •  温柔的废话
    2020-11-27 14:00

    The s attribute references a style xf entry in styles.xml. The style xf in turn references a number format mask. To identify a cell that contains a date, you need to perform the style xf -> numberformat lookup, then identify whether that numberformat mask is a date/time numberformat mask (rather than, for example, a percentage or an accounting numberformat mask).

    The style.xml file has elements like:

    
    
    

    These are the xf entries, which in turn give you a numFmtId that references the number format mask.

    You should find the numFmts section somewhere near the top of style.xml, as part of the styleSheet element

     
        
            
                 
                 
                 
            
    

    The number format id may be here, or it may be one of the built-in formats. Number format codes (numFmtId) less than 164 are "built-in".

    The list that I have is incomplete:

    0 = 'General';
    1 = '0';
    2 = '0.00';
    3 = '#,##0';
    4 = '#,##0.00';
    
    9 = '0%';
    10 = '0.00%';
    11 = '0.00E+00';
    12 = '# ?/?';
    13 = '# ??/??';
    14 = 'mm-dd-yy';
    15 = 'd-mmm-yy';
    16 = 'd-mmm';
    17 = 'mmm-yy';
    18 = 'h:mm AM/PM';
    19 = 'h:mm:ss AM/PM';
    20 = 'h:mm';
    21 = 'h:mm:ss';
    22 = 'm/d/yy h:mm';
    
    37 = '#,##0 ;(#,##0)';
    38 = '#,##0 ;[Red](#,##0)';
    39 = '#,##0.00;(#,##0.00)';
    40 = '#,##0.00;[Red](#,##0.00)';
    
    44 = '_("$"* #,##0.00_);_("$"* \(#,##0.00\);_("$"* "-"??_);_(@_)';
    45 = 'mm:ss';
    46 = '[h]:mm:ss';
    47 = 'mmss.0';
    48 = '##0.0E+0';
    49 = '@';
    
    27 = '[$-404]e/m/d';
    30 = 'm/d/yy';
    36 = '[$-404]e/m/d';
    50 = '[$-404]e/m/d';
    57 = '[$-404]e/m/d';
    
    59 = 't0';
    60 = 't0.00';
    61 = 't#,##0';
    62 = 't#,##0.00';
    67 = 't0%';
    68 = 't0.00%';
    69 = 't# ?/?';
    70 = 't# ??/??';
    

    The missing values are mainly related to east asian variant formats.

提交回复
热议问题