Maison >développement back-end >tutoriel php >Méthode de classe de fichier de contenu HTML d'exportation PHP dans Excel

Méthode de classe de fichier de contenu HTML d'exportation PHP dans Excel

小云云
小云云original
2018-03-15 14:29:332516parcourir

Cet article partage principalement avec vous la méthode d'exportation de fichiers de contenu HTML dans Excel via php. Il est principalement partagé avec vous sous forme de code.

<?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;
        }
    }
}

Exemple d'utilisation :

$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();

Recommandations associées :

Guide de développement rapide PHP Export EXCEL

php utilise des méthodes natives pour exporter le partage d'instances Excel

php importe et exporte des fichiers Excel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn