PHP

通用PHPExcel导出函数代码

字號+ 編輯: 国内TP粉 修訂: 面向ICU 來源: ThinkPHP 2023-09-11 我要說兩句(0)

PHPExcel處理案例代碼。

先在網上找到一個PHPExcel的類庫來用。

通用PHPExcel導出excel函數代碼

公用函數:

/**
 * 數據表導出excel
 *
 * @author rainfer <81818832@qq.com>
 *
 * @param string $table,不含前綴表名,必須
 * @param string $file,保存的excel文件名,默認表名爲文件名
 * @param string $fields,需要導出的字段名,默認全部,以半角逗號隔開
 * @param string $field_titles,需要導出的字段標題,需與$field一一對應,爲空則表示直接以字段名爲標題,以半角逗號隔開
 * @param stting $tag,篩選條件 以字符串方式傳入,例:"limit:0,8;order:post_date desc,listorder desc;where:id>0;"
 *      limit:數據條數,可以指定從第幾條開始,如3,8(表示共調用8條,從第3條開始)
 *      order:排序方式,如:post_date desc
 *      where:查詢條件,字符串形式,和sql語句一樣
 */
function export2excel($table,$file='',$fields='',$field_titles='',$tag=''){
    //處理傳遞的參數
    if(stripos($table,C('DB_PREFIX'))==0){
        //含前綴的表,去除表前綴
        $table=substr($table,strlen(C('DB_PREFIX')));
    }
    $file=empty($file)?C('DB_PREFIX').$table:$file;
    $fieldsall=M($table)->getDbFields();
    $field_titles=empty($field_titles)?array():explode(",",$field_titles);
    if(empty($fields)){
        $fields=$fieldsall;
        //成員數不一致,則取字段名爲標題
        if(count($fields)!=count($field_titles)){
            $field_titles=$fields;
        }
    }else{
        $fields=explode(",",$fields);
        $rst=array();
        $rsttitle=array();
        $title_y_n=(count($fields)==count($field_titles))?true:false;
        foreach($fields as $k=>$v){
            if(in_array($v,$fieldsall)){
                $rst[]=$v;
                //一一對應則取指定標題,否則取字段名
                $rsttitle[]=$title_y_n?$field_titles[$k]:$v;
            }
        }
        $fields=$rst;
        $field_titles=$rsttitle;
    }
    //處理tag標簽
    $tag=param2array($tag);
    $limit = !empty($tag['limit']) ? $tag['limit'] : '';
    $order = !empty($tag['order']) ? $tag['order'] : '';
    $where=array();
    if (!empty($tag['where'])) {
        $where['_string'] = $tag['where'];
    }
    //處理數據
    $data= M($table)->field(join(",",$fields))->where($where)->order($order)->limit($limit)->select();
    import("Org.Util.PHPExcel");
    error_reporting(E_ALL);
    date_default_timezone_set('Europe/London');
    $objPHPExcel = new \PHPExcel();
    import("Org.Util.PHPExcel.Reader.Excel5");
    /*設置excel的屬性*/
    $objPHPExcel->getProperties()->setCreator("rainfer")//創建人
    ->setLastModifiedBy("rainfer")//最後修改人
    ->setKeywords("excel")//關鍵字
    ->setCategory("result file");//種類
    //第一行數據
    $objPHPExcel->setActiveSheetIndex(0);
    $active = $objPHPExcel->getActiveSheet();
    foreach($field_titles as $i=>$name){
        $ck = num2alpha($i++) . '1';
        $active->setCellValue($ck, $name);
    }
    //填充數據
    foreach($data as $k => $v){
        $k=$k+1;
        $num=$k+1;//數據從第二行開始錄入
        $objPHPExcel->setActiveSheetIndex(0);
        foreach($fields as $i=>$name){
            $ck = num2alpha($i++) . $num;
            $active->setCellValue($ck, $v[$name]);
        }
    }
    $objPHPExcel->getActiveSheet()->setTitle($table);
    $objPHPExcel->setActiveSheetIndex(0);
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="'.$file.'.xls"');
    header('Cache-Control: max-age=0');
    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
    exit;
}

用到的2個函數:

/**
 * 生成參數列表,以數組形式返回
 * @author rainfer <81818832@qq.com>
 */
function param2array($tag = ''){
    $param = array();
    $array = explode(';',$tag);
    foreach ($array as $v){
        $v=trim($v);
        if(!empty($v)){
            list($key,$val) = explode(':',$v);
            $param[trim($key)] = trim($val);
        }
    }
    return $param;
}

/**
 * 數字到字母列
 * @author rainfer <81818832@qq.com>
 */
function num2alpha($intNum, $isLower = false){
    $num26 = base_convert($intNum, 10, 26);
    $addcode = $isLower ? 49 : 17;
    $result = '';
    for ($i = 0; $i < strlen($num26); $i++) {
        $code = ord($num26{$i});
        if ($code < 58) {
            $result .= chr($code + $addcode);
        } else {
            $result .= chr($code + $addcode - 39);
        }
    }
    return $result;
}


閲完此文,您的感想如何?
  • 有用

    0

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: PHP+JS聊天群

相關課文
  • mac開發接入微信公衆號接口返回報錯 cURL error 56: SSLRead() return error -9806

  • pecl安裝程序時報錯Array and string offset access syntax with curly braces is no longer supported

  • PHP的換行符是什麽

  • 由於商家傳入的H5交易參數有誤,該筆交易暫時無法完成,請聯系商家解決

我要說說
網上賓友點評
沙發已空