我使用PHPExcel制作了这张表 我用数组填充它。
它具有百分比形式的值,默认情况下将其视为文本形式。 如何将我的所有列转换为数字形式,以便我可以在其上应用一些数学公式。
$excel_out_Questions = $this->outputQuestions($Sets);
$objPHPExcel->getActiveSheet()->fromArray($excel_out_Questions, "" , 'A5');
我试过这个,但它不起作用......:/
$objPHPExcel->getActiveSheet()->getStyle('B434:B444')->getNumberFormat()->setFormatCode (PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);
$objPHPExcel->getActiveSheet()->setCellValue( 'B445','=(SUM(B443:B444)-SUM(B434:B440))*100)');
请建议。
提前致谢
答案 0 :(得分:6)
除非您使用setCellValueExplicit()
,否则PHPExcel使用value binder
来标识您在单元格中设置的数据类型。
默认情况下,这是PHPExcel_Cell_DefaultValueBinder
,它可以非常简单地检查PHP数据类型是Null还是Boolean,还是数值或字符串。诸如37.7%
之类的值是PHP字符串,因此将被视为字符串。
还有一个高级value binder
(PHPExcel_Cell_AdvancedValueBinder
)可以执行更复杂的检查,并且能够识别包含基本日期格式的字符串并将它们转换为Excel序列化日期时间,并设置数字格式掩码。它还可以检测货币值,分数和(最重要的)百分比。
如果通过高级值活页夹传递类似37.7%
的字符串值,它将数字部分除以100,并将数字格式掩码设置为百分比掩码,与MS Excel完全相同GUI。
要启用高级值活页夹,请调用
PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
在实例化PHPExcel对象之前。
您可以在/Examples/29advancedvaluebinder.php
答案 1 :(得分:0)
尝试一下
$excel_date = 43010; //here is that value 41621 or 41631
$unix_date = ($excel_date - 25569) * 86400;
$excel_date = 25569 + ($unix_date / 86400);
$unix_date = ($excel_date - 25569) * 86400;
echo gmdate("Y-m-d", $unix_date);
// output: 2017-10-02