我正在尝试将数据转换为PHP代码中的Excel格式,但在转换时它将数字(45785695224589456584598752)更改为4.57857E + 25格式。怎么避免这个?
答案 0 :(得分:1)
我遇到了同样的问题(转换为浮点数导致截断和舍入错误。)我使用fromArray()方法一次粘贴整个数据查询,因此使用其他地方建议的setValueExplicit()方法重构太多了。
我的解决方案是通过提供自定义值绑定器类来强制PHPExcel不转换任何内容。这对某些人来说可能很苛刻,所以你可以根据这个做一些其他事情(如果你需要布尔等等):https://fossies.org/dox/moodle-latest-29/DefaultValueBinder_8php_source.html
class CustomPHPExcelValueBinder extends PHPExcel_Cell_DefaultValueBinder
{
public function bindValue(PHPExcel_Cell $cell, $value = null)
{
// sanitize UTF-8 strings
if (is_string($value)) {
$value = PHPExcel_Shared_String::SanitizeUTF8($value);
}
// Set value explicit
$cell->setValueExplicit($value, static::dataTypeForValue($value));
// Done!
return true;
}
public static function dataTypeForValue($pValue = null)
{
return PHPExcel_Cell_DataType::TYPE_STRING;
}
}
我这样用:
$rows = $result->fetchAll(PDO::FETCH_NUM);
PHPExcel_Cell::setValueBinder(new CustomPHPExcelValueBinder());
$excelObj = PHPExcel_IOFactory::load(__DIR__ . self::TEMPLATE_FILE);
$excelObj->setActiveSheetIndex(0);
$excelObj->getActiveSheet()
->fromArray($rows, null, 'A2');