php导出excel带图片6,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 协议》,转载必须注明作者和本文链接

www.haowuliaoa.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PhpSpreadsheet可以将Excel表格中的图片导出,只需要在导出Excel时对图片进行处理即可。 首先需要将图片插入到Excel表格中,可以使用`PhpSpreadsheet\Worksheet\Drawing`类来实现。例如: ```php use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; // 创建一个 Drawing 对象 $drawing = new Drawing(); $drawing->setName('Logo'); $drawing->setDescription('Logo'); $drawing->setPath('path/to/image.jpg'); $drawing->setHeight(50); $drawing->setCoordinates('A1'); // 将 Drawing 对象添加到工作表中 $worksheet->getRowDimension(1)->setRowHeight(80); $worksheet->getColumnDimension('A')->setWidth(30); $worksheet->setCellValue('A1', '这是一个图片的单元格'); $worksheet->setDrawing($drawing); ``` 上面的代码中,我们创建了一个Drawing对象,并设置了图片的路径、高度、位置等属性。然后将Drawing对象添加到工作表中,再将单元格的值设置为图片的描述。 接下来,可以使用`PhpSpreadsheet\IOFactory`类将工作表导出Excel文件。例如: ```php use PhpOffice\PhpSpreadsheet\IOFactory; // 创建一个工作簿对象 $spreadsheet = new Spreadsheet(); $worksheet = $spreadsheet->getActiveSheet(); // 插入图片到工作表中 // 导出Excel文件 $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('path/to/exported.xlsx'); ``` 这样就可以将图片Excel表格导出了。需要注意的是,导出Excel文件中可能会出现图片失真或者位置偏移的情况,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值