文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ThinkPHP5使用PHPExcel导出excel数据表(显示图片,附带解析)

2023-09-01 18:47

关注

PHPExcel下载以及示例

PHPExcel下载地址:    

        https://github.com/PHPOffice/PHPExcel

下载完后解压目录如下(classes文件夹是我们所需要的)

        Classes目录下是PHPExcel的源代码文件:PHPExcel.php文件是类库的接口,外部的PHP代码通过它来实现对PHPExcel的调用;PHPExcel目录下是各种不同文档(如Excel、Excel2007、PDF等)的读取和生成的具体操作代码,它们由Classes目录下的PHPExcel.php文件通过工厂模式统一进行调用。

        Documentation目录下是PHPExcel的官方帮助文档,尤其是API目录下网页文件全部是PHPExcel的API帮助文档,而其它的则是对这个开源项目的介绍。

        Examples目录下是PHPExcel的将近40个示例小程序,可以与Classes目录一同放到Apache+PHP环境下进行测试与学习。

 3.把classes文件夹改名为PHPExcel放入项目的vendor目录下(PHPExcel类库就扩展完成了)

 

 

然后需要的时候使用vendor进行导入

导出数据示例:

    public function outExcel(){        //1.清除缓冲区,避免乱码        //2.导入PHPExcel类库        //3.查询出数据库数据        //4.实例化PHPExcel对象        //5.设置sheet的名称,以及单元格字段信息        //6.设置内容        //7.通过PHPExcel_IOFactory的写函数将上面数据写出来        //8.设置表格文件的名称        //9.生成并下载表格        //====================================================                //1.清除缓冲区,避免乱码        ob_end_clean();        //2.导入PHPExcel类库        vendor("PHPExcel.PHPExcel");        vendor("PHPExcel.PHPExcel.IOFactory");        vendor("PHPExcel.PHPExcel.Writer.Excel2007");                //3.查询出数据库数据        $data = get_datalist('people');        //4.实例化PHPExcel对象                  $objPHPExcel = new \PHPExcel();//通过new关键字创建空白文档          $PHPWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);//用于2007版本格式                //5.设置sheet的名称,以及单元格字段信息        $objPHPExcel->getActiveSheet()->setTitle('test'); //获取当前的工作表并且设置工作表名称        $objPHPExcel->setActiveSheetIndex(0)//设置sheet(工作表)的起始位置为0            ->setCellValue('A1', 'ID编号')  //设置单元格字段信息            ->setCellValue('B1', '商品名称')            ->setCellValue('C1', '商品价钱');        //6.设置内容        $count = count($data);  //计算有多少条数据        //设置内容 i=2表示从第二段开始设值        for ($i = 2; $i <= $count + 1; $i++) {        //填入数据详情是这样的 A2,data[0]['Id'];            //                   A3,data[1]['id'];      以此类推            $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $data[$i - 2]['Id']);            $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $data[$i - 2]['name']);            $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $data[$i - 2]['headimg']);        }                //7.通过PHPExcel_IOFactory的写函数将上面数据写出来        $PHPWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");                //8.设置表格文件的名称        $outputFileName = 'total.xls';        header("Content-Type: application/force-download");        header("Content-Type: application/octet-stream");        header("Content-Type: application/download");        header('Content-Disposition:inline;filename="' . $outputFileName . '"');        header("Content-Transfer-Encoding: binary");        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");        header("Pragma: no-cache");        //9.生成并下载表格        $PHPWriter->save("php://output");    }

踩过的一些坑

        使用vendor导入的对象实例化需要加"\" 

        例如:$objPHPExcel = new \PHPExcel();

导出数据加图片示例:

    public function outExcel(){        //1.清除缓冲区,避免乱码        //2.导入PHPExcel类库        //3.查询出数据库数据        //4.实例化PHPExcel对象        //5.设置sheet的名称,以及单元格字段信息        //6.设置内容(在此处添加导入图片的代码)        //7.通过PHPExcel_IOFactory的写函数将上面数据写出来        //8.设置表格文件的名称        //9.生成并下载表格        //====================================================                //1.清除缓冲区,避免乱码        ob_end_clean();        //2.导入PHPExcel类库        vendor("PHPExcel.PHPExcel");        vendor("PHPExcel.PHPExcel.IOFactory");        vendor("PHPExcel.PHPExcel.Writer.Excel2007");                //3.查询出数据库数据        $data = get_datalist('people');        //4.实例化PHPExcel对象        $objPHPExcel = new \PHPExcel();        $xlsWriter = new \PHPExcel_Writer_Excel5($objPHPExcel);//用其他版本格式        //5.设置当前sheet和单元格信息        $objPHPExcel->getActiveSheet()->setTitle('test'); //设置sheet名称        $objActSheet=$objPHPExcel->setActiveSheetIndex(0)//设置sheet的起始位置为0            ->setCellValue('A1', 'ID编号')  //设置单元格字段信息            ->setCellValue('B1', '姓名')            ->setCellValue('C1', '图片');        // 设置C列单元格宽度为15(用来放置图片)        $objActSheet->getColumnDimension("C")->setWidth(15); // 列宽                //6.设置内容        $count = count($data);  //计算有多少条数据        //设置内容 i=2表示从第二段开始设值        for ($i = 2; $i <= $count + 1; $i++) {        //填入数据详情是这样的 A2,data[0]['Id'];            //                   A3,data[1]['id'];      以此类推            $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $data[$i - 2]['Id']);            $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $data[$i - 2]['name']);            //$objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $data[$i - 2]['headimg']);            //导入图片代码方法一:无法获取网络图片,只可导入本地图片!!!!!============                        // $objDrawing = new \PHPExcel_Worksheet_Drawing();//图片生成                        // //获取图片路径              // $objDrawing->setPath("本地图片路径");            // //设置宽度高度            // $objDrawing->setHeight(220);//照片高度            // $objDrawing->setWidth(220); //照片宽度            // //             // $objDrawing->setCoordinates('C' . $i);            // // 图片偏移距离            // $objDrawing->setOffsetX(0);            // $objDrawing->setOffsetY(0);            // $objDrawing->setWorksheet($objPHPExcel->getActiveSheet());                        //导入图片代码方法二 :可以导入网络图片========================            $objDrawing = new \PHPExcel_Worksheet_MemoryDrawing();            $imgPath = $data[$i - 2]['headimg'];//获取图片路径            // 截取图片的格式,用不同的方法            $end = substr($imgPath, -3);            if ($end == 'jpg' || $end == 'peg') {                $img = @imagecreatefromjpeg($imgPath);            }else if ($end == 'png') {                $img = @imagecreatefrompng($imgPath);            }else if ($end == 'gif') {                $img = @imagecreatefromgif($imgPath);            }            $objDrawing->setImageResource($img);//图片格式            $objDrawing->setRenderingFunction(\PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT);//渲染方法            $objDrawing->setMimeType(\PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_DEFAULT);                        $objDrawing->setHeight(100);//照片高度            $objDrawing->setWidth(100); //照片宽度            $objDrawing->setCoordinates('C' . $i);//图片要插入的单元格                        $objDrawing->setOffsetX(8);//图片X轴偏移            $objDrawing->setOffsetY(8);//图片Y轴偏移            $objDrawing->setWorksheet($objPHPExcel->getActiveSheet());            //设置每一行高度            $objActSheet->getRowDimension($i)->setRowHeight(100); // 行高          }        //7.通过PHPExcel_IOFactory的写函数将上面数据写出来        $xlsWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");                //8.设置表格文件的名称        $outputFileName = 'total.xls';        header("Content-Type: application/force-download");        header("Content-Type: application/octet-stream");        header("Content-Type: application/download");        header('Content-Disposition:inline;filename="' . $outputFileName . '"');        header("Content-Transfer-Encoding: binary");        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");        header("Pragma: no-cache");        //9.生成并下载表格        $xlsWriter->save("php://output");    }

附上PHPExcel一些常用的代码段:

// 通常PHPExcel对象有两种实例化的方式  // 1. 通过new关键字创建空白文档  $phpexcel = new PHPExcel();    // 2. 通过读取已有的模板创建  $phpexcel = PHPExcel_IOFactory::createReader("Excel5")->load("template.xls");      // 设置文档属性  $phpexcel->getProperties()->setCreator("Liu Jian") // 文档作者->setLastModifiedBy("Liu Jian") // 最后一次修改者->setTitle("Office 2003 XLS Test Document") // 标题->setSubject("Office 2003 XLS Test Document") // 主题->setDescription("Test document for Office 2003 XLS, generated using PHPExcel.") // 备注->setKeywords("office 2003 openxml php") // 关键字->setCategory("Test result file"); // 类别  // 默认状态下,新创建的空白文档(通过new)只有一个工作表(sheet),且它的编号(index)为0  // 可以通过如下的方式添加新的工作表  $phpexcel->createSheet(1);    // 获取已有编号的工作表  $sheet = $phpexcel->getSheet(1);    // 设置当前激活的工作表编号  $phpexcel->setActiveSheetIndex(1);    // 获取当前激活的工作表  $sheet = $phpexcel->getActiveSheet();    // 得到工作表之后就可以操作它的单元格以修改数据了  // 修改工作表的名称  $sheet->setTitle("Test");    // 设置单元格A5的值  $sheet->setCellValue("A5", date('Y-m-d h:i:s'));    // 设置第3行第5列(E3)的值  $sheet->setCellValueByColumnAndRow(4, 3, date('Y-m-d h:i:s'));    // 获取单元格A5的值  $sheet->getCell("A5")->getValue();    // 合并单元格  $sheet->mergeCells("C3:G6");    // 拆分合并的单元格  $sheet->unmergeCells("C3:G6");    // 设置第3行的属性  $sheet->getRowDimension(3)->setRowHeight(100) // 行高->setVisible(true) // 是否可见,默认为true ->setRowIndex(6) // 变更行号为6->setOutlineLevel(5); // 优先级别,默认为0,参数必须是0到7    // 设置第F列的属性  // getColumnDimension("F")可以用getColumnDimensionByColumn(5)代替  $sheet->getColumnDimension("F")->setWidth(200) // 列宽     ->setColumnIndex("I") // 变更列号为I     ->setVisible(false) // 是否可见     ->setAutoSize(true); // 自动适应列宽                // 在第3行前面插入1行,该行将变成新的第3行,其它的依次下移1行  $sheet->insertNewRowBefore(3, 1);    // 在第C行前面插入1列,该列将变成新的第C列,其它的依次右移1列  $sheet->insertNewColumnBefore("C", 1); // 方法一  $sheet->insertNewColumnBeforeByIndex(2, 1); // 方法二,第C列又是第2列    // 获取单元格D3的样式对象  $style = $sheet->getStyle("D3"); // 等价于getStyleByColumnAndRow(3, 3)    // 设置该单元格的字体属性  $style->getFont()->setBold(true) // 是否粗体                   ->setSize(16) // 字号                   ->setName("Gungsuh") // 字体名,只适用于外文字体                   ->setItalic(true) // 是否斜体                   ->setStrikethrough(true) // 是否有删除线                   ->setUnderline(PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING) // 下划线类型                   ->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); // 字体颜色                     // 设置该单元格的背景填充属性  $style->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID) // 填充模式                   ->getStartColor()->setARGB(PHPExcel_Style_Color::COLOR_YELLOW); // 背景颜色    // 设置该单元格中数字的格式  $style->getNumberFormat()->setFormatCode("0.00");    // 设置该单元格中文本对齐方式  $style->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER) // 水平方向                        ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); // 垂直方向    $sheet->setCellValue("D3", "12.3456");    // 在本地保存文档  PHPExcel_IOFactory::createWriter($phpexcel, 'Excel5')->save("output.xls");    // 输出文档到页面  header('Content-Type: application/vnd.ms-excel');  header('Content-Disposition: attachment;filename="test.xls"');  header('Cache-Control: max-age=0');  PHPExcel_IOFactory::createWriter($phpexcel, 'Excel5')->save('php://output');  

来源地址:https://blog.csdn.net/m0_61814817/article/details/127276294

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