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, 'Импорт сотрудников');
 }
Example #2
0
 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());
 }
Example #3
0
 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);
 }
Example #4
0
 /**
  * @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');
     }
 }