Альтернатива для "PHPExcel_Cell_DataType :: TYPE_STRING" в цикле - PullRequest
0 голосов
/ 30 апреля 2018

Я создаю лист 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 может быть различной длины.

1 Ответ

0 голосов
/ 30 апреля 2018

Не 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')))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...