php利用PHPExcel類匯出匯入Excel用法

來源:互聯網
上載者:User

匯出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>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.