$objPHPExcel->getActiveSheet()->fromArray($dataArray,null,"A2")
我有上面的代码行。问题是,我不擅长迭代,我希望将所有单元格值设置为 STRING 以避免自动修改前导零的文本。
PS 此外,将不胜感激为选择性列设置为 STRING 的代码。
谢谢!
$objPHPExcel->getActiveSheet()->fromArray($dataArray,null,"A2")
我有上面的代码行。问题是,我不擅长迭代,我希望将所有单元格值设置为 STRING 以避免自动修改前导零的文本。
PS 此外,将不胜感激为选择性列设置为 STRING 的代码。
谢谢!
当您单独设置单元格值时,您可以选择显式设置数据类型,但是当您使用该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");