美文网首页
php导出Excel包含图片

php导出Excel包含图片

作者: taobao | 来源:发表于2021-07-15 09:17 被阅读0次

导出excel,图片地址不能用远程地址,必须下载到本地,用本地地址

public static function exportExcelNewImg($fileName, $headArr, $data, $m_exportType = "Excel2007")
    {
        if (is_array($headArr) && is_array($data) && !empty($fileName)) {
            require_once("Excel/PHPExcel.php");
            require_once("Excel/PHPExcel/CachedObjectStorageFactory.php");
            $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory;
            PHPExcel_Settings::setCacheStorageMethod($cacheMethod);
            //创建新的PHPExcel对象
            $objPHPExcel = new PHPExcel();
            $objProps    = $objPHPExcel->getProperties();
            //
            //设置表头
            $fixkey = $key = ord("A");
            $prefix = '';


            foreach ($headArr as $v) {
                $colum = chr($key);
                $objPHPExcel->setActiveSheetIndex(0)->setCellValue($prefix . $colum . '1', $v);
                $objPHPExcel->getActiveSheet()->getStyle($prefix . $colum)->getAlignment()->setWrapText(true); // 设置单元格换行(不是自动换行 内容中有\n才会换行)
                $objPHPExcel->getActiveSheet()->getColumnDimension($prefix . $colum)->setAutoSize(true); // 设置单元格自动调整宽度
                if ($colum == 'Z') {
                    $key    = ord("@");
                    $prefix = chr($fixkey);
                    $fixkey++;
                }
                $key += 1;
            }
            $column      = 2;
            $objActSheet = $objPHPExcel->getActiveSheet();

            foreach ($data as $key => $rows) { //行写入
                $fixkey = $span = ord("A");
                $prefix = '';

                /*设置表格宽度*/
                $objActSheet->getColumnDimension('R')->setWidth(100)->setAutoSize(false);

                foreach ($rows as $keyName => $value) {// 列写入
                    $j = chr($span);
                    if (isset($value['image']) && is_array($value['image']) && !empty($value['image'])) {
                        /*设置表格高度*/
                        $objActSheet->getRowDimension( $column)->setRowHeight(180);

                        foreach ($value['image'] as $n => $img) {
                            $img = "http:{$img}";
//                          $img = "http://image.xidibuy.com/image/image.ba57b3db04a9456b082a02bbf938fc8e3d9fae2ec039f7613500842dd515aa3d.jpeg/720x1280/180";
                            $temp_pic = self::download($img, UPLOAD_PATH . '/tmp/');
                            $local_pic_path = './upload/tmp/' . $temp_pic;
                            if (file_exists($local_pic_path)) {
                                //                            图片字段
                                $objDrawing = new PHPExcel_Worksheet_Drawing();

                                /*设置图片路径*/
                                $objDrawing->setPath($local_pic_path);
                                /*设置图片宽度*/
                                $objDrawing->setWidth(180);//写入图片宽度
                                /*设置图片高度*/
                                $objDrawing->setHeight(180);
//                                $objDrawing->getShadow()->setVisible(true);
//                                $objDrawing->getShadow()->setDirection(50);
                                /*设置图片所在单元格的格式*/
                                $objDrawing->setOffsetX($n*200);
                                /*设置图片要插入的单元格*/
//                                echo $prefix . $j . $column;die();
                                $objDrawing->setCoordinates($prefix . $j . $column);
                                $objDrawing->setWorksheet($objActSheet);
                            } else {
//                                echo $local_pic_path;
//                                die('文件不存在');
                                $objActSheet->setCellValueExplicit($prefix . $j . $column, '无图片');
                            }
                        }
                    } else {
                        $objActSheet->setCellValueExplicit($prefix . $j . $column, $value);
                    }
                    if ($j == 'Z') {
                        $span   = ord("@");
                        $prefix = chr($fixkey);
                        $fixkey++;
                    }
                    $span++;
                }
                $column++;
            }
            //设置活动单指数到第一个表,所以Excel打开这是第一个表
            $objPHPExcel->setActiveSheetIndex(0);

            if ($m_exportType == "Excel2007") {
                //将输出重定向到一个客户端web浏览器(Excel2007)
                header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
                header("Content-Disposition: attachment; filename=\"$fileName\"");
                header('Cache-Control: max-age=0');
                $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
                $objWriter->save('php://output'); //文件通过浏览器下载
            } elseif ($m_exportType == "Excel5") {
                header('Content-Type: application/vnd.ms-excel');
                header("Content-Disposition: attachment; filename=\"$fileName\"");
                header('Cache-Control: max-age=0');
                $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
                $objWriter->save('php://output');
            }
        } else {
            return FALSE;
        }
    }
public static function download($url,$path='images/')
    {
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);//信任任何证书
        $file = curl_exec($ch);
        curl_close($ch);
        $url = preg_replace('/\/\d+x\d+\/\d+/', '', $url);
        $filename = pathinfo($url,PATHINFO_BASENAME);
        $resource = fopen($path.$filename,'a');
        fwrite($resource, $file);
        fclose($resource);
        return $filename;
    }

相关文章

网友评论

      本文标题:php导出Excel包含图片

      本文链接:https://www.haomeiwen.com/subject/acjfoktx.html