php网页导出excel,php导出Excel里HTML内容文件类方法

本文主要和大家分享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 = '

';

if (is_array($head_arr) && !empty($head_arr)){

foreach ($head_arr as $head){

if (!is_array($head)){

$head_html .= "

" . $this->get_value($head) . "\n";

}else {

$width = !empty($head[1]) ? $head[1] : $this->_default_width;

$other = isset($head[2]) ? $head[2] : [];

$head_html .= "

if(!empty($other) && is_array($other)){

foreach($other as $k => $v){

$head_html .= " {$k}='{$v}' ";

}

}

$head_html .= " >" . $this->get_value($head[0]) . "

\n";

}

}

}

$head_html .= "

\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 = '

';

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 .= "

" . $this->get_value($body) . "\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 .= "

if(!empty($other) && is_array($other)){

foreach($other as $k => $v){

$body_html .= " {$k}='{$v}' ";

}

}

$body_html .= ">" . $this->get_value($body[0]) . "

\n";

}

}

}

$body_html .= "

\n";

$this->_body .= $body_html;

}

/**

* 下载excel文件

*/

public function downLoad($filename = ''){

$this->add_talbe();

$chare_set = $this->_default_charset;

$down_content = '' . "\n";

$down_content .= $this->_common_style;

foreach ($this->_tables as $t_key => $table){

if (empty($table['head']) && empty($table['body'])){

continue;

}

$down_content .= '

$down_content .= $table['head'] . "\n";

$down_content .= $table['body'] . "\n";

$down_content .= '

';

if ($this->_table_brs[$t_key]){

$down_content .= "
";

}

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

相关推荐:

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值