Maison  >  Article  >  développement back-end  >  Utilisez phpExcel pour importer et exporter des données Excel

Utilisez phpExcel pour importer et exporter des données Excel

不言
不言original
2018-05-08 14:38:431009parcourir

Cet article présente principalement l'utilisation de phpExcel pour importer et exporter des données Excel. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Ma routine est Si elle est utilisée dans. le framework de développement Thinkphp, si la même méthode est utilisée dans d'autres frameworks, de nombreuses personnes pourraient ne pas être en mesure d'implémenter correctement l'importation et l'exportation d'Excel. Le problème est essentiellement une erreur dans le chemin de référence de la classe principale de phpExcel. est un problème, tout le monde doit le corriger. Testez si Lu Jin est correctement cité

De nombreux articles mentionnent l'utilisation de phpExcel pour importer et exporter des données Excel. La plupart des articles sont similaires, ou ils sont réimprimés, et il y en aura. quelques problèmes. Voici mes recherches sur phpExcel. Les routines d'utilisation résument les méthodes d'utilisation, puis passent directement au sujet.

Tout d'abord, permettez-moi de dire que ma routine est utilisée dans le cadre de développement de Thinkphp. Si elle est utilisée dans d'autres frameworks, la même méthode est utilisée. l'importation et l'exportation d'Excel Le problème est essentiellement que tout ce qui précède est une erreur dans le chemin de référence de la classe principale de phpExcel. S'il y a un problème, vous devez tester si Lu Jin est correctement référencé.

(1) Importer Excel

Tout d'abord, téléchargez le fichier sur la page d'accueil html : tel que :

Copier le code Le code est le suivant :

<form method="post" action="php文件" enctype="multipart/form-data">
         <h3>导入Excel表:</h3><input  type="file" name="file_stu" />
           <input type="submit"  value="导入" />
</form>

Deuxièmement, traitez le fichier dans le fichier php correspondant

