近来由于公司做一个内部系统,需要大量的Excel导入导出功能,并且在读表后需在网页上显示出与Excel一样的样式来,刚开始拿到这个东西的时候感觉也没什么,不就读个表么,后面遇到了表头中有合并的列和行时,事情就开始比较棘手了,于是乎寻思着写了一个Excel表头转HTML表头的函数,现在分享出来,简单测试过试用多种表头结构,如果有小伙伴发现问题还请不吝赐教!
直接上代码:
/**
* 表头合成html标签
* @param $thead
*/
public function theadcomposehtml($thead){
// 获取列数据
$cold = array();
$rowd = array();
// 组装表头
foreach($thead as $k => $row){
// 获取行数据
$space = array();
foreach($row as $kcc => $columnc){
// 计算行
if(empty($columnc)){
if(isset($space[$hand])){
$space[$hand] = $space[$hand] + 1;
}
}else{
$hand = $kcc;
$space[$hand] = 1;
}
// 计算列
if(empty($columnc)){
if(isset($cold[$k - 1][$kcc])){
$cold[$k - 1][$kcc] = $cold[$k - 1][$kcc] + 1;
}
}else{
$cold[$k][$kcc] = 1;
}
}
$rowd[$k] = $space;
}
$th = '';
foreach($thead as $k => $row){
$th .= '<tr>';
foreach($row as $kc => $columnc){
if(!empty($columnc)){
if(isset($cold[$k][$kc])){
if($cold[$k][$kc] > 1){
if(isset($rowd[$k][$kc])){
if($rowd[$k][$kc] > 1){
$th .= '<th rowspan="'.$cold[$k][$kc].'" colspan="'.$rowd[$k][$kc].'">'.$columnc.'</th>';
}else{
$th .= '<th rowspan="'.$cold[$k][$kc].'">'.$columnc.'</th>';
}
}else{
$th .= '<th rowspan="'.$cold[$k][$kc].'">'.$columnc.'</th>';
}
}else{
if(isset($rowd[$k][$kc])){
if($rowd[$k][$kc] > 1){
$th .= '<th colspan="'.$rowd[$k][$kc].'">'.$columnc.'</th>';
}else{
$th .= '<th>'.$columnc.'</th>';
}
}else{
$th .= '<th>'.$columnc.'</th>';
}
}
}else{
if(isset($rowd[$k][$kc])){
if($rowd[$k][$kc] > 1){
$th .= '<th colspan="'.$rowd[$k][$kc].'">'.$columnc.'</th>';
}
}else{
$th .= '<th>'.$columnc.'</th>';
}
}
}
}
$th .= '</tr>';
}
return $th;
}
使用方法:(直接将PHPExcel读到的表头部分直接以数组的形式放进去就可以得到html形式的表头)
// 表头数据
Array
(
[1] => Array
(
[A] => 自编号
[B] => 车牌号
[C] => 交强险
[D] =>
[E] =>
[F] =>
[G] =>
[H] =>
[I] => 商业险
[J] =>
[K] =>
[L] =>
[M] =>
[N] =>
[O] =>
[P] =>
[Q] =>
)
[2] => Array
(
[A] =>
[B] =>
[C] => 保险单号
[D] => 起始日期
[E] => 截止日期
[F] => 车船税
[G] => 交强险
[H] => 保险公司
[I] => 保险单号
[J] => 起始日期
[K] => 截止日期
[L] => 车损
[M] => 三者
[N] => 不计免赔
[O] => 自燃
[P] => 承运人
[Q] => 保险公司
)
)