防止文本转换为数字? - 使用PHP代码的Excel

时间:2014-09-26 15:19:23

标签: php phpexcel

我正在尝试将数据转换为PHP代码中的Excel格式,但在转换时它将数字(45785695224589456584598752)更改为4.57857E + 25格式。怎么避免这个?

1 个答案:

答案 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');