0
$objPHPExcel->getActiveSheet()->fromArray($dataArray,null,"A2")

我有上面的代码行。问题是,我不擅长迭代,我希望将所有单元格值设置为 STRING 以避免自动修改前导零的文本。

PS 此外,将不胜感激为选择性列设置为 STRING 的代码。

谢谢!

4

1 回答 1

3

当您单独设置单元格值时,您可以选择显式设置数据类型,但是当您使用该fromArray()方法时,您没有此选项。

但是,默认情况下,PHP 使用默认值绑定器从传递的值中识别数据类型,并相应地设置单元格数据类型。这个默认行为是在一个类中定义的/PHPExcel/Cell/DefaultValueBinder.php

因此,您可以创建自己的值绑定器,如PHPExcel 文档中所述,它将每个值设置为字符串数据类型。

就像是:

class PHPExcel_Cell_MyColumnValueBinder extends PHPExcel_Cell_DefaultValueBinder implements PHPExcel_Cell_IValueBinder
{
    protected $stringColumns = [];

    public function __construct(array $stringColumnList = []) {
        // Accept a list of columns that will always be set as strings
        $this->stringColumns = $stringColumnList;
    }

    public function bindValue(PHPExcel_Cell $cell, $value = null)
    {
        // If the cell is one of our columns to set as a string...
        if (in_array($cell->getColumn(), $this->stringColumns)) {
            // ... then we cast it to a string and explicitly set it as a string
            $cell->setValueExplicit((string) $value, PHPExcel_Cell_DataType::TYPE_STRING);
            return true;
        }
        // Otherwise, use the default behaviour
        return parent::bindValue($cell, $value);
    }
}

// Instantiate our custom binder, with a list of columns, and tell PHPExcel to use it
PHPExcel_Cell::setValueBinder(new PHPExcel_Cell_MyColumnValueBinder(['A', 'B', 'C', 'E', 'F']));

$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->fromArray($dataArray,null,"A2");
于 2015-11-13T16:34:36.363 回答