贴出核心代码:
/**
* BOM数据导出
* @Author: 小枫哥
* @Date: 2018-10-26 09:15:20
* @param $modelfile <p>模板文件</p>
* @param $downfileName <p>生成的excel文件</p>
* @param $data <p>数据源</p>
*/
static function phptoexcel($modelfile, $downfileName, $data)
{
$filename = $modelfile;
$modelfile = "../../ExcelModal/$modelfile";
// 判断模板文件是否存在
if(!file_exists($modelfile)){
die('服务器上没有找到该模板');
}
include ROOT_PATH.'phpexcel/PHPExcel.php';
// 判断Excel文件版本类型
$excelType = PHPExcel_IOFactory::identify( $modelfile );
if ($excelType == 'Excel5'){
include_once ROOT_PATH.'PHPexcel/PHPExcel/Reader/Excel5.php';
include_once ROOT_PATH.'phpexcel/PHPExcel/Writer/Excel5.php';
}else if ($excelType == 'Excel2007')
{
include_once ROOT_PATH.'PHPexcel/PHPExcel/Reader/Excel2007.php';
include_once ROOT_PATH.'phpexcel/PHPExcel/Writer/Excel2007.php';
}
// 设置PHPExcel缓存机制
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_wincache;
$cacheSettings = array( 'cacheTime' => 600 );
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
//创建一个excel对象和一个reader
$objPHPExcel = new PHPExcel();
$objReader = PHPExcel_IOFactory::createReader ( $excelType );
//读取Excel模板
$objPHPExcel = $objReader->load ( $modelfile );
$objPHPExcel->setActiveSheetIndex(0);
$sheettmp = $objPHPExcel->getActiveSheet();
$sheettmp->setCellValue('C4', $data[0]['cVenAbbName']);
$sheettmp->setCellValue('C5', $data[0]['cColor']);
$activerow=9;
$sheettmp-> insertNewRowBefore(10, sizeof($skulist));
//移除行数
$sheettmp->removeRow(10, 1);
foreach ($data as $k => $v) {
$sheettmp->setCellValue('C'.$activerow, $v['cColor']);
$activerow++;
}
// 合并纵向单元格
$lastrow = $activerow -1 ;
$mergecell=array('D','E');//要合并的列
$value1='';
$value2='';
if(sizeof($mergecell)>0){
foreach ($mergecell as $value){
$num=0;
for($i=2;$i<=$lastrow;$i++)
{
$value1=$sheettmp->getCell($value.$i)->getValue();
$value2=$sheettmp->getCell($value.($i+1))->getValue();
$num++;
if($value1<>$value2 or $i==$lastrow){
if($num>1){
$sheettmp->mergeCells($value.($i-$num+1).':'.$value.($i));
}
$num=0;
}
}
}
}
//直接输出到浏览器
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");
header('Content-Disposition:attachment;filename="'.$downfileName.'"');
header("Content-Transfer-Encoding:binary");
if ($excelType == 'Excel5'){
$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
}elseif ($excelType == 'Excel2007')
{
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
}
$objWriter->save('php://output');
echo "<script>window.close;</script>";
die;
}