http://blog.51cto.com/php2012web/1626907

简介:

PHPExcel是一个非常强大的PHP表格处理模块,提供一组PHP编程语言,它允许您编写和读取不同的电子表格文件格式,如Excel(纸)。 xls,Excel 2007(OfficeOpenXML)。 xlsx、CSV、自由/ OpenOffice Calc。ods, Gnumeric、PDF、HTML、… 这个项目是建立在微软的OpenXML标准

下载地址:http://phpexcel.codeplex.com/ 解压后在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 ; //追加到数组中去
}
?>

wKioL1SU8grwBayBAAA5o7vzA_g402.jpg

上面是基本的导入解析功能,实际在图片处理上要简单的多,因为没有太多的附带属性,那在文本导出上就没有那么方便了,主要是表格在创建时存在着很多的格式,比如日期,在表格中写入日期系统会默认自动的修改当前格的格式为日期,在解析表格时就得注意了,因为这个数据并不是文本,如果按文本方式解析就会解析成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' ); //生成文件
?>

本文转自  ttlxihuan    51CTO博客,原文链接:http://blog.51cto.com/php2012web/1620057
相关文章
|
1月前
|
网络协议 Shell 网络安全
实验目的1.编译安装httpd2.优化路径3.并将鲜花网站上传到web服务器为网页目录4.在客户机访问网站http://www.bdqn.com
实验目的1.编译安装httpd2.优化路径3.并将鲜花网站上传到web服务器为网页目录4.在客户机访问网站http://www.bdqn.com
164 0
|
7月前
|
安全 中间件 Apache
【Web安全】不安全的HTTP方法
围绕渗透攻防层面来看不安全的HTTP方法漏洞的检测发现修复等手法。
270 1
|
7月前
|
网络安全
Caused by: org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://xxxx.svc.cluster.local:8080/xxxx": Connection reset; nested exception is java.net.SocketException: Connection reset 什么原因导致得
Caused by: org.springframework.web.client.ResourceAccessException: I/O error on POST request for "xxxx.svc.cluster.local:8080/xxxx ": Connection reset; nested exception is java.net.SocketException: Connection reset 什么原因导致得
917 0
|
1月前
|
Java 应用服务中间件
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
132 1
|
7月前
|
XML 开发框架 Java
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)
|
2月前
|
网络协议 应用服务中间件 nginx
一、《图解HTTP》- WEB和网络基础
一、《图解HTTP》- WEB和网络基础
35 0
|
3月前
|
存储 安全 Java
从HTTP到Tomcat:揭秘Web应用的底层协议与高性能容器
从HTTP到Tomcat:揭秘Web应用的底层协议与高性能容器
|
3月前
|
搜索推荐 应用服务中间件 Apache
HTTP状态码301(永久重定向)不同Web服务器的配置方法
当用户或搜索引擎向服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中包含状态码301,以向用户表示该资源已经永久改变了位置。
87 2
|
3月前
【web server】HTTP协议如何解析or封装
【web server】HTTP协议如何解析or封装
|
4月前
|
设计模式 JSON 缓存
[Web 基础] HTTP API 设计指南
[Web 基础] HTTP API 设计指南