讲师中心 微信公众号
AI工具推荐 视频效率加速

使用PHPEXcel导出表数据

星浩吖_9039

星浩吖_9039

发布时间:2016-05-25 17:10:47

|

1533人浏览过

|

来源于php中文网

原创

项目中需要将表中的数据导出,在网上找了找发现phpexcel蛮好用的.特此分享

  1. phpexcel

<?php
 
if(!defined('BASEPATH')) exit('No direct script access allowed');
//物资发料单明细
class Read_write{   
    /**
     * $name:选择的类型(CSV,EXCEL2003,2007)
     * $titles:标题数组
     * $querys:查询返回的数组 $query->result_array();
     * $filename:保存的文件名称 
     */
    function write_Factory($titles,$querys,$filename,$name="EXCEL2003"){  
 
      $CI = &get_instance();
      $filename=mb_convert_encoding($filename, "GBK","UTF-8");
 
      switch ($name) {
        case "CSV":
            $CI->excel->write_CSV($titles,$querys,$filename);
            break;
        case "EXCEL2003":
            $CI->excel->write_EXCEL2003($titles,$querys,$filename);
            break;
        case "EXCEL2007":
            $CI->excel->write_EXCEL2007($titles,$querys,$filename);
            break;
      }
    }
 
 
    /**
     * $name:
     */
    function read_Facotry($filePath,$sql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
       $CI = &get_instance();
       $name=$this->_file_extend($filePath);
       switch ($name) {
        case "csv":
            $CI->excel->read_CSV($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
            break;
        case "xls":
            $CI->excel->read_2003Excel($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
            break;
        case "xlsx":
            $CI->excel->read_EXCEL2007($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
            break;
      } 
       $CI->mytool->import_info("filePath=$filePath,sql=$sql");
    }
    /**
     * 2012-1-14 读取工作薄名称(sheetnames)
     */
     function read_sheetNames($filePath){
       $CI = &get_instance();
       $name=$this->_file_extend($filePath);
       $sheetnames;
       switch ($name) {
            case "csv":
                $sheetnames=$CI->excel->read_CSV_Sheet($filePath);
                break;
            case "xls":
                $sheetnames=$CI->excel->read_2003Excel_Sheet($filePath);
                break;
            case "xlsx":
                $sheetnames=$CI->excel->read_EXCEL2007_Sheets($filePath);
                break;
       }    
      return $sheetnames;    
     }
    //读取文件后缀名
     function _file_extend($file_name){
        $extend =explode("." , $file_name);
        $last=count($extend)-1;
        return $extend[$last];
    }
  //-----------------------------------------------预备保留  
    //2011-12-21新增CVS导出功能
     public function export_csv($filename,$title,$datas, $delim = ",", $newline = "\n", $enclosure = '"'){
       $CI = &get_instance();
       $cvs= $this->_csv_from_result($title,$datas,$delim,$newline,$enclosure); 
       $CI->load->helper('download');
       $name=mb_convert_encoding($filename, "GBK","UTF-8");
       force_download($name, $cvs); 
    }
    /**
     * @param $titles:标题
     * @param $datas:数据
     */
    function _csv_from_result($titles,$datas, $delim = ",", $newline = "\n", $enclosure = '"'){
        $out = '';
        // First generate the headings from the table column names
        foreach ($titles as $name){
            $name=mb_convert_encoding($name, "GBK","UTF-8");
            $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $name).$enclosure.$delim;
        }
 
        $out = rtrim($out);
        $out .= $newline;
        // Next blast through the result array and build out the rows
        foreach ($datas as $row)
        {
            foreach ($row as $item)
            {
             $item=mb_convert_encoding($item, "GBK","UTF-8");
                $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure.$delim;
            }
            $out = rtrim($out);
            $out .= $newline;
        }
 
        return $out;
    }   
 
 
}

2.phpexcel

<?php
/**
 * PHPExcel
 *
 * Copyright (C) 2006 - 2010 PHPExcel
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @category   PHPExcel
 * @package    PHPExcel
 * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
 * @version    1.7.4, 2010-08-26
 */
/** Error reporting */
error_reporting(E_ALL);
 
date_default_timezone_set ('Asia/Shanghai');
 
/** PHPExcel */
require_once 'Classes/PHPExcel.php';
require_once 'Classes/PHPExcel/IOFactory.php';
/**
 * 输出到页面上的EXCEL
 */
/**
 * CI_Excel
 * 
 * @package ci
 * @author admin
 * @copyright 2011
 * @version $Id$
 * @access public
 */
class CI_Excel
{   
    //列头,Excel每列上的标识
   private $cellArray = array(
                        1=>'A', 2=>'B', 3=>'C', 4=>'D', 5=>'E',
                        6=>'F', 7=>'G', 8=>'H', 9=>'I',10=>'J',
                        11=>'K',12=>'L',13=>'M',14=>'N',15=>'O',
                        16=>'P',17=>'Q',18=>'R',19=>'S',20=>'T',
                        21=>'U',22=>'V',23=>'W',24=>'X',25=>'Y',
                        26=>'Z',
                        27=>'AA', 28=>'AB', 29=>'AC', 30=>'AD', 31=>'AE',
                        32=>'AF', 33=>'AG', 34=>'AH', 35=>'AI',36=>'AJ',
                        37=>'AK',38=>'AL',39=>'AM',40=>'AN',41=>'AO',
                        42=>'AP',43=>'AQ',44=>'AR',45=>'AS',46=>'AT',
                        47=>'AU',48=>'AV',49=>'AW',50=>'AX',51=>'AY',
                        52=>'AZ', 53=>'BA', 54=>'BB', 55=>'BC', 56=>'BD', 57=>'BE',
                        58=>'BF', 59=>'BG', 60=>'BH', 61=>'BI', 62=>'BJ', 63=>'BK', 64=>'BL');
     private $E2003 = 'E2003';
     private $E2007 = 'E2007';
     private $ECSV  = 'ECSV';
     private $tempName;         //当读取合并文件时,如果第二行为空,则取第一行的名称
/*********************************导出数据开始****************************************************/
    /**
     * 生成Excel2007文件
     */
    function write_EXCEL2007($title='',$data='',$name='')
    {   
       $objPHPExcel=$this->_excelComm($title,$data,$name);
        // Redirect output to a client’s web browser (Excel2007)
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8');
        header("Content-Disposition: attachment;filename=$name.xlsx");
        header('Cache-Control: max-age=0');
         
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
        $objWriter->save('php://output');  //output 允许向输出缓冲机制写入数据,和 print() 与 echo() 的方式相同。
        exit;
    }
    /**
     * 生成Excel2003文件
     */
    function write_EXCEL2003($title='',$data='',$name=''){
 
       $objPHPExcel=$this->_excelComm($title,$data,$name);
       //Redirect output to a client’s web browser (Excel5)
       header('Content-Type: application/vnd.ms-excel;charset=UTF-8');
       header("Content-Disposition: attachment;filename=$name.xls");
       header('Cache-Control: max-age=0');
         
       $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
       $objWriter->save('php://output');
   
    }
    /**
     * 生成CSV文件
     */
    function write_CSV($title='',$data='',$name=''){
         $objPHPExcel=$this->_excelComm($title,$data,$name);
       
         header("Content-Type: text/csv;charset=UTF-8");   
         header("Content-Disposition: attachment; filename=$name.csv");   
         header('Cache-Control:must-revalidate,post-check=0,pre-check=0');   
         header('Expires:0');   
         header('Pragma:public');  
         $objWriter = new PHPExcel_Writer_CSV($objPHPExcel,'CSV');
         $objWriter->save("php://output");
         exit;
    }
     
    
     
    function _excelComm($title,$data,$name){
         // Create new PHPExcel object
        $objPHPExcel = new PHPExcel();
        $objPHPExcel=$this->_writeTitle($title,$objPHPExcel);
       $objPHPExcel=$this->_writeDatas($data,$objPHPExcel);
       $objPHPExcel=$this->_write_comm($name,$objPHPExcel);
        return $objPHPExcel; 
    }
     
     
    //输出标题
    function _writeTitle($title,$objPHPExcel){
         //表头循环(标题)
        foreach ($title as $tkey => $tvalue){
            $tkey = $tkey+1;                         
            $cell  = $this->cellArray[$tkey].'1';     //第$tkey列的第1行,列的标识符(a..z)
            // Add some data  //表头
          //  $tvalue=mb_convert_encoding($tvalue, "UTF-8","GBK");
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cell, $tvalue);  //设置第$row列的值(标题)
        }
        return $objPHPExcel;
    }
    //输出内容
    function _writeDatas($data,$objPHPExcel){
         //内容循环(数据库查询的返回值)            
        foreach($data as $key =>$value) {   
            $i = 1;
            foreach ($value as $mkey =>$mvalue){   //返回的类型是array([0]=>array());,所以此处要循环它的value,也就是里面的array
               
             
                $rows = $key+2; //开始是第二行
                $mrow = $this->cellArray[$i].$rows;   //第$i列的第$row行
             //   $mvalue=mb_convert_encoding($mvalue, "GBK","UTF-8");
              // print_r($mrow."--->".$mvalue);
              
                $objPHPExcel->setActiveSheetIndex(0)->setCellValueExplicit($mrow, $mvalue);  
                $i++; 
            }
        }
        return $objPHPExcel;
    }
    function _write_comm($name,$objPHPExcel){
               // Rename sheet(左下角的标题)
       //$objPHPExcel->getActiveSheet()->setTitle($name);
        // Set active sheet index to the first sheet, so Excel opens this as the first sheet
        $objPHPExcel->setActiveSheetIndex(0);   //默认显示
        return $objPHPExcel;
    }
 /*********************************导出数据结束****************************************************/  
  
 /*********************************读取数据开始****************************************************/
  
 /**
  * 使用方法,$insertSql:insert xx (x1,x2,x3,x4) value (
  */
  // function _comm_insert($objReader,$filePath,$insertSql,$sheet=2,$curRow=2,$riqi=TRUE){
    function _comm_insert($objPHPExcel,$insertSql,$curRow,$merge=FALSE,$mergeCol='B'){
        $CI = &get_instance();
        $currentSheet = $objPHPExcel->getSheet();//得到指定的激活
        /**取得一共有多少列*/
        $allColumn = $currentSheet->getHighestColumn();   
        /**取得一共有多少行*/
        $allRow = $currentSheet->getHighestRow();  
        $size=strlen($allColumn);//如果超出Z,则出现不执行下去
        $esql="";
       
        for($currentRow = $curRow;$currentRow<=$allRow;$currentRow++){
            $sql=$insertSql;
            if($size==2){
                $i=1;
                $currentColumn='A';
                while ($i <= 26) {
                    $address = $currentColumn.$currentRow;
                    $temp=$currentSheet->getCell($address)->getCalculatedValue();
                    $sql.='"'.$temp.'"'.",";
                    $currentColumn++;
                    $i++;
                }
                for($currentColumn='AA';$currentColumn<=$allColumn;$currentColumn++){
                    $address = $currentColumn.$currentRow;
                    $sql.='"'.$currentSheet->getCell($address)->getCalculatedValue().'"'.",";
                } 
           
            }else{
                for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){
                    if($merge){//如果是读取合并的值,则判断,如果此行的值为NULL,则把前面的tempName赋值给$temp;
                        if($currentColumn==$mergeCol){//这里先指定从B列的名字开始读取合并了的值。以后遇到不同的再调整。
                            $temp=$currentSheet->getCell($mergeCol.$currentRow)->getCalculatedValue();
                             if(empty($temp)){
                                $temp=$this->tempName;
                            }else{
                                $this->tempName=$temp;
                            }                            
                        }else{
                         $address = $currentColumn.$currentRow;//getValue()
                         $temp=$currentSheet->getCell($address)->getCalculatedValue();                            
                        }
                    }else{
                        $address = $currentColumn.$currentRow;//getValue()
                        $temp=$currentSheet->getCell($address)->getCalculatedValue();   
                    }
                    $sql=$sql.'"'.$temp.'"'.",";
                }  
            } 
           $esql=rtrim($sql,",").')';
//echo($esql);
//return;
          $CI->db->simple_query($esql);
        }
   }
   /**
    * $filePath:读取文件的路径
    * $insertSql:拼写的SQL
    */
    function read_EXCEL2007($filePath,$insertSql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
       $objs=$this->_get_PHPExcel($this->E2007,$filePath,$sheet,$insertSql,$riqi);
       $this->_comm_insert($objs["EXCEL"],$objs["SQL"],$curRow,$merge,$mergeCol);   
    }
    /**
     * 读取2003Excel
     */
     function read_2003Excel($filePath,$insertSql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
       $objs=$this->_get_PHPExcel($this->E2003,$filePath,$sheet,$insertSql,$riqi);
       $this->_comm_insert($objs["EXCEL"],$objs["SQL"],$curRow,$merge,$mergeCol);     
     }
    /**
     * 读取CSV
     */
     function read_CSV($filePath,$insertSql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){   
       $objs=$this->_get_PHPExcel($this->ECSV,$filePath,$sheet,$insertSql,$riqi,$mergeCol);
       $this->_comm_insert($objs["EXCEL"],$objs["SQL"],$curRow,$merge); 
     }
     //--------------------------------读取工作薄信息开始
     /**
      * 读取Excel2007工作薄名称
      */
     function read_EXCEL2007_Sheets($filePath){
        return $this->_get_sheetnames($this->E2007,$filePath);
     }
 
    /**
     * 读取2003Excel工作薄名称
     */
     function read_2003Excel_Sheet($filePath){
       return $this->_get_sheetnames($this->E2003,$filePath);
     }
    /**
     * 读取CSV工作薄名称
     */
     function read_CSV_Sheet($filePath){ 
        return $this->_get_sheetnames($this->ECSV,$filePath);
     }
     //--------------------------------读取工作薄信息结束
     /**
      * 2012-1-14  --------------------------
      */
      //读取Reader流
      function _get_Reader($name){
        $reader=null;
        switch ($name) {
            case $this->E2003:
                $reader = new PHPExcel_Reader_Excel5();
                break;
            case $this->E2007:
                $reader = new PHPExcel_Reader_Excel2007();
                break;
            case $this->ECSV:
                $reader = new PHPExcel_Reader_CSV();
                break;
        }   
        return $reader;
      }
      //得到$objPHPExcel文件对象
     function _get_PHPExcel($name,$filePath,$sheet,$insertSql,$riqi){
        $reader=$this->_get_Reader($name);
        $PHPExcel= $this->_init_Excel($reader,$filePath,$sheet);
        if($riqi){ //如果不需要日期,则忽略.
            $insertSql=$insertSql.'"'.$reader->getSheetTitle().'"'.",";//第一个字段固定是日期2012-1-9            
        }   
        return array("EXCEL"=>$PHPExcel,"SQL"=>$insertSql);
     }
 
      
     //得到工作薄名称
     function _get_sheetnames($name,$filePath){
        $reader=$this->_get_Reader($name);
        $this->_init_Excel($reader,$filePath);
        return $reader->getAllSheets();
     }
     //加载文件
      function _init_Excel($objReader,$filePath,$sheet=''){
        $objReader->setReadDataOnly(true);
        if(!empty($sheet)){
             $objReader->setSheetIndex($sheet);//读取第几个Sheet。
        }   
        return $objReader->load("$filePath");
      }
//-------------------------------2012-1-14
}
/*********************************读取数据结束****************************************************/

