日期的 PHPExcel 数字格式
PHPExcel number formats for dates
我有一个电子表格,当我在 excel 中打开时,有问题的单元格显示格式为日期 mm-dd-yyyy。
当我 运行 通过 php excel reader (xlsx 文件)时,它无法识别它是一个日期。
我在 ms open xml sdk 中打开文件,它显示在 numFmts
的样式中
numFmtId="102" formatCode="mm-dd-yyyy"
numFmtId="104" formatCode="mm-dd-yyyy"
numFmtId="106" formatCode="mm-dd-yyyy"
numFmtId="108" formatCode="mm-dd-yyyy"
numFmtId="110" formatCode="mm-dd-yyyy"
numFmtId="112" formatCode="mm-dd-yyyy"
numFmtId="114" formatCode="mm-dd-yyyy"
numFmtId="116" formatCode="mm-dd-yyyy"
numFmtId="118" formatCode="mm-dd-yyyy"
只有在我添加
后才会转换为日期
self::$_builtInFormats[102] = 'mm-dd-yyyy';
self::$_builtInFormats[104] = 'mm-dd-yyyy';
self::$_builtInFormats[106] = 'mm-dd-yyyy';
self::$_builtInFormats[108] = 'mm-dd-yyyy';
self::$_builtInFormats[110] = 'mm-dd-yyyy';
self::$_builtInFormats[112] = 'mm-dd-yyyy';
self::$_builtInFormats[114] = 'mm-dd-yyyy';
self::$_builtInFormats[116] = 'mm-dd-yyyy';
self::$_builtInFormats[118] = 'mm-dd-yyyy';
至NumberFormat.php。
应该是这样吗
MS Excel对"built-in"格式使用格式代码0到163,但是这个集合中有很多未使用的条目,格式代码102到118没有正式定义。 PHPExcel PHPExcel_Style_NumberFormat
class 中列为 built-in 的代码都是主要的 built-in,只是忽略了一些特殊的本地化格式 Chinese/Korean/Thai/Japanese本地化。
但是,此限制并不能阻止许多顽皮的自制 xlsx 作者使用 "reserved" ISO 规范中实际未定义的 id 值。
通常,这些值应该在 /xl/styles.xml
文件中的块中定义,如下所示:
<numFmts count="2">
<numFmt formatCode="mm-dd-yyyy" numFmtId="102"/>
<numFmt formatCode="mm-dd-yyyy" numFmtId="104"/>
...
</numFmts>
虽然 PHPExcel 的最新产品版本遵循 ISO 标准,并忽略任何低于 164 的值,除非它们在正式规范中明确定义(即仅使用 built-in 列表),在 1.8 分支中已对 "tolerate" 这种对标准的滥用进行了更改,并且代码将读取 user-defined 低于 164 的数字格式值,除非它们 over-ride标准中定义的值。
我有一个电子表格,当我在 excel 中打开时,有问题的单元格显示格式为日期 mm-dd-yyyy。
当我 运行 通过 php excel reader (xlsx 文件)时,它无法识别它是一个日期。
我在 ms open xml sdk 中打开文件,它显示在 numFmts
的样式中numFmtId="102" formatCode="mm-dd-yyyy"
numFmtId="104" formatCode="mm-dd-yyyy"
numFmtId="106" formatCode="mm-dd-yyyy"
numFmtId="108" formatCode="mm-dd-yyyy"
numFmtId="110" formatCode="mm-dd-yyyy"
numFmtId="112" formatCode="mm-dd-yyyy"
numFmtId="114" formatCode="mm-dd-yyyy"
numFmtId="116" formatCode="mm-dd-yyyy"
numFmtId="118" formatCode="mm-dd-yyyy"
只有在我添加
后才会转换为日期self::$_builtInFormats[102] = 'mm-dd-yyyy';
self::$_builtInFormats[104] = 'mm-dd-yyyy';
self::$_builtInFormats[106] = 'mm-dd-yyyy';
self::$_builtInFormats[108] = 'mm-dd-yyyy';
self::$_builtInFormats[110] = 'mm-dd-yyyy';
self::$_builtInFormats[112] = 'mm-dd-yyyy';
self::$_builtInFormats[114] = 'mm-dd-yyyy';
self::$_builtInFormats[116] = 'mm-dd-yyyy';
self::$_builtInFormats[118] = 'mm-dd-yyyy';
至NumberFormat.php。
应该是这样吗
MS Excel对"built-in"格式使用格式代码0到163,但是这个集合中有很多未使用的条目,格式代码102到118没有正式定义。 PHPExcel PHPExcel_Style_NumberFormat
class 中列为 built-in 的代码都是主要的 built-in,只是忽略了一些特殊的本地化格式 Chinese/Korean/Thai/Japanese本地化。
但是,此限制并不能阻止许多顽皮的自制 xlsx 作者使用 "reserved" ISO 规范中实际未定义的 id 值。
通常,这些值应该在 /xl/styles.xml
文件中的块中定义,如下所示:
<numFmts count="2">
<numFmt formatCode="mm-dd-yyyy" numFmtId="102"/>
<numFmt formatCode="mm-dd-yyyy" numFmtId="104"/>
...
</numFmts>
虽然 PHPExcel 的最新产品版本遵循 ISO 标准,并忽略任何低于 164 的值,除非它们在正式规范中明确定义(即仅使用 built-in 列表),在 1.8 分支中已对 "tolerate" 这种对标准的滥用进行了更改,并且代码将读取 user-defined 低于 164 的数字格式值,除非它们 over-ride标准中定义的值。