Home  >  Article  >  Backend Development  >  ThinkPHP uses PHPExcel to import and export Excel data

ThinkPHP uses PHPExcel to import and export Excel data

不言
不言Original
2018-06-07 16:26:262259browse

This article mainly introduces ThinkPHP to use PHPExcel to implement Excel data import and export. It is a very practical function. Friends who need it can refer to it.

The examples described in this article are used in the development framework of Thinkphp. If you use The same method is used in other frameworks. Many people may not be able to correctly implement the import and export of Excel. The problem is basically caused by an error in the reference path of the core class of phpExcel. If there is a problem, everyone must test whether Lu Jin is referenced correctly.

The specific steps are as follows:

(1) Import Excel

First, upload the file on the front html page: such as:

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

 <input type="submit" value="导入" />
</form>

Second , perform file processing in the corresponding php file

 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; );
   }
  }
 }
}

Third: ExcelToArrary class, used to reference phpExcel and process Excel data
Note here:ExcelToArrary class is built in the root directory

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; 
 }  
 }

in addons /services/ExcelToArrary.class.php Fourth, the above is all the imported content, and the phpExcel package is attached at the end.

(2) Excel export (much simpler than import)

First, find out the data to generate Excel in the database, such as:

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

2. ExcelToArrary class, used to reference phpExcel and process data

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;
}

The above is the entire content of this article. I hope it will be helpful to everyone's learning. For more related content, please pay attention to the PHP Chinese website!

Related recommendations:

Implementing phpexcel export with generated pictures in thinkphp3.2

Generating phpqrcode in Thinkphp3.2.3 How to implement QR code with logo

The above is the detailed content of ThinkPHP uses PHPExcel to import and export Excel data. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn