博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
http://blog.51cto.com/php2012web/1626907
阅读量:6243 次
发布时间:2019-06-22

本文共 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'
);
//生成文件
?>
本文转自  ttlxihuan    51CTO博客,原文链接:http://blog.51cto.com/php2012web/1620057

转载地址:http://ogpia.baihongyu.com/

你可能感兴趣的文章
Qt之对话框设计——利用QPalette改变控件颜色
查看>>
#lspci | grep Eth
查看>>
Linux下svn常用指令【转】
查看>>
C#下2\10\16进制互转代码总汇
查看>>
人工智能和机器学习领域的一些有趣的开源项目
查看>>
Objective-C:继承的体现
查看>>
三星发布Exynos 7872移动处理器 定位中端市场
查看>>
面试题大全
查看>>
设计模式系列-命令模式
查看>>
Java中的流
查看>>
如何启动或关闭oracle的归档(ARCHIVELOG)模式
查看>>
[LintCode] Paint Fence 粉刷篱笆
查看>>
mysql中实现类似oracle中的nextval函数
查看>>
使用按键精灵+umdh定位内存泄露问题的方式
查看>>
RecyclerView实现ViewPager效果
查看>>
Bandicam视频录制技巧总结+小丸工具箱压缩视频解决视频体积问题
查看>>
JSP实现用户登录样例
查看>>
搞笑的W3C和M$对DOM中属性命名
查看>>
[Struts]让Dreamweaver显示Struts标签的插件
查看>>
便利的html5 之 required、number 、pattern
查看>>