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


Prevent Conversion Of Text To Number? - Excel using PHP code

我正在尝试用PHP代码将DB数据转换为excel格式,但在转换过程中,它将数字(45785695224589456584598752)更改为4.57857E+25格式。如何避免这种情况?

我也遇到了同样的问题(转换为浮点数会导致截断和舍入错误。)我使用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');