将文本转换为phpexcel中的数字格式

时间:2014-11-07 21:19:50

标签: php phpexcel

我使用PHPExcel制作了这张表 我用数组填充它。

它具有百分比形式的值,默认情况下将其视为文本形式。 如何将我的所有列转换为数字形式,以便我可以在其上应用一些数学公式。

   $excel_out_Questions = $this->outputQuestions($Sets);

   $objPHPExcel->getActiveSheet()->fromArray($excel_out_Questions, "" , 'A5');

excel sheet after filling

我试过这个,但它不起作用......:/

  $objPHPExcel->getActiveSheet()->getStyle('B434:B444')->getNumberFormat()->setFormatCode (PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);

$objPHPExcel->getActiveSheet()->setCellValue( 'B445','=(SUM(B443:B444)-SUM(B434:B440))*100)');

请建议。

提前致谢

2 个答案:

答案 0 :(得分:6)

除非您使用setCellValueExplicit(),否则PHPExcel使用value binder来标识您在单元格中设置的数据类型。

默认情况下,这是PHPExcel_Cell_DefaultValueBinder,它可以非常简单地检查PHP数据类型是Null还是Boolean,还是数值或字符串。诸如37.7%之类的值是PHP字符串,因此将被视为字符串。

还有一个高级value binderPHPExcel_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