>  기사  >  백엔드 개발  >  Excel의 PHP 내보내기 HTML 콘텐츠 파일 클래스 방법

Excel의 PHP 내보내기 HTML 콘텐츠 파일 클래스 방법

小云云
小云云원래의
2018-03-15 14:29:332474검색

이 글은 주로 PHP를 통해 HTML 콘텐츠 파일을 Excel로 내보내는 방법을 공유합니다.

<?php
/**
 * 导出Excel(内容为HTML)文件类
 * @author yzq
 */
class Excel_html{

    private $_common_style    = &#39;&#39;;             //通用样式
    private $_head            = &#39;&#39;;             //表头内容
    private $_body            = &#39;&#39;;             //表格内容
    private $_head_bgcolor    = &#39;#f3f3f3&#39;;      //表头默认背景颜色
    private $_body_bgcolor    = &#39;&#39;;             //表格默认背景颜色
    private $_default_width   = 100;            //默认宽度
    Private $_default_align   = &#39;center&#39;;       //默认对齐方式
    private $_default_charset = &#39;utf-8&#39;;        //默认导出编码
    private $_tables          = [];             //一个文件里有多个table时使用
    private $_table_brs       = [];             //table间是否换行

    /**
     * 设置表头背景颜色
     */
    public function set_head_bgcolor($bgcolor = &#39;#f3f3f3&#39;){
        $this->_head_bgcolor = $bgcolor;
    }

    /**
     * 设置表格背景颜色
     */
    public function set_body_bgcolor($bgcolor = &#39;&#39;){
        $this->_body_bgcolor = $bgcolor;
    }

    /**
     * 设置输出字符编码
     */
    public function set_charset($charset = &#39;utf-8&#39;){
        $this->_default_charset = $charset;
    }

    /**
     * 设置默认对齐方式
     */
    public function set_align($align = &#39;center&#39;){
        $this->_default_align = $align;
    }

    /**
     * 设置默认宽度
     * @param int $width
     */
    public function set_default_width($width = 100){
        $this->_default_width = $width;
    }

    /**
     * 设置通用样式
     * @param string $style
     */
    public function set_common_style($style = &#39;&#39;){
        $this->_common_style = $style;
    }

    /**
     * 添加一个table
     * @param int $add_br  是否添加换行
     */
    public function add_talbe($add_br = 0){
        $this->_tables[] = array(
            &#39;head&#39; => $this->_head,
            &#39;body&#39; => $this->_body,
        );

        $this->_table_brs[] = $add_br ? 1 : 0;
        $this->_head = &#39;&#39;;
        $this->_body = &#39;&#39;;
    }


    /**
     * 添加表头
     * @param array $head_arr = array(
     *     // array(array(字段名1, 宽度, 其他设置), 字段名2)  宽度 其他设置(如跨列,跨行等) 可选
     *     array(
     *         array(&#39;序号&#39;, 100, [&#39;colspan&#39; => 2, &#39;rowspan&#39; => 2]),
     *         &#39;订单号&#39;,
     *         &#39;同行客户&#39;
     *     )
     * )
     *
     */
    public function add_head($head_arr = array()){
        $head_html = &#39;<tr>&#39;;
        if (is_array($head_arr) && !empty($head_arr)){
            foreach ($head_arr as $head){
                if (!is_array($head)){
                    $head_html .= "<th width=&#39;" . $this->_default_width . "&#39; bgcolor=&#39;" . $this->_head_bgcolor . "&#39;>" . $this->get_value($head)  . "</th>\n";
                }else {
                    $width = !empty($head[1]) ? $head[1] : $this->_default_width;
                    $other = isset($head[2]) ? $head[2] : [];
                    $head_html .= "<th width=&#39;" . $width . "&#39; bgcolor=&#39;" . $this->_head_bgcolor . "&#39;";
                    if(!empty($other) && is_array($other)){
                        foreach($other as $k => $v){
                            $head_html .= " {$k}=&#39;{$v}&#39; ";
                        }
                    }
                    $head_html .= " >" . $this->get_value($head[0]) . "</th>\n";
                }
            }
        }

        $head_html   .= "</tr>\n";
        $this->_head .= $head_html;
    }

    /**
     * 添加表格内容
     * @param array $body_arr = array(
     *     //array(array(字段值, 对齐方式, 样式, 其他设置))  //对齐方式、样式、其他设置(如跨列,跨行等)可选
     *     array(
     *         array(1, &#39;left&#39;, &#39;style="..."&#39;, [&#39;colspan&#39; => 2, &#39;rowspan&#39; => 2]),
     *         array(&#39;2&#39;, &#39;right&#39;),
     *         3
     *     )
     * )
     *
     * @param $deal_long_num  是否处理长度较长的数字字符串   防止转换为科学计数法
     *
     */
    public function add_body($body_arr = array(), $deal_long_num = false){
        $body_html = &#39;<tr>&#39;;
        if (is_array($body_arr) && !empty($body_arr)){
            foreach ($body_arr as $body){
                if (!is_array($body)){
                    $style = $deal_long_num ? &#39;style="mso-number-format:\&#39;\@\&#39;;"&#39; : &#39;&#39;;
                    $body_html .= "<td bgcolor=&#39;" . $this->_body_bgcolor . "&#39; align=&#39;" . $this->_default_align . "&#39; {$style}>" . $this->get_value($body) . "</td>\n";
                }else {
                    $align = isset($body[1]) ? $body[1] : $this->_default_align;
                    $style = isset($body[2]) ? $body[2] : &#39;&#39;;
                    $other = isset($body[3]) ? $body[3] : [];

                    if (!empty($style)){
                        $style = $deal_long_num ? (rtrim($style, &#39;;"&#39;) . ";mso-number-format:&#39;\@&#39;;" . &#39;"&#39;) : $style;
                    }else{
                        $style = $deal_long_num ? &#39;style="mso-number-format:\&#39;\@\&#39;;"&#39; : &#39;&#39;;
                    }

                    $body_html .= "<td bgcolor=&#39;" . $this->_body_bgcolor . "&#39; align=&#39;" . $align ."&#39; " . $style . "";
                    if(!empty($other) && is_array($other)){
                        foreach($other as $k => $v){
                            $body_html .= " {$k}=&#39;{$v}&#39; ";
                        }
                    }
                    $body_html .= ">" . $this->get_value($body[0])  . "</td>\n";
                }
            }
        }

        $body_html   .= "</tr>\n";
        $this->_body .= $body_html;
    }

    /**
     * 下载excel文件
     */
    public function downLoad($filename = &#39;&#39;){
        $this->add_talbe();
        $chare_set     = $this->_default_charset;
        $down_content  = &#39;<meta http-equiv="Content-Type" content="text/html; charset=&#39; . $chare_set . &#39;" />&#39; . "\n";
        $down_content .= $this->_common_style;

        foreach ($this->_tables as $t_key => $table){
            if (empty($table[&#39;head&#39;]) && empty($table[&#39;body&#39;])){
                continue;
            }

            $down_content .= &#39;<table border="1">&#39; . "\n";
            $down_content .= $table[&#39;head&#39;] . "\n";
            $down_content .= $table[&#39;body&#39;] . "\n";
            $down_content .= &#39;</table>&#39;;

            if ($this->_table_brs[$t_key]){
                $down_content .= "<br/>";
            }

            $down_content .= "\n";
        }

        if(!$filename) {
            $filename = date(&#39;YmdHis&#39;,time()).&#39;.xls&#39;;
        }
        $ci = &get_instance();
        $ci->load->helper(&#39;download&#39;);

        force_download($filename, $down_content);
    }

    private function get_value($value){
        if (strtolower($this->_default_charset) != &#39;utf-8&#39;){
            return iconv(&#39;utf-8&#39;, $this->_default_charset, $value);
        }else{
            return $value;
        }
    }
}

사용 예:

$excel = new Excel_html();
	$head = [
	    [&#39;序号&#39;, 50], [&#39;姓名&#39;, 100], [&#39;移动电话&#39;, 120], [&#39;部门&#39;, 120]
	];
$excel->add_head($head);
$rs = array(
    array(
        &#39;realname&#39; => &#39;a&#39;,
        &#39;mobile&#39; => &#39;12345678901&#39;,
        &#39;department_name&#39; => &#39;测试&#39;,
    ),
    array(
        &#39;realname&#39; => &#39;b&#39;,
        &#39;mobile&#39; => &#39;12345678912&#39;,
        &#39;department_name&#39; => &#39;技术&#39;,
    ),
);
foreach($rs as $i => $item){
	$excel->add_body([
		$i + 1,
		$item[&#39;realname&#39;],
		$item[&#39;mobile&#39;],
		$item[&#39;department_name&#39;],
	]);
}
$excel->downLoad();
exit();

관련 권장 사항:

PHP 내보내기 EXCEL 빠른 개발 가이드

php 기본 방법을 사용하여 Excel 인스턴스 공유 내보내기

php Excel 파일 가져오기 및 내보내기

위 내용은 Excel의 PHP 내보내기 HTML 콘텐츠 파일 클래스 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.