时间:2021-07-01 10:21:17 帮助过:13人阅读
<?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内容文件类方法的详细内容,更多请关注Gxl网其它相关文章!