3.php代码

------------------------导入操作------------------------
    /**
     *  $sql="INSERT INTO ".mymsg::WY_MMB." (dizhi,xingming) VALUES (";
     */
    //先上传再读取文件
    function upByFile($sql, $url, $curRow = 2, $RIQI = true,$merge = FALSE,$mergeCol='B')
    {
         
        $CI = &get_instance();
        $config['allowed_types'] = '*'; //充许所有文件
        $config['upload_path'] = IMPORT; // 只在文件的路径
        $CI->load->library('upload', $config);
        
        if ($CI->upload->do_upload()) { //默认名是:userfile
            $data = $CI->upload->data();
           
            $full_name = $data['full_path']; //得到保存后的路径
            $full_name = mb_convert_encoding($full_name, "GBK", "UTF-8");
            $sheet = $CI->input->post("sheet"); //读取第x列图表
            if (empty($sheet)) {
                $sheet = 0;
            }
             
            $CI->read_write->read_Facotry($full_name, $sql, $sheet, $curRow, $RIQI,$merge,$mergeCol); //执行插入命令
         
        }
        
     $this->alert_msg(mymsg::IMPORT_SUCCESS, site_url($url));
    }
 
------------------------------导出操作----------------------------------
   //导出指定的表字段
   public function show_export(){
    //-----数据库字段
    $field=implode(",",$this->input->post("listCheckBox_show"));//数据库字段
    //显示名称
    $titleArray=$this->input->post("listCheckBox_field");//显示的字段名称(字段Comment注解名,因为传进来的有些空数组,所以必须过滤)
    $title=array();
    foreach ($titleArray as $key => $value) {
        if (!empty($value)) {
            $title[]=$value;
        }
    }    
    //---数据库表名
    $table=$this->input->post("tableName");
    //--数据库表名称(Comment注释)
    $show_name=$this->input->post("tableComment");
    //--导出类型
    $type=$this->input->post("type");
     
    //--where 年月
    $y_month=$this->input->post("year_month");
    if(!empty($y_month)){
        $where["riqi"]=$y_month;
        $datas=$this->mcom_model->queryByWhereReField($field,$where,$table);
    }else{
        //--写出的数据
        $datas=$this->mcom_model->queryByField($field,$table);      
    }
 
    //---开始导出
    $this->read_write->write_Factory($title,$datas,$show_name,$type);
   }

4.截图

立即学习“PHP免费学习笔记(深入)”;

11125836_P8VJ.gif

WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

20

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

0

2026.09.30

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

20

2026.09.30

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

20

2026.09.30

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

20

2026.09.29

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

220

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

140

2026.09.23

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

120

2026.09.23

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

60

2026.09.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn