PhpSpreadsheet 导出图片到 Excel
使用 Laravel Excel 3.1 版本来做导出图片到 Excel 的功能没有成功,后来作者回复了相关的写法 点击查看 因为回复的时候已经用 PhpSpreadsheet 实现了,所以没有再尝试 Laravel Excel 的写法
以下是 PhpSpreadsheet 导出部分的代码
public function export($data)
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
//设置sheet的名字 两种方法
$sheet->setTitle('phpspreadsheet——demo');
$spreadsheet->getActiveSheet()->setTitle('Hello');
//设置第一行小标题
$k = 1;
$sheet->setCellValue('A' . $k, '问题');
$sheet->setCellValue('B' . $k, '选项');
$sheet->setCellValue('C' . $k, '答案');
$sheet->setCellValue('D' . $k, '图片');
// 设置个表格宽度
$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(16);
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(80);
$spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(20);
// 垂直居中
$spreadsheet->getActiveSheet()->getStyle('A')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
$spreadsheet->getActiveSheet()->getStyle('B')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
$spreadsheet->getActiveSheet()->getStyle('C')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
$spreadsheet->getActiveSheet()->getStyle('D')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
$info = $data;
// 设置A单元格的宽度 同理设置每个
$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(20);
// 设置第三行的高度
$spreadsheet->getActiveSheet()->getRowDimension('3')->setRowHeight(50);
// A1水平居中
$styleArray = [
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
],
];
$sheet->getStyle('A1')->applyFromArray($styleArray);
// 将A3到D4合并成一个单元格
$spreadsheet->getActiveSheet()->mergeCells('A3:D4');
// 拆分合并单元格
$spreadsheet->getActiveSheet()->unmergeCells('A3:D4');
// 将A2到D8表格边框 改变为红色
$styleArray = [
'borders' => [
'outline' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
'color' => ['argb' => 'FFFF0000'],
],
],
];
// $sheet->getStyle('A2:E8')->applyFromArray($styleArray);
// 设置超链接
// $sheet->setCellValue('D6', 'www.baidu.com');
// $spreadsheet->getActiveSheet()->setCellValue('E6', 'www.baidu.com');
// 循环赋值
$k = 2;
foreach ($info as $key => $value) {
$sheet->setCellValue('A' . $k, $value['question']);
$sheet->setCellValue('B' . $k, $value['question_options']);
$sheet->setCellValue('C' . $k, $value['answer']);
$img = self::curlGet($value['img']);
$dir = public_path('/temp/image/');
$file_info = pathinfo($value['img']);
if (!empty($file_info['basename'])) { //过滤非文件类型
$basename = $file_info['basename'];
is_dir($dir) OR mkdir($dir, 0777, true); //进行检测文件是否存在
file_put_contents($dir . $basename, $img);
$drawing[$k] = new Drawing();
$drawing[$k]->setName('Logo');
$drawing[$k]->setDescription('Logo');
$drawing[$k]->setPath($dir . $basename);
$drawing[$k]->setWidth(80);
$drawing[$k]->setHeight(80);
$drawing[$k]->setCoordinates('D'.$k);
$drawing[$k]->setOffsetX(12);
$drawing[$k]->setOffsetY(12);
$drawing[$k]->setWorksheet($spreadsheet->getActiveSheet());
} else {
$sheet->setCellValue('D' . $k, '');
}
$sheet->getRowDimension($k)->setRowHeight(80);
$k++;
}
$file_name = date('Y-m-d', time()) . rand(1000, 9999);
// 第一种保存方式
/*$writer = new Xlsx($spreadsheet);
//保存的路径可自行设置
$file_name = '../'.$file_name . ".xlsx";
$writer->save($file_name);*/
// 第二种直接页面上显示下载
$file_name = $file_name . ".xls";
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $file_name . '"');
header('Cache-Control: max-age=0');
$writer = IOFactory::createWriter($spreadsheet, 'Xls');
// 注意createWriter($spreadsheet, 'Xls') 第二个参数首字母必须大写
$writer->save('php://output');
}
public function getClient(){
$client = new Client();
return $client;
}
public static function curlGet($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 这个是重点 请求https。
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 4年前 自动加精
@王某人的用户名 如果不是导出图片建议用 Laravel Excel 这个只是导出图片用的
这个导出图片的同时也导出其它数据吗?
我使用laravel-excel3.1导出图片我看了文档不过好像不太明白,做不出来导出图片,所以我想用你这种方法
好像不行,还是我的用法有问题,老哥可以加你的qq问问你吗
好的
老哥这个好像有点看不太懂
Class 'App\Http\Controllers\Admin\Drawing' not found 怎么引入这个
我看了下代码 如果我要导出这个图片,那么这个代码在运行的时候一定要把图片(或者图片在七牛云)下载到运行代码的服务器中才能生成这个带有图片的excel文件的吧。
怎么导出的时候 导出嵌入式单元格图片