Я пытаюсь преобразовать данные БД в формат Excel в коде PHP, но при преобразовании это изменение числа (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');
Других решений пока нет …