Partage de la méthode d'export de fichiers Excel par PHPExcel dans le framework Yii2

黄舟
Libérer: 2023-03-14 19:30:01
original
2483 Les gens l'ont consulté

Cet article présente principalement les informations pertinentes sur l'utilisation de PHPExcel pour exporter des fichiers Excel dans le framework Yii2. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à

J'ai récemment étudié le framework Yii de PHP. . , je l'aime beaucoup. Lorsque j'ai rencontré le problème de l'exportation d'Excel, j'ai fait quelques recherches et j'ai trouvé la méthode suivante :

L'installation la plus simple avec composer


composer require "phpoffice/phpexcel": "*"
Copier après la connexion

Si Composer n'est pas installé, vous pouvez vous référer à l'étape 1.2 ci-dessous

1 Introduire PHPExcel

<🎜. >Vous devez d'abord télécharger phpexcel


Vous pouvez l'introduire directement dans le fichier d'entrée index.php, ou avant la classe de contrôleur que vous définissez, à condition qu'il soit introduit avant de l'utiliser



require dirname(dirname(__FILE__)).&#39;/excel/PHPExcel.php&#39;;
Copier après la connexion
Ou vous pouvez modifier l'espace de noms correspondant dans la classe phpexcel.


2. Modifiez le fichier Autoloader.php dans le répertoire de code PHPExcel selon le code suivant, et comparez le fichier source à :


