一、PHPexcel 导出功能,代码如下
PUBLIC function Save2Xls($SaaSClientKey, $data, $sheetName=NULL, $foramte=[])
{
$theader = $data['Key'];
$tData = $data['Value'];
$UPLOAD_RESOURCE_PATH = \PhalApi\DI()->config->get('config.UPLOAD_RESOURCE_PATH');
$EXPORT_RESOURCE_URL = \PhalApi\DI()->config->get('config.EXPORT_RESOURCE_URL');
$Path = $EXPORT_RESOURCE_URL.'/'.$SaaSClientKey;
$diskPath = $UPLOAD_RESOURCE_PATH.'/'.$Path;
//1.1 创建指定目录
$isExist = Tool::checkFileIsExist($diskPath);
if(!$isExist)
{
Tool::createDir($diskPath);
}
//1.2 在正式保存文件时要循环检验要保存的地址是否已经存在文件了,如果文件已经存在,就要重新命名,直到文件不存在为止
$isExist = TRUE;
$filename = empty($sheetName) ? '':$sheetName;
while(!!$isExist)
{
//i 文件重命名
$filename .= date('YmdHis');
$ext = 'xlsx';
$fileRename = $filename.'.'.$ext;
//ii 检测本地是否已存在该文件
$filePath = $diskPath.'/'.$fileRename;
$isExist = Tool::checkFileIsExist($filePath);
}
//2.0 保存到指定路径
$PHPExcel = new \PHPExcel_Lite();
$PHPExcel->exportExcel($filePath, $tData, $theader, $sheetName, $foramte);
//3.0 检测是否保存成功
$isExist = Tool::checkFileIsExist($filePath);
if(!$isExist)
{
return Response::CommonErrorStatus('保存失败');
}
$array = array('url' => $Path.'/'.$fileRename);
return Response::CommonSuccessStatus($array);
}
在上述代码中,导出数据生成xls,遇到了2个问题:
1.如何生成本地文件,而不是通过浏览器下载
2.如果下载文件名有中文,怎么解决
二、如何定制excel,比如标题加粗,标题块用指定颜色显示,比如内容用指定颜色填充
$objPHPExcel->getActiveSheet()->getStyle($j.'1')->applyFromArray(
array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT //当前块右对齐[包括里面文字]
),
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb' => $foramte[$k]['backgroundColor']) //当前块用什么颜色填充
),
'font' => array(
'color' => array('rgb' => $foramte[$k]['fontColor']), //字体颜色
),
'borders' => array(
'top' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN, //当前块边框[top]线条类型
'color' => array('rgb' => 'D4D4D4'), //当前块边框[top]线条颜色
),
'right' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => 'D4D4D4'),
),
'bottom' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => 'D4D4D4'),
),
'left' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => 'D4D4D4'),
),
),
)
);