PHPExcel - 从数组上传时将单元格设置为字符串

PHPExcel - Set cells as string while uploading from Array

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

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

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

谢谢!

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

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

中定义

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

类似于:

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");