【发布时间】:2016-10-05 18:00:42
【问题描述】:
我必须从第三方 XML 文件中提取数据。 对于一列包含逗号千位分隔符和点小数分隔符的数字,一切都很好。
在 Excel 或 OpenOffice 中通常表示为“10,000.00”的数字,PHPExcel 仅将其读取为“10”。
require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
$inputFileName = "myfile.xml";
/** Identify the type of $inputFileName **/
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
/** Create a new Reader of the type that has been identified **/
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
/** Load $inputFileName to a PHPExcel Object **/
$objPHPExcel = $objReader->load($inputFileName);
$format = $objPHPExcel->getActiveSheet()->getStyle('C24')->getNumberFormat()->getFormatCode();
注意单元格的格式代码返回为General
尝试读取导致问题的单元格之一:
$getValue = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(2, 24)->getValue();
$getCalculatedValue = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(2, 24)->getCalculatedValue();
$getFormattedValue = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(2, 24)->getFormattedValue();
总是相同的值,在千位分隔符处截断:“10”而不是“10,000.00”
这里是xml文件的详细信息:
`<?xml version="1.0" encoding="UTF-8"?>
<?mso-application progid="Excel.Sheet"?>
<ss:Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ext="http://fxcm.com/xslt/extension" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:of="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:html="http://www.w3.org/TR/REC-html40">`
风格定义
`<ss:Style ss:ID="cell_merged_top_odd_integer" ss:Parent="cell_merged_top_odd">
<ss:NumberFormat ss:Format="#,##0"/>
</ss:Style>`
编号导致问题的单元格
`<ss:Cell ss:StyleID="cell_merged_top_odd_integer" ss:Index="3">
<ss:Data ss:Type="Number">10,000.00</ss:Data>
</ss:Cell>`
手动解决问题的方法 当我从 OpenOffice 或 Excel 中保存文件时,弹出以下消息warning message OpenOffice,PHPExcel 最终按预期工作,显示为“10000”。
我不能让第三方更改其 XML 文件,也不能要求用户在将文件上传到我的网站之前重新保存文件。
你知道这里可能出现什么问题吗?
【问题讨论】:
标签: xml numbers format phpexcel