public static function Register() {
  $functions = spl_autoload_functions();
  foreach ( $functions as $function)
    spl_autoload_unregister($function);
    $functions = array_merge(array(array(&#39;PHPExcel_Autoloader&#39;,&#39;Load&#39;)),$functions);
  foreach ( $functions as $function)
    $x = spl_autoload_register($function);
    return $x;
}
Copier après la connexion
Dans la fonction ci-dessus, le code original est commenté.

3. Le code suivant génère Excel et certains paramètres d'attributs couramment utilisés dans le contrôleur :


public function actionExport()
{
    $objectPHPExcel = new PHPExcel();
    $objectPHPExcel->setActiveSheetIndex(0);
  
    $page_size = 52;
    $model = new NewsSearch();
    $dataProvider = $model->search();
    $dataProvider->setPagination(false);
    $data = $dataProvider->getData();
    $count = $dataProvider->getTotalItemCount();
    $page_count = (int)($count/$page_size) +1;
    $current_page = 0;
    $n = 0;
    foreach ( $data as $product )
    {
      if ( $n % $page_size === 0 )
      {
        $current_page = $current_page +1;
  
        //报表头的输出
        $objectPHPExcel->getActiveSheet()->mergeCells(&#39;B1:G1&#39;);
        $objectPHPExcel->getActiveSheet()->setCellValue(&#39;B1&#39;,&#39;产品信息表&#39;);
  
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(&#39;B2&#39;,&#39;产品信息表&#39;);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(&#39;B2&#39;,&#39;产品信息表&#39;);
        $objectPHPExcel->setActiveSheetIndex(0)->getStyle(&#39;B1&#39;)->getFont()->setSize(24);
        $objectPHPExcel->setActiveSheetIndex(0)->getStyle(&#39;B1&#39;)
          ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(&#39;B2&#39;,&#39;日期:&#39;.date("Y年m月j日"));
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(&#39;G2&#39;,&#39;第&#39;.$current_page.&#39;/&#39;.$page_count.&#39;页&#39;);
        $objectPHPExcel->setActiveSheetIndex(0)->getStyle(&#39;G2&#39;)
          ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
          
        //表格头的输出
        $objectPHPExcel->getActiveSheet()->getColumnDimension(&#39;A&#39;)->setWidth(5);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(&#39;B3&#39;,&#39;编号&#39;);
        $objectPHPExcel->getActiveSheet()->getColumnDimension(&#39;B&#39;)->setWidth(6.5);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(&#39;C3&#39;,&#39;名称&#39;);
        $objectPHPExcel->getActiveSheet()->getColumnDimension(&#39;C&#39;)->setWidth(17);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(&#39;D3&#39;,&#39;生产厂家&#39;);
        $objectPHPExcel->getActiveSheet()->getColumnDimension(&#39;D&#39;)->setWidth(22);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(&#39;E3&#39;,&#39;单位&#39;);
        $objectPHPExcel->getActiveSheet()->getColumnDimension(&#39;E&#39;)->setWidth(15);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(&#39;F3&#39;,&#39;单价&#39;);
        $objectPHPExcel->getActiveSheet()->getColumnDimension(&#39;F&#39;)->setWidth(15);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue(&#39;G3&#39;,&#39;在库数&#39;);
        $objectPHPExcel->getActiveSheet()->getColumnDimension(&#39;G&#39;)->setWidth(15);
          
        //设置居中
        $objectPHPExcel->getActiveSheet()->getStyle(&#39;B3:G3&#39;)
          ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  
        //设置边框
        $objectPHPExcel->getActiveSheet()->getStyle(&#39;B3:G3&#39; )
          ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
        $objectPHPExcel->getActiveSheet()->getStyle(&#39;B3:G3&#39; )
          ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
        $objectPHPExcel->getActiveSheet()->getStyle(&#39;B3:G3&#39; )
          ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
        $objectPHPExcel->getActiveSheet()->getStyle(&#39;B3:G3&#39; )
          ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
        $objectPHPExcel->getActiveSheet()->getStyle(&#39;B3:G3&#39; )
          ->getBorders()->getVertical()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
  
        //设置颜色
        $objectPHPExcel->getActiveSheet()->getStyle(&#39;B3:G3&#39;)->getFill()
          ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB(&#39;FF66CCCC&#39;);
          
      }
      //明细的输出
      $objectPHPExcel->getActiveSheet()->setCellValue(&#39;B&#39;.($n+4) ,$product->id);
      $objectPHPExcel->getActiveSheet()->setCellValue(&#39;C&#39;.($n+4) ,$product->product_name);
      $objectPHPExcel->getActiveSheet()->setCellValue(&#39;D&#39;.($n+4) ,$product->product_agent->name);
      $objectPHPExcel->getActiveSheet()->setCellValue(&#39;E&#39;.($n+4) ,$product->unit);
      $objectPHPExcel->getActiveSheet()->setCellValue(&#39;F&#39;.($n+4) ,$product->unit_price);
      $objectPHPExcel->getActiveSheet()->setCellValue(&#39;G&#39;.($n+4) ,$product->library_count);
      //设置边框
      $currentRowNum = $n+4;
      $objectPHPExcel->getActiveSheet()->getStyle(&#39;B&#39;.($n+4).&#39;:G&#39;.$currentRowNum )
          ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
      $objectPHPExcel->getActiveSheet()->getStyle(&#39;B&#39;.($n+4).&#39;:G&#39;.$currentRowNum )
          ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
      $objectPHPExcel->getActiveSheet()->getStyle(&#39;B&#39;.($n+4).&#39;:G&#39;.$currentRowNum )
          ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
      $objectPHPExcel->getActiveSheet()->getStyle(&#39;B&#39;.($n+4).&#39;:G&#39;.$currentRowNum )
          ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
      $objectPHPExcel->getActiveSheet()->getStyle(&#39;B&#39;.($n+4).&#39;:G&#39;.$currentRowNum )
          ->getBorders()->getVertical()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
      $n = $n +1;  
    }
  
    //设置分页显示
    //$objectPHPExcel->getActiveSheet()->setBreak( &#39;I55&#39; , PHPExcel_Worksheet::BREAK_ROW );
    //$objectPHPExcel->getActiveSheet()->setBreak( &#39;I10&#39; , PHPExcel_Worksheet::BREAK_COLUMN );
    $objectPHPExcel->getActiveSheet()->getPageSetup()->setHorizontalCentered(true);
    $objectPHPExcel->getActiveSheet()->getPageSetup()->setVerticalCentered(false);
  
  
    ob_end_clean();
    ob_start();
  
    header(&#39;Content-Type : application/vnd.ms-excel&#39;);
    header(&#39;Content-Disposition:attachment;filename="&#39;.&#39;产品信息表-&#39;.date("Y年m月j日").&#39;.xls"&#39;);
    $objWriter= PHPExcel_IOFactory::createWriter($objectPHPExcel,&#39;Excel5&#39;);
    $objWriter->save(&#39;php://output&#39;);
Copier après la connexion
Une fois le code exécuté, il sera directement Excel est généré et invité à télécharger ou à ouvrir.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!