PHPExcel fromArrayで値を設定すると頭の0が消える

ショコラ
ショコラ

PHPExcel fromArrayで値を設定すると頭の0が消える

https://github.com/PHPOffice/PHPExcel/blob/develop/Documentation/markdown/Overview/07-Accessing-Cells.md#using-value-binders-to-facilitate-data-entry
辺りの話題のようですが、
fromArray で設定すると、
PHPExcel はデフォルトの PHPExcel_Cell_DefaultValueBinder を使うようなので、
これを置き換えてしまいます。
これで、fromArray で読み込んだものが全て文字列として読み込めます。

もっさん先輩
もっさん先輩
class PHPExcel_Cell_StringValueBinder extends PHPExcel_Cell_DefaultValueBinder implements PHPExcel_Cell_IValueBinder
{
  public function bindValue(PHPExcel_Cell $cell, $value = null)
  {
    // sanitize UTF-8 strings
    if (is_string($value)) {
      $value = PHPExcel_Shared_String::SanitizeUTF8($value);
    }

    $value = PHPExcel_Shared_String::SanitizeUTF8($value);
    $cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING);
    // Set style
    $cell->getWorksheet()->getStyle( $cell->getCoordinate() )
      ->getAlignment()->setWrapText(TRUE);
    return true;
  }
}
$val = array(
  array('mossan','001'),
  array('chocolate','002'),
);

PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_StringValueBinder );
$book = new PHPExcel();
$book->getActiveSheet()->fromArray($val,null,'A1',true);
$writer = PHPExcel_IOFactory::createWriter($book,'Excel2007');
$writer->save('out.xlsx');

デフォルトに戻すときはコチラを実行します。

PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_DefaultValueBinder );

以上

関連記事

Scroll to Top