/**
* 模板导出csv
* 教师通知
* @param string $expTitle 导出文件名.例:财务20201010
* @param string $template_name 模板名称:模板在本地的名称,如template.xls
* @param string $content 内容 标题/r/n内容。其中使用/r/n表示换行
* @param array $datas 数据 array("张三","18360608080","upload/img/ceshi.jpg","2020-10-10")
* @param int $start 开始循环载入数据的行数
* @param array $imgArr 数据中的图片占用位 例子:array(2),数据中,图片为第2位
* @return array
* @throws \PhpOffice\PhpSpreadsheet\Exception
* @throws \PhpOffice\PhpSpreadsheet\Reader\Exception
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
*/
public function getCsv($expTitle = "", $template_name = "", $content = "", $datas = [], $start = 15, $imgArr = [])
{
//模板名称
$filename = root_path()."/public/upload/template/".$template_name;
$objPHPExcel = IOFactory::load($filename);
//头部内容
$objPHPExcel->getActiveSheet()->setCellValue('A1', $content);
$objPHPExcel->getActiveSheet()->getStyle("A1")->getAlignment()->setWrapText(true);
//列表内容,15行开始
$cellName = 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');
foreach ($datas as $k => $v) {
$num = $k + $start;
foreach ($v as $key => $val) {
if (in_array($key, $imgArr)) {
//图片
if (empty($val) || !file_exists(root_path()."/public".$val)) {
continue;
}
$imgurl = root_path()."/public".$val;
$objDrawing[$k] = new Drawing;
$objDrawing[$k]->setPath($imgurl);
$objDrawing[$k]->setCoordinates($cellName[$key].$num);
$objDrawing[$k]->setWidth(35);
$objDrawing[$k]->setHeight(35);
//图片偏移距离
$objDrawing[$k]->setOffsetX(10);
// $objDrawing[$k]->setOffsetY(10);
$objDrawing[$k]->setWorksheet($objPHPExcel->getActiveSheet());
} else {
//填充内容
$objPHPExcel->getActiveSheet()->setCellValue($cellName[$key].$num, $val);
}
//设置列宽
$objPHPExcel->getActiveSheet(0)->getColumnDimension($cellName[$key])->setWidth(15);
//设置行高
$objPHPExcel->getActiveSheet()->getRowDimension($num)->setRowHeight(25);
}
}
$objPHPExcel->setActiveSheetIndex(0);
$objWriter = IOFactory::createWriter($objPHPExcel, 'Xls');
//新目录
$time = date("Ym", time());
$path = root_path()."/public/upload/xls/".$time ;
if (!file_exists($path)) {
mkdir($path, 0777, true);
chmod($path, 0777);
}
//生成不重复的名称,这里是封装好的,请自己更换自己的方法
$tool = new CodeTool();
$title = $tool->makeOrderNo("CSV");
$path = $path."/". $title . ".csv";
$objWriter->save($path);
$objPHPExcel->disconnectWorksheets();
$pathname = "/upload/xls/".$time."/". $title . ".csv";
$downloading = $_SERVER['HTTP_ORIGIN'].$pathname;
return array("path"=>$downloading,"name"=>$expTitle);
}
注:使用时候需要先安装phpOffice,并在方法头部引用
/**
* 注:需要配合使用composer下载安装PhpOffice
*/
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
xls模板样例: