1

我正在使用PHPExcel. 由于我们需要良好的优化,我尽量避免循环。但是我无法再优化下面的代码了。

$activeSheet->fromArray($excel_rows, null, 'A1');
$activeSheet->getStyle('A2:K'.$index)->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_TEXT );
$activeSheet->getStyle('L2:L'.$index)->getNumberFormat()->setFormatCode( '@' );
$activeSheet->getStyle('U2:W'.$index)->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_TEXT );
$in = 2;
foreach($micr_pin as $value){
    $activeSheet->getCell('H' . $in)->setValueExplicit($value['pin'], PHPExcel_Cell_DataType::TYPE_STRING);
    $activeSheet->getCell('M' . $in)->setValueExplicit($value['microchip'], PHPExcel_Cell_DataType::TYPE_STRING);
    $in++;
}

这里 和 的值pin可以microchip包含前面的零。所以我需要将它们保存在excel中。到目前为止,我可以通过将它们添加到循环中并datatype为每个单元格提供来做到这一点。

有没有更好的方法来做到这一点(我可以提供一些自定义格式吗?)?是pin固定长度 5。但长度microchip可以变化。

4

1 回答 1

0

现在不是 100% 的后期编辑,所以请让我知道它是否有效。您应该能够使用 setFormatCode 来保留一些数据上下文,然后按范围设置样式:

$pins_length = count($micr_pin);

// For pin, as we know it's 5 characters already, we can just explicity set that to 5

$activeSheet->getStyle('H1:H' . $pins_length)
    ->getNumberFormat()
    ->setFormatCode('00000');

// For microchip we need to introduce a bit of variability

$activeSheet->getStyle('M1:M' . $pins_length)
    ->getNumberFormat()
    ->setFormatCode(str_repeat('0', max(array_map('strlen', array_column($micr_pin, 'microchip')))));
于 2018-04-30T12:43:11.950 回答