php带出excel表格,phpexcel单表格公共导出

通用导出方法,传入对应参数

/**

* 单表格公共导出excel

* $title 表格标题

* $rule 导出规则(array('列头1','字段',宽度,对齐方式,对齐参数生效最后一行),array('列头2','字段',宽度),array('列头3','字段',宽度)),数组元素个数就是列数

* $list 要导出的数据,二维数组

* 做了部分不完全扩展,如有疑问联系关松鹤

**/

public static function _export_common_excel($title,$rule,$list){

$objPHPExcel = new Phpexcel();

$objPHPExcel->getProperties()->setCreator("ctos")

->setLastModifiedBy("ctos")

->setTitle("Office 2007 XLSX Test Document")

->setSubject("Office 2007 XLSX Test Document")

->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")

->setKeywords("office 2007 openxml php")

->setCategory("Test result file");

//获取列函数

$columncount = count($rule);

$loop = self::loop($columncount);

$lastcolumn = $loop[($columncount-1)];

foreach($rule as $ki => $vo){

// set width

$objPHPExcel->getActiveSheet()->getColumnDimension($loop[$ki])->setWidth($vo[2]);

}

// 字体和样式

$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(12);

$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);

$objPHPExcel->getActiveSheet()->getStyle('A2:'.$lastcolumn.'2')->getFont()->setBold(true);

$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(16);

//echo 44;exit;

// 设置水平居中

$objPHPExcel->getActiveSheet()->getStyle('A1:'.$lastcolumn.'1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

$objPHPExcel->getActiveSheet()->getStyle('A1:'.$lastcolumn.'1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::VERTICAL_CENTER);

$objPHPExcel->getActiveSheet()->getStyle('A2:'.$lastcolumn.'2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

$objPHPExcel->getActiveSheet()->getStyle('A2:'.$lastcolumn.'2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::VERTICAL_CENTER);

// 合并

$objPHPExcel->getActiveSheet()->mergeCells('A1:'.$lastcolumn.'1');

// $objPHPExcel->getActiveSheet()->mergeCells('B2:D2');

$objPHPExcel->setActiveSheetIndex(0)

->setCellValue('A1',$title);

foreach($rule as $ki => $vo){

$objPHPExcel->setActiveSheetIndex(0)->setCellValue($loop[$ki].'2', $vo[0]);

}

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

$objPHPExcel->getActiveSheet()->getStyle('A'.($k+3).':'.$lastcolumn.($k+3))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

$objPHPExcel->getActiveSheet()->getStyle('A'.($k+3).':'.$lastcolumn.($k+3))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::VERTICAL_CENTER);

$objPHPExcel->getActiveSheet()->getStyle($lastcolumn.($k+3))->getAlignment()->setShrinkToFit(true);

foreach($rule as $key => $val){

$objPHPExcel->getActiveSheet(0)->setCellValueExplicit($loop[$key] . ($k + 3), $v[$val[1]], PHPExcel_Cell_DataType::TYPE_STRING);

}

}

foreach($rule as $ki => $vo){

if(isset($vo[3]) && ($vo[3] == 'left')){

$end = $vo[4]?$vo[4]:(count($list)+3);

$objPHPExcel->getActiveSheet()->getStyle($loop[$ki].(0+3).':'.$loop[$ki].($end+0))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);

}

}

// Rename sheet

$objPHPExcel->getActiveSheet()->setTitle($title);

$objPHPExcel->setActiveSheetIndex(0);

// 输出

ob_end_clean();

header("Pragma: public");

header("Expires: 0");

header("Cache-Control:must-revalidate, post-check=0, pre-check=0");

header("Content-Type:application/force-download");

header("Content-Type:application/vnd.ms-execl");

header("Content-Type:application/octet-stream");

header("Content-Type:application/download");

$title = iconv("utf-8", "gb2312", $title);

header("Content-Disposition:attachment;filename=".$title.".xlsx");

header("Content-Transfer-Encoding:binary");

$xlsWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);

$xlsWriter->save('php://output');

}

/**

* 生成excel头数组

*/

public function loop($maxnum){

$loop = 0;

$charnum = 65;

$loop_arr = array();

for(; $loop < $maxnum; $loop++){

$quotient = intval($loop / 26);

$remainder = $loop % 26;

$f = $quotient>0? chr($charnum+$quotient-1) : '';

$s = $remainder>=0? chr($charnum+$remainder) : '';

$loop_arr[$loop] = $f . $s;

}

return $loop_arr;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值