Copier le code Le code est le suivant :

 if (! empty ( $_FILES [&#39;file_stu&#39;] [&#39;name&#39;] ))
 {
    $tmp_file = $_FILES [&#39;file_stu&#39;] [&#39;tmp_name&#39;];
    $file_types = explode ( ".", $_FILES [&#39;file_stu&#39;] [&#39;name&#39;] );
    $file_type = $file_types [count ( $file_types ) - 1];
     /*判别是不是.xls文件,判别是不是excel文件*/
     if (strtolower ( $file_type ) != "xls")              
    {
          $this->error ( &#39;不是Excel文件,重新上传&#39; );
     }
    /*设置上传路径*/
     $savePath = SITE_PATH . &#39;/public/upfile/Excel/&#39;;
    /*以时间来命名上传的文件*/
     $str = date ( &#39;Ymdhis&#39; ); 
     $file_name = $str . "." . $file_type;
     /*是否上传成功*/
     if (! copy ( $tmp_file, $savePath . $file_name )) 
      {
          $this->error ( &#39;上传失败&#39; );
      }
    /*
       *对上传的Excel数据进行处理生成编程数据,这个函数会在下面第三步的ExcelToArray类中
      注意:这里调用执行了第三步类里面的read函数,把Excel转化为数组并返回给$res,再进行数据库写入
    */
  $res = Service ( &#39;ExcelToArray&#39; )->read ( $savePath . $file_name );
   /*
        重要代码 解决Thinkphp M、D方法不能调用的问题  
        如果在thinkphp中遇到M 、D方法失效时就加入下面一句代码
    */
   //spl_autoload_register ( array (&#39;Think&#39;, &#39;autoload&#39; ) );
   /*对生成的数组进行数据库的写入*/
   foreach ( $res as $k => $v ) 
   {
       if ($k != 0) 
      {
           $data [&#39;uid&#39;] = $v [0];
           $data [&#39;password&#39;] = sha1 ( &#39;111111&#39; );
           $data [&#39;email&#39;] = $v [1];
           $data [&#39;uname&#39;] = $v [3];
          $data [&#39;institute&#39;] = $v [4];
         $result = M ( &#39;user&#39; )->add ( $data );
         if (! $result) 
         {
              $this->error ( &#39;导入数据库失败&#39; );
          }
      }
   }
}

Troisième : classe ExcelToArrary, utilisée pour référencer phpExcel et traiter les données Excel

Copier le code Le code est comme suit :

class ExcelToArrary extends Service{
 public function __construct() {
     /*导入phpExcel核心类    注意 :你的路径跟我不一样就不能直接复制*/
     include_once(&#39;./Excel/PHPExcel.php&#39;);
 }
/**
* 读取excel $filename 路径文件名 $encode 返回数据的编码 默认为utf8
*以下基本都不要修改
*/
public function read($filename,$encode=&#39;utf-8&#39;){
          $objReader = PHPExcel_IOFactory::createReader(&#39;Excel5&#39;);
          $objReader->setReadDataOnly(true);
          $objPHPExcel = $objReader->load($filename);
          $objWorksheet = $objPHPExcel->getActiveSheet();
    $highestRow = $objWorksheet->getHighestRow(); 
    $highestColumn = $objWorksheet->getHighestColumn(); 
      $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
      $excelData = array(); 
    for ($row = 1; $row <= $highestRow; $row++) { 
        for ($col = 0; $col < $highestColumnIndex; $col++) { 
                 $excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
           } 
         } 
        return $excelData;
    }    
 }

Quatrièmement, ce qui précède correspond à tout le contenu importé, le package phpExcel est joint à la fin.

(2) Export Excel (beaucoup plus simple que l'importation)

Tout d'abord, découvrez la base de données pour générer des données Excel, telles que :

$data= M(&#39;User&#39;)->findAll();   //查出数据
$name=&#39;Excelfile&#39;;    //生成的Excel文件文件名
$res=service(&#39;ExcelToArrary&#39;)->push($data,$name);

Deuxièmement, la classe ExcelToArrary, utilisée pour référencer phpExcel et traiter les données

Copier le code Le code est le suivant :

class ExcelToArrary extends Service{
       public function __construct() {
              /*导入phpExcel核心类    注意 :你的路径跟我不一样就不能直接复制*/
               include_once(&#39;./Excel/PHPExcel.php&#39;);
       }
     /* 导出excel函数*/
    public function push($data,$name=&#39;Excel&#39;){
          error_reporting(E_ALL);
          date_default_timezone_set(&#39;Europe/London&#39;);
         $objPHPExcel = new PHPExcel();
        /*以下是一些设置 ,什么作者  标题啊之类的*/
         $objPHPExcel->getProperties()->setCreator("转弯的阳光")
                               ->setLastModifiedBy("转弯的阳光")
                               ->setTitle("数据EXCEL导出")
                               ->setSubject("数据EXCEL导出")
                               ->setDescription("备份数据")
                               ->setKeywords("excel")
                              ->setCategory("result file");
         /*以下就是对处理Excel里的数据, 横着取数据,主要是这一步,其他基本都不要改*/
        foreach($data as $k => $v){
             $num=$k+1;
             $objPHPExcel->setActiveSheetIndex(0)
                         //Excel的第A列,uid是你查出数组的键值,下面以此类推
                          ->setCellValue(&#39;A&#39;.$num, $v[&#39;uid&#39;])    
                          ->setCellValue(&#39;B&#39;.$num, $v[&#39;email&#39;])
                          ->setCellValue(&#39;C&#39;.$num, $v[&#39;password&#39;])
            }
            $objPHPExcel->getActiveSheet()->setTitle(&#39;User&#39;);
            $objPHPExcel->setActiveSheetIndex(0);
             header(&#39;Content-Type: application/vnd.ms-excel&#39;);
             header(&#39;Content-Disposition: attachment;filename="&#39;.$name.&#39;.xls"&#39;);
             header(&#39;Cache-Control: max-age=0&#39;);
             $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, &#39;Excel5&#39;);
             $objWriter->save(&#39;php://output&#39;);
             exit;
      }

Troisièmement, ce qui précède correspond à tout le contenu exporté, le package phpExcel est joint à la fin.

Recommandations associées :

thinkPHP+phpexcel implémente l'exemple de fonction de sortie de rapport Excel

Thinkphp5+PHPExcel implémente la fonction de téléchargement de données de table par lots


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!

Déclaration:
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