替代" PHPExcel_Cell_DataType :: TYPE_STRING"在循环中

时间:2018-04-30 12:33:56

标签: php phpexcel custom-data-type phpexcel-1.8.0

我正在使用auto p = new (a) A; *p = b; // ok 创建Excel工作表。由于我们需要良好的优化,因此我避免了最大化的循环。但我不能再优化以下代码了。

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来实现。

有更好的方法吗(我可以提供一些自定义格式吗?)? datatype的固定长度为5.但pin的长度可以不同。

1 个答案:

答案 0 :(得分: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')))));