public function actionToexcel() { $searchModel = new ImportemployeeSearch(); $params = Yii::$app->request->queryParams; $inputdata = json_decode($params['inputdata']); $modelname = $searchModel->formName(); $dataProvider = $searchModel->search(Proc::GetArrayValuesByKeyName($modelname, $inputdata)); Proc::Grid2Excel($dataProvider, $modelname, 'Импорт сотрудников'); }
public function actionToexcel() { $searchModel = new AuthitemSearch(); $params = Yii::$app->request->queryParams; $inputdata = json_decode($params['inputdata']); $modelname = $searchModel->formName(); $dataProvider = $searchModel->search(Proc::GetArrayValuesByKeyName($modelname, $inputdata)); $selectvalues = json_decode($params['selectvalues']); Proc::Grid2Excel($dataProvider, $modelname, 'Авторизованные единицы', $selectvalues, new AuthitemFilter()); }
public function actionToexcel() { $searchModel = new MaterialSearch(); $params = Yii::$app->request->queryParams; $inputdata = json_decode($params['inputdata']); $modelname = $searchModel->formName(); $dataProvider = $searchModel->search(Proc::GetArrayValuesByKeyName($modelname, $inputdata)); $selectvalues = json_decode($params['selectvalues']); $labelvalues = isset($params['labelvalues']) ? json_decode($params['labelvalues']) : NULL; Proc::Grid2Excel($dataProvider, $modelname, 'Список материальных ценностей', $selectvalues, new MaterialFilter(), $labelvalues); }
/** * @param $dataProvider * @param $modelName * @param $reportName * @param null $selectvalues * @param null $ModelFilter * @param null $LabelValues * @throws \PHPExcel_Exception * @throws \PHPExcel_Reader_Exception */ public static function Grid2Excel($dataProvider, $modelName, $reportName, $selectvalues = NULL, $ModelFilter = NULL, $LabelValues = NULL) { $objPHPExcel = new \PHPExcel(); /* Границы таблицы */ $ramka = array('borders' => ['allborders' => ['style' => \PHPExcel_Style_Border::BORDER_THIN]]); /* Жирный шрифт для шапки таблицы */ $font = array('font' => array('bold' => true), 'alignment' => array('horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_CENTER)); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, 1, $reportName); $objPHPExcel->getActiveSheet()->getStyleByColumnAndRow(0, 1)->applyFromArray(['font' => ['bold' => true, 'size' => 14]]); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, 2, 'Дата: ' . date('d.m.Y')); $objPHPExcel->getActiveSheet()->getStyleByColumnAndRow(0, 2)->applyFromArray(['font' => ['italic' => true]]); $params = Yii::$app->request->queryParams; $inputdata = json_decode($params['inputdata']); $fields = Proc::GetArrayValuesByKeyName($modelName, $inputdata); $selectvalues = (array) $selectvalues; $labels = self::GetAllLabelsFromAR($dataProvider, $fields[$modelName], $LabelValues); $dataProvider->pagination = false; $filter = 'Фильтр:'; foreach ($fields[$modelName] as $attr => $value) { $val_result = $value; if (!empty($value)) { if (isset($selectvalues[$modelName . '[' . $attr . ']'])) { $val_result = $selectvalues[$modelName . '[' . $attr . ']'][$fields[$modelName][$attr]]; } $filter .= ' ' . $labels[$attr] . ': "' . $val_result . '";'; } } if ($ModelFilter instanceof Model) { $dopfilter = self::ConstructFilterOutput($ModelFilter); if (!empty($dopfilter)) { $filter .= ' ' . $dopfilter; } } $i = 0; $r = 5; if (count((array) $dataProvider->getModels()) > 0) { foreach ($dataProvider->getModels() as $row => $ar) { $r++; // Названия полей if ($row === 0) { $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $r - 1, '№'); $objPHPExcel->getActiveSheet()->getStyleByColumnAndRow(0, $r - 1)->applyFromArray($font); foreach ($labels as $label) { $i++; $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($i, $r - 1, $label); $objPHPExcel->getActiveSheet()->getStyleByColumnAndRow($i, $r - 1)->applyFromArray($font); } } $data = self::GetAllDataFromAR($ar, $fields[$modelName]); $i = 0; $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($i, $r, $r - 5); foreach (array_keys($data) as $attr) { $i++; $ValidatorsAttr = $ar->getActiveValidators($attr); array_walk($ValidatorsAttr, function (&$val) { $val = (new \ReflectionClass($val::className()))->getShortName(); }); if (isset($selectvalues[$modelName . '[' . $attr . ']'])) { $data[$attr] = $selectvalues[$modelName . '[' . $attr . ']'][$data[$attr]]; } if (in_array('StringValidator', $ValidatorsAttr)) { $objPHPExcel->getActiveSheet()->setCellValueExplicitByColumnAndRow($i, $r, isset($data[$attr]) ? $data[$attr] : '', \PHPExcel_Cell_DataType::TYPE_STRING); } else { $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($i, $r, isset($data[$attr]) ? $data[$attr] : ''); } } $objPHPExcel->getActiveSheet()->getStyle('A5:' . self::getNameFromNumber($i) . $r)->applyFromArray($ramka); } } else { $r++; $labels = self::GetAllLabelsFromAR($dataProvider, $fields[$modelName], $LabelValues); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $r - 1, '№'); $objPHPExcel->getActiveSheet()->getStyleByColumnAndRow(0, $r - 1)->applyFromArray($font); foreach ($labels as $label) { $i++; $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($i, $r - 1, $label); $objPHPExcel->getActiveSheet()->getStyleByColumnAndRow($i, $r - 1)->applyFromArray($font); } $objPHPExcel->getActiveSheet()->getStyle('A5:' . self::getNameFromNumber($i) . ($r - 1))->applyFromArray($ramka); } $objPHPExcel->getActiveSheet()->mergeCellsByColumnAndRow(0, 1, $i, 1); /* Авторазмер колонок Excel */ $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(0)->setWidth(6); for ($i = 1; $i <= count($labels) + 1; $i++) { $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn($i)->setAutoSize(true); } if ($filter !== 'Фильтр:') { $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, 3, $filter); $objPHPExcel->getActiveSheet()->mergeCellsByColumnAndRow(0, 3, $i, 3); $objPHPExcel->getActiveSheet()->getStyleByColumnAndRow(0, 3)->applyFromArray(['font' => ['italic' => true]]); } // присваиваем имя файла от имени модели $FileName = $reportName; // Устанавливаем имя листа $objPHPExcel->getActiveSheet()->setTitle($FileName); // Выбираем первый лист $objPHPExcel->setActiveSheetIndex(0); // Формируем файл Excel $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $FileName = DIRECTORY_SEPARATOR === '/' ? $FileName : mb_convert_encoding($FileName, 'Windows-1251', 'UTF-8'); // Proc::SaveFileIfExists() - Функция выводит подходящее имя файла, которое еще не существует. mb_convert_encoding() - Изменяем кодировку на кодировку Windows $fileroot = self::SaveFileIfExists('files/' . $FileName . '.xlsx'); // Сохраняем файл в папку "files" $objWriter->save('files/' . $fileroot); // Возвращаем имя файла Excel if (DIRECTORY_SEPARATOR === '/') { echo $fileroot; } else { echo mb_convert_encoding($fileroot, 'UTF-8', 'Windows-1251'); } }