Альтернатива для & quot; PHPExcel_Cell_DataType :: TYPE_STRING & quot; в цикле

Я создаю лист 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 для каждой клетки.

Есть лучший способ сделать это(Могу ли я дать немного пользовательского форматирования?)? pin фиксированная длина 5. Но microchip можно варьировать по длине.

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')))));
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]