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