时间: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网其它相关文章!