PHP Заполнение данных электронной таблицы не будет проходить через столбец "Z" - PullRequest
1 голос
/ 08 апреля 2020

Я использую файл PHPSpreadsheet create and excel Когда я заполняю свои данные, он не будет проходить через столбец «Z», тогда как для этого запроса мои данные фактически имеют столбец 81.

Data population stops at column Z

Ниже мой код:

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->getDefaultColumnDimension()->setWidth(19);
$sheet->getStyle('A:ZZ')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT);
$sheet->getStyle('A:ZZ')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
// $sheet->getStyle('A:U')->getAlignment()->setWrapText(true);
$sheet->getStyle('A1:ZZ1')->applyFromArray($headerStyleArray);
$sheet->getStyle('A:ZZ')->applyFromArray($fontArray);

// SET EXCEL HEADER &COLUMN WIDTH TO AUTOSIZE
$i=0;
foreach (range('A', $spreadsheet->getActiveSheet()->getHighestDataColumn()) as $col) {
        $spreadsheet->getActiveSheet()
                    ->getColumnDimension($col)
                    ->setAutoSize(true);
        $sheet->getCell($col.'1')->setValue($header[$i]);
        if($i >= count($header)-1) {
            break;
        }
        $i++;
} 
// SET EXCEL CELL DATA
$rowNumber = 2;
foreach($rows as $row) {
    $i = 0;
    foreach (range('A', $spreadsheet->getActiveSheet()->getHighestDataColumn()) as $char) {

        return response()->json($char.$rowNumber);
        if($i <= count($row)-1) {
            $sheet->getCell($char.$rowNumber)->setValue($row[$i]);
        }
        $i++;
    }
    $rowNumber++;
}

$writer = new Xlsx($spreadsheet);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'. $request->group_name. ' Member Attendance Report.xlsx"');
header('Cache-Control: max-age=0');

$writer->save('php://output');
return;

Любая помощь очень ценится благодаря

1 Ответ

2 голосов
/ 08 апреля 2020

Измените

foreach (range('A', $spreadsheet->getActiveSheet()->getHighestDataColumn()) as $col) {

} 

на

$max_column = $spreadsheet->getActiveSheet()->getHighestDataColumn();
for($column = 'A'; !isBiggerExcelColumn($column,$max_column); ++$column){
    // rest of your code
}


function isBiggerExcelColumn($current_column,$max_column){
    if(strlen($current_column) < strlen($max_column)) return false;
    return strlen($current_column) > strlen($max_column) || strcmp($current_column,$max_column) > 0;
}

. Выше мы используем от ++$column до go для следующего столбца Excel, который PHP предусматривает приращение над струнами. В isBiggerExcelColumn() мы проводим сравнение строк, используя strcmp и другие проверки длины, чтобы определить, больше ли текущий столбец, чем максимальный. Если да, остановите l oop, иначе продолжайте;

...