zoukankan      html  css  js  c++  java
  • PHP 利用PHPExcel 文件导入(也可保存到本地或者服务器)、导出

    首先需要去官网http://www.php.cn/xiazai/leiku/1491,下载后只需要Classes目录下的文件即可。

    1、PHPExcel导出方法实现过程

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    /**

     * 数据导出

     * @param array $title   标题行名称

     * @param array $data   导出数据

     * @param string $fileName 文件名

     * @param string $savePath 保存路径

     * @param $type   是否下载  false--保存   true--下载

     * @return string   返回文件全路径

     * @throws PHPExcel_Exception

     * @throws PHPExcel_Reader_Exception

     */ 

    function exportExcel($title=array(), $data=array(), $fileName='', $savePath='./', $isDown=false){ 

        include('PHPExcel.php'); 

        $obj = new PHPExcel(); 

       

        //横向单元格标识 

        $cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'); 

           

        $obj->getActiveSheet(0)->setTitle('sheet名称');   //设置sheet名称 

        $_row = 1;   //设置纵向单元格标识 

        if($title){ 

            $_cnt = count($title); 

            $obj->getActiveSheet(0)->mergeCells('A'.$_row.':'.$cellName[$_cnt-1].$_row);   //合并单元格 

            $obj->setActiveSheetIndex(0)->setCellValue('A'.$_row, '数据导出:'.date('Y-m-d H:i:s'));  //设置合并后的单元格内容 

            $_row++; 

            $i = 0; 

            foreach($title AS $v){   //设置列标题 

                $obj->setActiveSheetIndex(0)->setCellValue($cellName[$i].$_row, $v); 

                $i++; 

            

            $_row++; 

        

       

        //填写数据 

        if($data){ 

            $i = 0; 

            foreach($data AS $_v){ 

                $j = 0; 

                foreach($_v AS $_cell){ 

                    $obj->getActiveSheet(0)->setCellValue($cellName[$j] . ($i+$_row), $_cell); 

                    $j++; 

                

                $i++; 

            

        

           

        //文件名处理 

        if(!$fileName){ 

            $fileName = uniqid(time(),true); 

        

       

        $objWrite = PHPExcel_IOFactory::createWriter($obj, 'Excel2007'); //这里Excel2007 可能会报错 如果报错改成 Excel5 再试

       

        if($isDown){   //网页下载 

            header('pragma:public'); 

            header("Content-Disposition:attachment;filename=$fileName.xls"); 

            $objWrite->save('php://output');exit

        

       

        $_fileName = iconv("utf-8", "gb2312", $fileName);   //转码 

        $_savePath = $savePath.$_fileName.'.xlsx'

         $objWrite->save($_savePath); 

       

         return $savePath.$fileName.'.xlsx'

       

    //$this->exportExcel(array('姓名','年龄'), array(array('a',21),array('b',23)), '档案', './', true);

    2、PHPExcel导入方法实现过程

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    /**

    *  数据导入

    * @param string $file excel文件

    * @param string $sheet

     * @return string   返回解析数据

     * @throws PHPExcel_Exception

     * @throws PHPExcel_Reader_Exception

    */ 

    function importExecl($file='', $sheet=0){ 

        $file = iconv("utf-8", "gb2312", $file);   //转码 

        if(empty($file) OR !file_exists($file)) { 

            die('file not exists!'); 

        

        include('PHPExcel.php');  //引入PHP EXCEL类 

        $objRead = new PHPExcel_Reader_Excel2007();   //建立reader对象 

        if(!$objRead->canRead($file)){ 

            $objRead = new PHPExcel_Reader_Excel5(); 

            if(!$objRead->canRead($file)){ 

                die('No Excel!'); 

            

        

       

        $cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'); 

       

        $obj = $objRead->load($file);  //建立excel对象 

        $currSheet = $obj->getSheet($sheet);   //获取指定的sheet表 

        $columnH = $currSheet->getHighestColumn();   //取得最大的列号 

        $columnCnt = array_search($columnH, $cellName); 

        $rowCnt = $currSheet->getHighestRow();   //获取总行数 

       

        $data = array(); 

        for($_row=1; $_row<=$rowCnt; $_row++){  //读取内容 

            for($_column=0; $_column<=$columnCnt; $_column++){ 

                $cellId = $cellName[$_column].$_row

                $cellValue = $currSheet->getCell($cellId)->getValue(); 

                 //$cellValue = $currSheet->getCell($cellId)->getCalculatedValue();  #获取公式计算的值 

                if($cellValue instanceof PHPExcel_RichText){   //富文本转换字符串 

                    $cellValue = $cellValue->__toString(); 

                

       

                $data[$_row][$cellName[$_column]] = $cellValue

            

        

       

        return $data

    }

    不用PHPExcel类也能导出数据:

    /*
    * @creator Jimmy
    * @data 2018/1/05
    * @desc 数据导出到excel(csv文件)
    * @param $filename 导出的csv文件名称 如date("Y年m月j日").'-test.csv'
    * @param array $tileArray 所有列名称
    * @param array $dataArray 所有列数据
    */
        public  function exportToExcel($filename, $tileArray=[], $dataArray=[]){
            ini_set('memory_limit','512M');
            ini_set('max_execution_time',0);
            ob_end_clean();
            ob_start();
            header("Content-Type: text/csv");
            header("Content-Disposition:filename=".$filename);
    //        $fp=fopen('php://output','w');
            $fp=fopen('D:phpStudyPHPTutorialWWWjuyouyuSourceAPIackendweb\'.$filename,'w');
            fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));//转码 防止乱码(比如微信昵称(乱七八糟的))
            fputcsv($fp,$tileArray);
            $index = 0;
            foreach ($dataArray as $item) {
                if($index==1000){
                    $index=0;
                    ob_flush();
                    flush();
                }
                $index++;
                fputcsv($fp,$item);
            }
    
            ob_flush();
            flush();
            ob_end_clean();
        }
    
        public function actionIndex()
        {
            $a = array('姓名','年龄');
            $b = array(array('a',21),array('b',23));
            $filename = date("Y年m月j日").'-test.csv';
            $this->exportToExcel($filename,$a,$b);
        }
  • 相关阅读:
    使用makeself创建安装文件
    Java类的多态机制
    LintCode 带最小值操作的栈
    js限制checkbox选中个数
    Java Collection框架—List set map 的异同世界
    利用runtime动态生成对象?
    2014-3-4 大规模无缝水陆导航图
    atitit。全局变量的设计与实现 java php的异同
    PHP从入门到精通(四)
    PHP从入门到精通(三)
  • 原文地址:https://www.cnblogs.com/liangzia/p/9964027.html
Copyright © 2011-2022 走看看