讨论数量:
我用的是phpoffice插入的,大概是这样:
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet(0);
$sheet->setTitle($user->username); //tab 标题
$sheet->mergeCells('A1:E1');
$sheet->setCellValue('A1', "职业技能等级认定准考证");
$sheet->setCellValue('A2', "姓 名");
$sheet->setCellValue('B2', $user['username']);
$sheet->setCellValue('C2', "性 别");
$sheet->setCellValue('D2', $user->sex == 1 ? "男": "女");
if (!is_null($user['avatar']) && file_exists($this->getPublicPath($user['avatar']))){
$drawing = new Drawing();
$drawing->setName($user->username);
//$avatar = str_replace("\\","/", app()->getRootPath()."public/storage/student/53012600.png"); //示例
$drawing->setPath($this->getPublicPath($user['avatar'])); //需要一个服务器上的完成路径:
$drawing->setWidth("130");
$drawing->setHeight("125");
$drawing->setOffsetX(3); // 图片横向偏移
$drawing->setOffsetY(3); // 图片纵向偏移
$drawing->setCoordinates("E2"); // 插入位置
$drawing->setWorksheet($sheet);
}else{
$sheet->setCellValue('E2', "无");
}
// ...code
return [
BeforeSheet::class => function (BeforeSheet $sheet) {
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
// 将文件读取到到$spreadsheet对象中
$spreadsheet = $reader->load(storage_path('app/public/') . request()->input('file'));
// 获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
$worksheet = $spreadsheet->getSheet(0);
// 该变量可判断excel中是否有图片,如果有图片则进入循环
if ($allImage = $worksheet->getDrawingCollection()) {
foreach ($allImage as $drawing) {
//获取excel中的图片,转成二进制流
$filename = $drawing->getPath();
$imageData = file_get_contents($filename);
//获取二进制流图片格式,返回true就是能识别的图片
if ($type = getimagesizefromstring($imageData)) {
$base64String = 'data:' . $type['mime'] . ';base64,' . base64_encode($imageData);
// 写进表格中
$sheet->sheet->setCellValue($drawing->getCoordinates(), $base64String);
}
}
}
}
];
根据上面老哥写法,改了下就可以兼容下。
之前我也想用 Laravel excel 导入图片,发现做不到,最后用这个导入的 phpspreadsheet.readthedocs.io/en/l...