php导出Excel里HTML内容文件类方法

小云云
小云云 原创
2023-03-21 14:20:01 1849浏览

本文主要和大家分享php导出Excel里HTML内容文件类方法,主要以代码的形式和大家分享,希望能帮助到大家。

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

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

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

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

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

    /**
     * 设置默认对齐方式
     */
    public function set_align($align = 'center'){
        $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 = ''){
        $this->_common_style = $style;
    }

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

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


    /**
     * 添加表头
     * @param array $head_arr = array(
     *     // array(array(字段名1, 宽度, 其他设置), 字段名2)  宽度 其他设置(如跨列,跨行等) 可选
     *     array(
     *         array('序号', 100, ['colspan' => 2, 'rowspan' => 2]),
     *         '订单号',
     *         '同行客户'
     *     )
     * )
     *
     */
    public function add_head($head_arr = array()){
        $head_html = '<tr>';
        if (is_array($head_arr) && !empty($head_arr)){
            foreach ($head_arr as $head){
                if (!is_array($head)){
                    $head_html .= "<th width='" . $this->_default_width . "' bgcolor='" . $this->_head_bgcolor . "'>" . $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='" . $width . "' bgcolor='" . $this->_head_bgcolor . "'";
                    if(!empty($other) && is_array($other)){
                        foreach($other as $k => $v){
                            $head_html .= " {$k}='{$v}' ";
                        }
                    }
                    $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, 'left', 'style="..."', ['colspan' => 2, 'rowspan' => 2]),
     *         array('2', 'right'),
     *         3
     *     )
     * )
     *
     * @param $deal_long_num  是否处理长度较长的数字字符串   防止转换为科学计数法
     *
     */
    public function add_body($body_arr = array(), $deal_long_num = false){
        $body_html = '<tr>';
        if (is_array($body_arr) && !empty($body_arr)){
            foreach ($body_arr as $body){
                if (!is_array($body)){
                    $style = $deal_long_num ? 'style="mso-number-format:\'\@\';"' : '';
                    $body_html .= "<td bgcolor='" . $this->_body_bgcolor . "' align='" . $this->_default_align . "' {$style}>" . $this->get_value($body) . "</td>\n";
                }else {
                    $align = isset($body[1]) ? $body[1] : $this->_default_align;
                    $style = isset($body[2]) ? $body[2] : '';
                    $other = isset($body[3]) ? $body[3] : [];

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

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

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

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

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

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

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

            $down_content .= "\n";
        }

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

        force_download($filename, $down_content);
    }

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

使用举例:

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

相关推荐:

PHP导出EXCEL快速开发指南

php使用原生的方法导出excel实例分享

php导入及导出excel文件

以上就是php导出Excel里HTML内容文件类方法的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。