zoukankan      html  css  js  c++  java
  • PHPExcel导入导出 若在thinkPHP3.2中使用(无论实例还是静态调用(如new classname或classname::function)都必须加反斜杠,因3.2就命名空间,如/classname

    php利用PHPExcel类导出导入Excel用法

    来源:   时间:2013-09-05 19:26:56   阅读数:

    分享到: 16

    [导读] PHPExcel类是php一个excel表格处理插件了,下面我来给大家介绍利用PHPExcel类来导入与导出excel表格的应用方法,有需要了解的朋友不防参考参考(PHPExcel自己百度下载这里不介绍了)。导出Excel用法 设置环境变量

    PHPExcel类是php一个excel表格处理插件了,下面我来给大家介绍利用PHPExcel类来导入与导出excel表格的应用方法,有需要了解的朋友不防参考参考(PHPExcel自己百度下载这里不介绍了)。

    导出Excel用法

    //设置环境变量(新增PHPExcel) 

     代码如下 复制代码

    set_include_path('.'. PATH_SEPARATOR . Yii::app()->basePath.'/lib/PHPExcel' . PATH_SEPARATOR .

    get_include_path()); 
    //注:在yii中,也可以直接Yii::import(“application.lib.PHPExcel.*”); 
     
    //引入PHPExcel相关文件 
    require_once "PHPExcel.php"; 
    require_once 'PHPExcel/IOFactory.php'; 
    require_once 'PHPExcel/Writer/Excel5.php'; 

    //把要导出的内容放到表格

     代码如下 复制代码

    //新建 

    $resultPHPExcel = new PHPExcel(); 
    //设置参数 

    //设值 

    $resultPHPExcel->getActiveSheet()->setCellValue('A1', '季度'); 
    $resultPHPExcel->getActiveSheet()->setCellValue('B1', '名称'); 
    $resultPHPExcel->getActiveSheet()->setCellValue('C1', '数量'); 
    $i = 2; 
    foreach($data as $item){ 
    $resultPHPExcel->getActiveSheet()->setCellValue('A' . $i, $item['quarter']); 
    $resultPHPExcel->getActiveSheet()->setCellValue('B' . $i, $item['name']); 
    $resultPHPExcel->getActiveSheet()->setCellValue('C' . $i, $item['number']); 
    $i ++; 
    }

    设置导出参数

     代码如下 复制代码

    //设置导出文件名 

    $outputFileName = 'total.xls'; 

    $xlsWriter = new PHPExcel_Writer_Excel5($resultPHPExcel); 

    //ob_start(); ob_flush(); 

    header("Content-Type: application/force-download"); 

    header("Content-Type: application/octet-stream"); 

    header("Content-Type: application/download"); 

    header('Content-Disposition:inline;filename="'.$outputFileName.'"'); 

    header("Content-Transfer-Encoding: binary"); 

    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 

    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 

    header("Pragma: no-cache"); 

    $xlsWriter->save( "php://output" );

    输出有错。 

    默认$xlsWriter->save( "php://output" );可能因为缓存不够大,而显示不完整,所以做个中转,方式如下: 

     代码如下 复制代码

    $finalFileName = (Yii::app()->basePath.'/runtime/'.time().'.xls'; 

    $xlsWriter->save($finalFileName); 

    echo file_get_contents($finalFileName); 

    //file_get_contents() 函数把整个文件读入一个字符串中。和 file() 一样,不同的是 file_get_contents() 把文

    件读入一个字符串。 


    导入Excel用法

     代码如下 复制代码

    <?
    if($_POST['leadExcel'] == "true")
    {
        $filename = $_FILES['inputExcel']['name'];
        $tmp_name = $_FILES['inputExcel']['tmp_name'];
        $msg = uploadFile($filename,$tmp_name);
        echo $msg;
    }

    //导入Excel文件
    function uploadFile($file,$filetempname)
    {
        //自己设置的上传文件存放路径
        $filePath = 'upFile/';
        $str = "";  
        //下面的路径按照你PHPExcel的路径来修改
        require_once '../PHPExcel/PHPExcel.php';
        require_once '../PHPExcel/PHPExcel/IOFactory.php';
        require_once '../PHPExcel/PHPExcel/Reader/Excel5.php';

        //注意设置时区
        $time=date("y-m-d-H-i-s");//去当前上传的时间
        //获取上传文件的扩展名
        $extend=strrchr ($file,'.');
        //上传后的文件名
        $name=$time.$extend;
        $uploadfile=$filePath.$name;//上传后的文件名地址
        //move_uploaded_file() 函数将上传的文件移动到新位置。若成功,则返回 true,否则返回 false。
        $result=move_uploaded_file($filetempname,$uploadfile);//假如上传到当前目录下
        //echo $result;
        if($result) //如果上传文件成功,就执行导入excel操作
        {
            include "conn.php";
            $objReader = PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
            $objPHPExcel = $objReader->load($uploadfile);
            $sheet = $objPHPExcel->getSheet(0);
            $highestRow = $sheet->getHighestRow();           //取得总行数
            $highestColumn = $sheet->getHighestColumn(); //取得总列数
           
            /* 第一种方法

            //循环读取excel文件,读取一条,插入一条
            for($j=1;$j<=$highestRow;$j++)                        //从第一行开始读取数据
            {
                for($k='A';$k<=$highestColumn;$k++)            //从A列读取数据
                {
                    //
                    这种方法简单,但有不妥,以''合并为数组,再分割为字段值插入到数据库
                    实测在excel中,如果某单元格的值包含了导入的数据会为空       
                    //
                    $str .=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue().'';//读取单元格
                }
                //echo $str; die();
                //explode:函数把字符串分割为数组。
                $strs = explode("",$str);
                $sql = "INSERT INTO te(`1`, `2`, `3`, `4`, `5`) VALUES (
                '{$strs[0]}',
                '{$strs[1]}',
                '{$strs[2]}',
                '{$strs[3]}',
                '{$strs[4]}')";
                //die($sql);
                if(!mysql_query($sql))
                {
                    return false;
                    echo 'sql语句有误';
                }
                $str = "";
            } 
            unlink($uploadfile); //删除上传的excel文件
            $msg = "导入成功!";
            */

            /* 第二种方法*/
            $objWorksheet = $objPHPExcel->getActiveSheet();
            $highestRow = $objWorksheet->getHighestRow();
            echo 'highestRow='.$highestRow;
            echo "<br>";
            $highestColumn = $objWorksheet->getHighestColumn();
            $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);//总列数
            echo 'highestColumnIndex='.$highestColumnIndex;
            echo "<br>";
            $headtitle=array();
            for ($row = 1;$row <= $highestRow;$row++)
            {
                $strs=array();
                //注意highestColumnIndex的列数索引从0开始
                for ($col = 0;$col < $highestColumnIndex;$col++)
                {
                    $strs[$col] =$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
                }   
                $sql = "INSERT INTO te(`1`, `2`, `3`, `4`, `5`) VALUES (
                '{$strs[0]}',
                '{$strs[1]}',
                '{$strs[2]}',
                '{$strs[3]}',
                '{$strs[4]}')";
                //die($sql);
                if(!mysql_query($sql))
                {
                    return false;
                    echo 'sql语句有误';
                }
            }
        }
        else
        {
           $msg = "导入失败!";
        }
        return $msg;
    }
    ?>

    HTML网页代码

     代码如下 复制代码

    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="hidden" name="leadExcel" value="true">
        <table align="center" width="90%" border="0">
        <tr>
           <td>
            <input type="file" name="inputExcel"><input type="submit" value="导入数据">
           </td>
        </tr>
        </table>
    </form>

  • 相关阅读:
    数与bit
    ARM汇编优化1
    一 *(a+1)与*(&a+1)
    二 *(a+1)多维数组
    三 二维数组取址
    四 sizeof(a)
    永恒之蓝及WannaCry分析
    github使用记录
    三种页面置换算法的C++模拟
    opencv检测图像直线
  • 原文地址:https://www.cnblogs.com/caicaizi/p/5098249.html
Copyright © 2011-2022 走看看