user_id; header('Content-Type: application/json'); $user_id = (int)($_SESSION['id']); $date = date('d.m.Y'); require_once($_SERVER['DOCUMENT_ROOT'].'/vendor/autoload.php'); use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; $spreadsheet = new Spreadsheet(); $name = 'raport_'.$date.'.xlsx'; $name_file = $_SERVER['DOCUMENT_ROOT'].'/server/excel/'.$user_id.'/raport_'.$date.'.xlsx'; $name_file_json = $_SERVER['DOCUMENT_ROOT'].'/server/excel/'.$user_id.'/raport_'.$date.'.json'; $name_file_main_json = $_SERVER['DOCUMENT_ROOT'] . '/' . '/server/excel/'.$user_id.'/raport_main_'.$date; $name_file_main_setting = $_SERVER['DOCUMENT_ROOT'] . '/' . '/server/excel/'.$user_id.'/raport_setting_'.$date.'.json'; $name_file_write = $_SERVER['DOCUMENT_ROOT'] . '/' . '/server/excel/'.$user_id.'/raport_write_'.$date.'.json'; $setting_str = file_get_contents($name_file_main_setting); $columnsTemp = json_decode($setting_str, true); if(file_exists($name_file_main_setting)) unlink($name_file_main_setting); if(file_exists($name_file_json)) unlink($name_file_json); //var_dump($columnsTemp); if(!empty($columnsTemp['fields_fixes'])){ $columns = $columnsTemp['fields_fixes']; } if(!empty($columnsTemp['fields_castom'])){ $columnsCastom = $columnsTemp['fields_castom']; } if(!empty($columnsTemp['fields_funnels'])){ $columnsFunnels = $columnsTemp['fields_funnels']; } $nameRaport = 'Отчет по заявкам'; if(!empty($columnsTemp['nameRaport'])){ $nameRaport = $columnsTemp['nameRaport']; } $arrayHeder = $columnsTemp['arrayHeder']; $arrayHeder2 = $columnsTemp['arrayHeder2']; $pages = (int)$columnsTemp['pages']; $rowsColumnsName = $columnsTemp['rowsColumnsName']; $raport_id = 0; if(isset($columnsTemp['raport_id'])){ $raport_id = (int)$columnsTemp['raport_id']; } $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle($nameRaport); $styleArray = array( 'borders' => array( 'allBorders' => array( 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => array('rgb' => '808080'), ), ), ); foreach($arrayHeder as $h => $w){ $rw = 1; if(isset($w['row'])){ $rw = $rowStart + (int)$w['row']; } $sheet->setCellValue($h.$rw, $w['title']); // $sheet->getColumnDimension($h)->setWidth($w['width']); $sheet->getStyle($h.'1')->getFont()->applyFromArray( [ 'name' => 'Arial', 'bold' => TRUE, 'italic' => FALSE, 'strikethrough' => FALSE, 'color' => [ 'rgb' => '808080' ], ] ); $sheet->getStyle($h.$rw)->getFont()->applyFromArray( [ 'name' => 'Arial', 'bold' => TRUE, 'italic' => FALSE, 'strikethrough' => FALSE, 'color' => [ 'rgb' => '808080' ], ] ); /* $sheet->getStyle($h)->getAlignment()->setWrapText(true); $sheet->getStyle($h.$rw)->getAlignment()->setWrapText(true); $sheet->getStyle($h.'1')->getAlignment()->setWrapText(true);*/ if(isset($w['rowspan'])){ $sheet->mergeCells($h.$rw.':'.$h.($rw+1)); } if(isset($w['colspan'])){ $in = $rowsColumnsName[$w['name']]; if(isset($rowsColumnsName[$w['lit2']])){ $in2 = $rowsColumnsName[$w['lit2']]; // echo $in."\n"; //echo $in2."\n"; if($in !== false){ //$index = $in + (int)$w['colspan']; //$h2 = $arrColExccel[$index]; $sheet->mergeCells($in.'1'.':'.$in2.'1'); } } } $sheet->getColumnDimension($h)->setAutoSize(true); if($w['key'] == 'events' || $w['key'] == 'events_call') $sheet->getStyle($h)->getAlignment()->setWrapText(true); } if(!empty($arrayHeder2)){ foreach($arrayHeder2 as $h => $w){ $rw = 2; /* if(isset($w['row'])){ $rw = $rowStart + (int)$w['row']; }*/ $sheet->setCellValue($h.$rw, $w['title']); // $sheet->getColumnDimension($h)->setWidth($w['width']); $sheet->getStyle($h.$rw)->getFont()->applyFromArray( [ 'name' => 'Arial', 'bold' => TRUE, 'italic' => FALSE, 'strikethrough' => FALSE, 'color' => [ 'rgb' => '808080' ], ] ); /* $sheet->getStyle($h)->getAlignment()->setWrapText(true); $sheet->getStyle($h.$rw)->getAlignment()->setWrapText(true);*/ $sheet->getColumnDimension($h)->setAutoSize(true); } } $reqs = array(); $time_end = microtime(true); $execution_time = $time_end - $time_start; for($i=1; $i<=$pages; $i++){ $json_str = file_get_contents($name_file_main_json."_".$i.".json"); $json = json_decode($json_str); if(!empty($json)){ foreach($json as $req){ $reqs[] = $req; } } if(file_exists($name_file_main_json."_".$i.".json")) unlink($name_file_main_json."_".$i.".json"); } $row = 2; if($raport_id > 0){ $row++; } if(file_exists($name_file_write)) unlink($name_file_write); file_put_contents($name_file_write, json_encode(['done'=>'no','rows_total'=>count($reqs), 'row'=>0]), FILE_APPEND); $i = 0; try{ foreach($reqs as $req){ foreach($req as $key => $res){ if(isset($rowsColumnsName[$key])){ $litRow = $rowsColumnsName[$key]; $sheet->setCellValue($litRow.$row, $res); } } $i++; // unlink($name_file_write); file_put_contents($name_file_write, json_encode(['done'=>'no','rows_total'=>count($reqs), 'row'=>$i]), FILE_APPEND); $row++; } } catch (Exception $e){ //unlink($name_file_write); file_put_contents($name_file_write, json_encode(['done'=>'no','error'=>'Что-то пошло не так', 'row'=>$i]), FILE_APPEND); } /*header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'.$name.'"'); header('Cache-Control: max-age=0');*/ $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save($name_file); unlink($name_file_write); file_put_contents($name_file_write, json_encode(['done'=>'ok', 'row'=>$i]), FILE_APPEND);