本文共 4550 字,大约阅读时间需要 15 分钟。
PHPExcel是一个非常强大的PHP表格处理模块,提供一组PHP编程语言,它允许您编写和读取不同的电子表格文件格式,如Excel(纸)。 xls,Excel 2007(OfficeOpenXML)。 xlsx、CSV、自由/ OpenOffice Calc。ods, Gnumeric、PDF、HTML、… 这个项目是建立在微软的OpenXML标准
下载地址: 解压后在Examples目录下有很多的例子,Documentation目录下是相关文档(如果懂英文在里面的API目录下有更细的文档页面)
大部分情况下我们只用到了这个插件的字符导入导出功能。很多时候我们要导入导出链接,图片等。
PHPExcel中图片与文本是分开的,也就是在操作时间图片与文本各自独立添加到表格中去的,解析时同样要分两次把图片与文本读出来再合并,图片的也是有坐标的,其坐标是以图片的左上角为准。
导入解析:
PHPExcel的导入解析功能非常强大,所支持的表格文件可以在PHPExcel/Reader/目录下查看,由于支持的表格文件多,所以在导入时很方便:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?php $excel =PHPExcel_IOFactory::load( "file.xlsx" ); //把导入的文件目录传入,系统会自动找到对应的解析类 $sheet = $excel ->getSheet(0); //选择第几个表,如下面图片,默认有三个表 $data = $sheet ->toArray(); //把表格的数据转换为数组,注意:这里转换是以行号为数组的外层下标,列号会转成数字为数组内层下标,坐标对应的值只会取字符串保留在这里,图片或链接不会出现在这里。 /*取图片*/ $imgData = array (); $imageFilePath = '/images/' . date ( 'Y/m/d' ). '/' ; //图片保存目录 foreach ( $sheet ->getDrawingCollection() as $img ){ list ( $startColumn , $startRow ) = PHPExcel_Cell::coordinateFromString( $img ->getCoordinates()); //获取列与行号 $imageFileName = $img ->getCoordinates().mt_rand(100,999); /*表格解析后图片会以资源形式保存在对象中,可以通过getImageResource函数直接获取图片资源然后写入本地文件中*/ switch ( $img ->getMimeType()){ //处理图片格式 case 'image/jpg' : case 'image/jpeg' : $imageFileName .= '.jpg' ; imagejpeg( $img ->getImageResource(), $imageFilePath . $imageFileName ); break ; case 'image/gif' : $imageFileName .= '.gif' ; imagegif( $img ->getImageResource(), $imageFilePath . $imageFileName ); break ; case 'image/png' : $imageFileName .= '.png' ; imagepng( $img ->getImageResource(), $imageFilePath . $imageFileName ); break ; } $imgData [ $startRow ][ $startColumn ]= $imageFileName ; //追加到数组中去 } ?> |
上面是基本的导入解析功能,实际在图片处理上要简单的多,因为没有太多的附带属性,那在文本导出上就没有那么方便了,主要是表格在创建时存在着很多的格式,比如日期,在表格中写入日期系统会默认自动的修改当前格的格式为日期,在解析表格时就得注意了,因为这个数据并不是文本,如果按文本方式解析就会解析成5位数字,而非日期,这里就得用到设置解析格式,从而还原想要的数据。
导出生成:
PHPExcel的导出生成与导入解析是可逆的,可以说导入有哪些导出就有哪些
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | <?php $excel = new PHPExcel(); //创建PHPExcel对象 /*写入文档所有权属性*/ $excel ->getProperties() ->setCreator( "Maarten Balliauw" ) //设置创建人 ->setLastModifiedBy( "Maarten Balliauw" ) //设置修改人 ->setTitle( "Office 2007 XLSX Test Document" ) //设置标题 ->setSubject( "Office 2007 XLSX Test Document" ) //设置题目 ->setDescription( "Test document for Office 2007 XLSX, generated using PHP classes." ) //设置描述 ->setKeywords( "office 2007 openxml php" ) //设置关键字 ->setCategory( "Test result file" ); //设置种类 /*设置默认字体与大小*/ $excel ->getDefaultStyle() ->getFont() //获取字体对象 ->setName( 'Arial' ) //设置字体 ->setSize(10); //设置字体大小 /*设置当前的sheet*/ $excel ->setActiveSheetIndex(0); /*设置sheet的name*/ $excel ->getActiveSheet()->setTitle( '表格1' ); /*写入常规文本*/ $excel ->getActiveSheet() ->setCellValue( 'A1' , 'String' ) ->setCellValue( 'B1' , 'Simple' ) ->setCellValue( 'C1' , 'PHPExcel' ); /*写入自定义样式文本*/ $objRichText = new PHPExcel_RichText(); $objRichText ->createText( '你好 ' ); $objPayable = $objRichText ->createTextRun( '你 好 吗?' ); $objPayable ->getFont() ->setBold(true); $objPayable ->getFont() ->setItalic(true); $objPayable ->getFont() ->setColor( new PHPExcel_Style_Color( PHPExcel_Style_Color::COLOR_DARKGREEN ) ); $objRichText ->createText( ', unless specified otherwise on the invoice.' ); $excel ->getActiveSheet() ->setCellValue( 'A13' , 'Rich Text' ) ->setCellValue( 'C13' , $objRichText ); /*写入有链接的文本*/ $excel ->getCell( 'A2' ) ->setValue( 'web中的php' ) ->getHyperlink() ->setUrl( 'http://php2012web.blog.51cto.com/' ); /*写入图片*/ //使用另一个表格图片对象添加图片 /* $img=new PHPExcel_Worksheet_MemoryDrawing(); $img->setImageResource($images->getImageResource()); $img->setMimeType($images->getMimeType()); $img->setName($images->getName()); $img->setDescription($images->getDescription()); */ //使用本地图片 $img = new PHPExcel_Worksheet_Drawing(); $img ->setPath( '/img/text.jpg' ); //写入图片路径 $img ->setHeight(100); //写入图片高度 $img ->setWidth(100); //写入图片宽度 $img ->setOffsetX(1); //写入图片在指定格中的X坐标值 $img ->setOffsetY(1); //写入图片在指定格中的Y坐标值 $img ->setRotation(1); //设置旋转角度 $img ->getShadow()->setVisible(true); // $img ->getShadow()->setDirection(50); // $img ->setCoordinates( 'B2' ); //设置图片所在表格位置 $img ->setWorksheet( $excel ->getActiveSheet()); //把图片写到当前的表格中 /*生成文件*/ $objWriter = PHPExcel_IOFactory::createWriter( $excel , 'Excel2007' ); //创建写文件生成器 $objWriter ->save( 'excel.xlsx' ); //生成文件 ?> |
转载地址:http://ogpia.baihongyu.com/