From: fomichev Date: Fri, 13 Dec 2024 06:43:51 +0000 (+0300) Subject: Правки генерации эксель X-Git-Tag: 1.7~161^2~12 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=9cf9c42712a0bd9203ad40a6bd2ecfe9f4d94059;p=erp24_rep%2Fyii-erp24%2F.git Правки генерации эксель --- diff --git a/erp24/controllers/UsersMessageManagementController.php b/erp24/controllers/UsersMessageManagementController.php index d4c32685..75ac91d4 100644 --- a/erp24/controllers/UsersMessageManagementController.php +++ b/erp24/controllers/UsersMessageManagementController.php @@ -119,50 +119,57 @@ class UsersMessageManagementController extends Controller public function actionGenerateExcel($date, $type) { - $data = Users::getUsersListForKogort($date); + try { + $data = Users::getUsersListForKogort($date); + if (empty($data)) { + Yii::$app->session->setFlash('error', 'Нет данных для экспорта.'); + return $this->redirect(Yii::$app->request->referrer); + } - $spreadsheet = new Spreadsheet(); - $sheet = $spreadsheet->getActiveSheet(); + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + $sheet->setTitle('Users'); - if (!empty($data)) { $fields = array_keys($data[0]->getAttributes()); - } else { - Yii::$app->session->setFlash('error', 'Нет данных для экспорта.'); - return $this->redirect(Yii::$app->request->referrer); - } - $columnIndex = 1; - foreach ($fields as $field) { - $sheet->setCellValue(Coordinate::stringFromColumnIndex($columnIndex) . '1', $field); - $columnIndex++; - } - - $row = 2; - foreach ($data as $user) { - $columnIndex = 1; - foreach ($fields as $field) { - $sheet->setCellValue(Coordinate::stringFromColumnIndex($columnIndex) . $row, $user->$field); - $columnIndex++; + foreach ($fields as $index => $field) { + $column = Coordinate::stringFromColumnIndex($index + 1); + $sheet->setCellValue("{$column}1", $field); } - $row++; - } - - $sheet->setTitle('Users'); - - $response = Yii::$app->response; - $response->format = \yii\web\Response::FORMAT_RAW; - - - $response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); - $response->headers->set('Content-Disposition', 'attachment; filename="users-' . $type . '-' . $date . '.xlsx"'); - $response->headers->set('Cache-Control', 'max-age=0'); - $response->headers->add('Pragma', 'public'); + foreach ($data as $rowIndex => $user) { + foreach ($fields as $columnIndex => $field) { + $column = Coordinate::stringFromColumnIndex($columnIndex + 1); + $sheet->setCellValue( + "{$column}" . ($rowIndex + 2), + $user->$field + ); + } + } - $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet); - $writer->save('php://output'); - Yii::$app->end(); - return null; + $filename = "users-{$type}-{$date}.xlsx"; + $response = Yii::$app->response; + $response->format = \yii\web\Response::FORMAT_RAW; + $response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + $response->headers->set('Content-Disposition', "attachment; filename=\"{$filename}\""); + $response->headers->set('Cache-Control', 'max-age=0'); + $response->headers->add('Pragma', 'public'); + + ob_clean(); + $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet); + $writer->save('php://output'); + + return null; + } catch (\Exception $e) { + Yii::error("Excel generation error: " . $e->getMessage()); + Yii::$app->session->setFlash('error', 'Произошла ошибка при генерации Excel файла.'); + return $this->redirect(Yii::$app->request->referrer); + } finally { + if (isset($spreadsheet)) { + $spreadsheet->disconnectWorksheets(); + unset($spreadsheet); + } + } } public function actionViewKogortUsers($date, $type)