自定义excel导出类,没有任何文件引用,当没有composer或者不方便使用时,可哪去试试
<?php
/**
* PHP 导入导出类
* PHP Version 7.0
*/
class excel
{
/**
* 导出excel
* @param array $data 导入数据
* @param string $savefile 导出excel文件名
* @param array $fileheader excel的表头
* @param string $sheetname sheet的标题名
*/
public function exportExcel($savefile, $fileheader, $data, $sheetname = 'Sheet1'){
$savefile .= date('_YmdHis');//or $xlsTitle 文件名称可根据自己情况设定
require_once dirname(__FILE__) . '/php_excel/PHPExcel.php';
$excel = new PHPExcel();
//设置excel属性
$objActSheet = $excel->getActiveSheet();
//根据有生成的excel多少列,$letter长度要大于等于这个值
$letter = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');
//设置当前的sheet
$excel->setActiveSheetIndex(0);
//设置sheet的name
$objActSheet->setTitle($sheetname);
//设置表头
for($i = 0;$i < count($fileheader);$i++) {
//单元宽度自适应,1.8.1版本phpexcel中文支持勉强可以,自适应后单独设置宽度无效
//$objActSheet->getColumnDimension("$letter[$i]")->setAutoSize(true);
//设置表头值,这里的setCellValue第二个参数不能使用iconv,否则excel中显示false
$objActSheet->setCellValue("$letter[$i]1",$fileheader[$i]);
//设置表头字体样式
$objActSheet->getStyle("$letter[$i]1")->getFont()->setName('微软雅黑');
//设置表头字体大小
$objActSheet->getStyle("$letter[$i]1")->getFont()->setSize(12);
//设置表头字体是否加粗
$objActSheet->getStyle("$letter[$i]1")->getFont()->setBold(true);
//设置表头文字垂直居中
$objActSheet->getStyle("$letter[$i]1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//设置文字上下居中
$objActSheet->getStyle($letter[$i])->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
//设置表头外的文字垂直居中
$excel->setActiveSheetIndex(0)->getStyle($letter[$i])->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}
//单独设置D列宽度为15
$objActSheet->getColumnDimension('D')->setWidth(15);
//这里$i初始值设置为2,$j初始值设置为0,自己体会原因
for ($i = 2;$i <= count($data) + 1;$i++) {
$j = 0;
foreach ($data[$i - 2] as $key=>$value) {
//不是图片时将数据加入到excel,这里数据库存的图片字段是img
if($key != 'img'){
$objActSheet->setCellValue("$letter[$j]$i",$value);
$objActSheet->getStyle("$letter[$j]$i")->getAlignment()->setWrapText(true);
}
//是图片是加入图片到excel
if($key == 'img'){
if($value != ''){
$value = iconv("UTF-8","GB2312",$value); //防止中文命名的文件
// 图片生成
$objDrawing[$key] = new \PHPExcel_Worksheet_Drawing();
// 图片地址
$objDrawing[$key]->setPath('.\Uploads'.$value);
// 设置图片宽度高度
$objDrawing[$key]->setHeight('80px'); //照片高度
$objDrawing[$key]->setWidth('80px'); //照片宽度
// 设置图片要插入的单元格
$objDrawing[$key]->setCoordinates('D'.$i);
// 图片偏移距离
$objDrawing[$key]->setOffsetX(12);
$objDrawing[$key]->setOffsetY(12);
//下边两行不知道对图片单元格的格式有什么作用,有知道的要告诉我哟^_^
//$objDrawing[$key]->getShadow()->setVisible(true);
//$objDrawing[$key]->getShadow()->setDirection(50);
$objDrawing[$key]->setWorksheet($objActSheet);
}
}
$j++;
}
//设置单元格高度,暂时没有找到统一设置高度方法
$objActSheet->getRowDimension($i)->setRowHeight('80px');
}
header('Content-Disposition: attachment;filename="' . $savefile . '.xlsx"');
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
// 用户下载excel
$objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$objWriter->save('php://output');
// 保存excel在服务器上
//$objWriter = new PHPExcel_Writer_Excel2007($excel);
//或者$objWriter = new PHPExcel_Writer_Excel5($excel);
//$objWriter->save("保存的文件地址/".$savefile);
exit();
}
}