2016年8月18日12:45:14
请注意这个是粗翻译版,仅供参考,不是精校版 精校版后面才会更新
PHPExcel开发者文档
1.目录
2. 4先决条件
2.1。软件要求4
2.2。安装说明4
2.3。入门4
2.4。有用的链接和工具4
2.4.1。的OpenXML / SpreadsheetML中4
2.4.2。常见问题5
2.4.3。 6教程
3.建筑7
3.1。 7示意性
3.2。延迟加载器7
3.3。电子表格在内存中7
3.4。读者和作家7
3.5。流利的接口8
4.创建电子表格10
4.1。该PHPExcel 10级
4.1.1。从文件加载10工作簿
4.1.2。创建一个新的工作簿10
4.2。配置设置10
4.2.1。电池缓存10
4.2.2。语言/区域设置12
4.3。从内存中清除13工作簿
4.4。 13工作表
4.4.1。添加一个新的工作表14
4.4.2。复制工作表14
4.4.3。删除工作表14
4.5。访问单元14
4.5.1。通过坐标14设置单元格值
4.5.2。通过坐标15检索细胞
4.5.3。通过行和列15设置单元格值
4.5.4。由列和行15检索细胞
4.5.5。循环单元15
4.5.6。使用值粘合剂,以方便数据录入16
4.6。 PHPExcel 17食谱
4.6.1。设置电子表格的元数据17
4.6.2。设置电子表格的活动板17
4.6.3。写日期或时间到单元格17
4.6.4。写了公式的单元格18
4.6.5。对式19区域设置
4.6.6。写在单元格中换行字符“\ n”(ALT +“回车”)20
4.6.7。明确设置单元格的数据类型20
4.6.8。一个细胞变成可点击的URL 20
4.6.9。设置工作表的页面方向和大小20
4.6.10。页面设置:缩放选项21
4.6.11。页边距22
4.6.12。水平中心页/垂直22
4.6.13。设置工作表22的打印页眉和页脚
4.6.14。在一行或一列24设定打印中断
4.6.15。打印时24显示/隐藏网格线
4.6.16。设置行/列顶部重复/左24
4.6.17。指定印刷面积24
4.6.18。设置单元格24
4.6.19。数字格式26
4.6.20。校准和自动换行26
4.6.21。设置一个工作簿27的默认样式
4.6.22。造型单元格边框27
4.6.23。条件格式的单元格28
4.6.24。注释添加到单元格28
4.6.25。应用自动筛选单元格区域29
4.6.26。在电子表格29设置安全
4.6.27。在电池30设置数据验证
4.6.28。设置列宽30
29年4月6日。显示/隐藏列31
4.6.30。集团/勾勒出列31
31年4月6日。设置行高31
4.6.32。显示/隐藏行31
33年4月6日。集团/勾勒出一个排32
34年4月6日。合并/分开单元32
35年4月6日。插入行/列32
36年4月6日。图形添加到工作表32
37年4月6日。从表33读取图片
38年4月6日。丰富的文本添加到一个小区34
39年4月6日。定义一个名为范围34
40年4月6日。输出重定向到客户端的Web浏览器34
41年4月6日。设置默认列宽35
42年4月6日。设置默认行高35
43年4月6日。添加GD绘图到工作表35
44年4月6日。设置工作表的缩放级别36
45年4月6日。工作表标签颜色36
46年4月6日。在工作簿中创建36工作表
47年4月6日。隐藏的工作表(表州)36
48年4月6日。从右到左的工作表36
5.执行公式计算37
5.1。使用PHPExcel计算引擎37
5.2。已知限制38
5.2.1。运算符优先级38
5.2.2。涉及数字和文本38公式
6.读取和写入到文件39
6.1。 PHPExcel_IOFactory 39
6.1.1。使用PHPExcel_IOFactory 39创建PHPExcel_Reader_IReader
6.1.2。使用PHPExcel_IOFactory 39创建PHPExcel_Writer_IWriter
6.2。 Excel 2007中(SpreadsheetML中)文件格式39
6.2.1。 PHPExcel_Reader_Excel2007 40
6.2.2。 PHPExcel_Writer_Excel2007 40
6.3。 Excel中5(BIFF)文件格式41
6.3.1。 PHPExcel_Reader_Excel5 41
6.3.2。 PHPExcel_Writer_Excel5 42
6.4。 Excel 2003中的XML文件格式42
6.4.1。 PHPExcel_Reader_Excel2003XML 42
6.5。符号链接(SYLK)43
6.5.1。 PHPExcel_Reader_SYLK 43
6.6。打开/自由办公室(的.ods)43
6.6.1。 PHPExcel_Reader_OOCalc 43
6.7。 CSV(逗号分隔值)44
6.7.1。 PHPExcel_Reader_CSV 44
6.7.2。 PHPExcel_Writer_CSV 45
6.8。 HTML 46
6.8.1。 PHPExcel_Reader_HTML 46
6.8.2。 PHPExcel_Writer_HTML 46
6.9。 PDF 47
6.9.1。 PHPExcel_Writer_PDF 47
6.10。从模板(读取,修改,写)49生成Excel文件
7.现金50
附录A:风格applyFromArray有效的数组键()51
2.先决条件
2.1。软件要求
下列软件需要使用PHPExcel扩展:
»PHP版本5.2.0或更高版本
»PHP扩展php_zip启用*)
»PHP扩展php_xml启用
»PHP扩展php_gd2启用(如果没有编译)
php_zip仅由PHPExcel_Reader_Excel2007,PHPExcel_Writer_Excel2007和PHPExcel_Reader_OOCalc需要的。换句话说,如果你需要PHPExcel处理的.xlsx或.ods档案文件,你需要压缩扩展,但否则不是。
您可以删除此依赖写的Excel2007文件(尽管还没有读)通过使用捆绑PHPExcel的PCLZip库。请参阅本文档(2.4.2)有关此信息的FAQ部分。 PCLZip确实有被启用了PHP的zlib的扩展的依赖。
2.2。安装说明
安装是很容易的:Classes文件夹中的内容复制到你的应用程序源目录中的任何位置。
例:
如果您的Web根目录是/ var / WWW /你可能要创建一个名为/ var / WWW /类子/和文件复制到该文件夹,所以你最终获得的文件:
/var/www/Classes/PHPExcel.php
/var/www/Classes/PHPExcel/Calculation.php
/var/www/Classes/PHPExcel/Cell.php
2.3。入门
上手的好方法是运行一些包括在下载的测试。
“Examples”文件夹复制旁边的“类”Classes,所以你最终获得的文件夹:
/var/www/ Examples/01simple.php
/var/www/ Examples/02types.php
启动您的浏览器指向测试脚本运行测试
http://example.com/ Examples/01simple.php
http://example.com/ Examples/02types.php
注意:可能需要修改包括/需要在每个测试脚本如果从上方的“类”的文件夹被不同地命名的开始语句。
2.4。有用的链接和工具
还有一些链接和工具使用PHPExcel开发时,这是非常有用的。请参考PHPExcel CodePlex上页为下面的列表的更新版本。
2.4.1。的OpenXML / SpreadsheetML中
»文件格式的文档
http://www.ecma-international.org/news/TC45_current_work/TC45_available_docs.htm
»OpenXML的解释电子书
http://openxmldeveloper.org/articles/1970.aspx
»Microsoft Office兼容包的Word,Excel和PowerPoint 2007文件格式
http://www.microsoft.com/downloads/details.aspx?familyid=941b3470-3ae9-4aee-8f43-c6bb74cd1466&displaylang=en
»OpenXML的包浏览器
http://www.codeplex.com/PackageExplorer/
2.4.2。经常问的问题
向上最新F.A.Q.对于PHPExcel页面可以http://www.codeplex.com/PHPExcel/Wiki/View.aspx?title=FAQ&referringTitle=Requirements找到。
似乎有与字符编码问题...
它必须使用UTF-8编码的PHPExcel所有文本。如果脚本使用不同的编码方式,那么你可以将PHP的的iconv()或mb_convert_encoding()函数的文本。
PHP抱怨ZipArchive未找到
确保您满足所有要求,尤其是php_zip扩展应该启用
读取或写入使用Zip压缩(Excel2007中和oocalc里)格式时,ZipArchive类时才需要。因为1.7.6版本PCLZip库已经捆绑PHPExcel作为替代ZipArchive类。
这可以通过调用启用:
PHPExcel_Settings :: setZipClass(PHPExcel_Settings :: PCLZIP);
之前调用Excel2007中作家的保存方法。
您可以恢复使用ZipArchive致电:
PHPExcel_Settings :: setZipClass(PHPExcel_Settings :: ZIPARCHIVE);
目前,这种只允许你写的Excel2007文件,而不需要ZipArchive(不读的Excel2007或oocalc里)
Excel 2007中无法打开通过PHPExcel_Writer_2007在Windows上生成的文件
“创先争优发现'*的.xlsx”无法读取内容。你想恢复此工作簿的内容?如果您信任该工作簿的来源,请单击是。“
创建ZIP文件时,某些旧版本的Windows上的5.2.x php_zip扩展包含一个错误。可在http://snaps.php.net/win32/php5.2-win32-latest.zip找到的版本应该在任何时候都工作。
此外,升级到至少5.2.9 PHP应该解决的问题。
如果你无法找到ZipArchive的全新副本,那么你就可以写的Excel2007文件时,如上所述使用PCLZip库作为替代。
致命错误:用尽XXX字节允许内存大小(试图分配YYY字节)ZZZ在线AAA
PHPExcel持有电子表格的“内存”的显示,所以它是由PHP的内存限制的约束。提供给PHP内存可以提高编辑您的php.ini文件中memory_limit的指令的值,或使用的ini_set('memory_limit的','128M')你的代码中(ISP许可)。
一些读者和作家比别人快,他们也使用的内存量不同。你可以找到的相对性能和内存使用为不同的读者和作家的一些迹象表明,在不同版本的PHPExcel,在讨论板。
如果您已经增加了内存到最大,还是不能改变你的内存限制,那么在董事会的讨论描述了一些可用于减少使用PHPExcel脚本的内存使用的方法。
保护我的工作不工作?
当你使用任何的工作表保护功能(例如,小区范围内的保护,禁止删除行,...),请确保您启用工作表的安全性。这可以例如进行这样的:
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
特征X不是与PHPExcel_Reader_Y / PHPExcel_Writer_Z工作
并非PHPExcel的所有功能在所有的读/写器类中实现的。这主要是由于底层库不支持特定的功能,或者不执行有一个特定的功能。
例如自动筛选不在PEAR Spreadsheet_Excel_writer,这是我们Excel5作家的基础上实现的。
我们正在逐步建立的功能列表,用不同的读者和作家来支持他们在一起,在/文档文件夹中的“功能交叉Reference.xls”文件。
似乎公式不使用兼容包在Excel2003中计算?
这是兼容包的正常行为,Excel2007中正确显示这一点。使用PHPExcel_Writer_Excel5如果你真的需要计算值,或力Excel2003中重新计算。
设置列宽是不是100%准确
试图设置列宽,我遇到一个问题。当我在Excel中打开文件时,实际宽度为0.71低于它应该是。
简短的回答是,PHPExcel使用,其中包括填充的措施。请参见:“设置列宽”的更多细节。
如何使用PHPExcel与我的框架
»有关于Joomla的留言板上使用PHPExcel与Joomla一些指令
»咨询页面上的Yii框架使用PHPExcel
»面包店有一定的辅助类的阅读和内与CakePHP的写作PHPExcel
»集成PHPExcel到Kohana的http://www.flynsarmy.com/2010/07/phpexcel-module-for-kohana-3/和ИнтеграцияPHPExcelиKohana的框架
»使用PHPExcel用TYPO3
自动加载的Joomla干扰PHPExcel自动装弹机
由于peterrlynch针对以下意见的PHPExcel自动加载机和Joomla自动加载磁带机之间解决问题
2.4.3。教程
»英语PHPExcel教程
http://openxmldeveloper.org
»法国PHPExcel教程
http://g-ernaelsten.developpez.com/tutoriels/excel2007/
»俄罗斯PHPExcel博客文章
http://www.web-junior.net/sozdanie-excel-fajjlov-s-pomoshhyu-phpexcel/
»在日语介绍PHPExcel http://journal.mycom.co.jp/articles/2009/03/06/phpexcel/index.html
3.体系结构
3.1。概要
3.2。延迟加载器
PHPExcel实现一个自动装载机或“懒惰装载机”,这意味着它是不必要的,包括内PHPExcel每个文件。它是只需要包括初始PHPExcel类文件,然后自动加载器将包括其他类文件有需要时,
所以只有那些实际上是由你的脚本需要这些文件将被加载到内存中的PHP。这样做的主要好处是,它减少了PHPExcel本身的内存占用,因此,它使用较少的内存PHP。
如果自己的脚本已经定义了一个自动加载功能,那么这可能是由PHPExcel自动加载功能覆盖。例如,如果您有:
function __autoload($class) {
...
}
Do this instead:
function myAutoload($class) {
...
}
spl_autoload_register('myAutoload');
自动加载机将然后PHPExcel自动加载机并存。
3.3。电子表格在内存
PHPExcel的结构是建立在一种方式,它可作为一个内存中的电子表格。这意味着,如果一个人会想创建一个与PHPExcel的对象模型进行通信的电子表格的基于Web的看法,他将只需要编写前端代码。
就像桌面电子表格软件,PHPExcel表示含有一个或多个表,其中包含与数据,公式,图像的细胞的电子表格,...
3.4。读者和作家
就其本身而言PHPExcel不提供的功能从读取或写入到一个持久的电子表格(在磁盘上或在数据库中)。为了提供该功能,阅读器和可以使用作家。
默认情况下,PHPExcel包提供了一些读者和作家,包括一个用于Open XML电子表格格式(又名Excel 2007文件格式)。
你是不是仅限于默认的读者和作者,因为你可以自由地实现自定义类的PHPExcel_Writer_IReader和PHPExcel_Writer_IWriter接口
3.5。流利的接口
PHPExcel支持大多数地区的流畅接口。这意味着你可以很容易地“产业链”,而不需要一个新的PHP语句调用特定的方法。例如,以下面的代码:
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
$objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");
$objPHPExcel->getProperties()->setCategory("Test result file");
这可以被改写为:
$objPHPExcel->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");
使用流利的接口并不需要
流利的接口已经实施提供了方便的编程API。它们的使用不是必需的,但可以让你的代码更易于阅读和维护。它也可以提高性能,因为你是减少调用PHPExcel方法的总数量。
至于为什么翻译成"流利的接口"这个翻译并不好,目前没有找到比较好的翻译,后面更新
4.创建电子表格
4.1。该PHPExcel类
该PHPExcel类是PHPExcel的核心。它包含的工作表所载,文档的安全性设置,引用和文件元数据。
为了简化PHPExcel概念:PHPExcel类代表工作簿。
通常情况下,你会在以下两种方式之一,无论是从电子表格文件加载它,或手动创建它创建一个工作簿。第三个选择,虽然不常用,被克隆已使用前两种方法之一创建的现有工作簿。
4.1.1。从文件加载工作簿
提供给他们读入PHPExcel对象所支持的不同的电子表格格式和选项的详细信息将在充分说明“PHPExcel用户文档 - 读电子表格文件”的文件。
$inputFileName = './sampleData/example1.xls';
/** Load $inputFileName to a PHPExcel Object **/
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
4.1.2。创建一个新的工作簿
如果你想创建一个新的工作簿,而不是装载一个来自文件,然后你只需要实例化它作为一个新的PHPExcel对象。
/ **创建一个新的PHPExcel对象** /
$ objPHPExcel =新PHPExcel();
新工作簿总是会用一个工作表中创建。
4.2。配置设置
一旦你已经包含在脚本中的PHPExcel文件,但实例化一个对象PHPExcel或加载工作簿文件之前,有一些可设置的配置选项,这将影响到脚本的后续行为。
4.2.1。细胞缓存
PHPExcel使用大约1K /单元的平均工作表中的,那么大的工作簿会很快用完可用内存。细胞缓存提供了一种机制,允许PHPExcel保持的存储器中的较小尺寸的单元的对象,在磁盘上,或在APC,内存缓存或WINCACHE,而不是在PHP存储器。这使您可以减少大量的工作簿的内存使用量,虽然以速度为代价来访问单元格数据。
默认情况下,PHPExcel仍持有内存中的所有单元格对象,但您可以指定替代方案。为了使细胞缓存,必须调用PHPExcel_Settings :: setCacheStorageMethod()方法,传递您希望使用高速缓存方法。
$ cacheMethod = PHPExcel_CachedObjectStorageFactory :: cache_in_memory;
PHPExcel_Settings :: setCacheStorageMethod($ cacheMethod);
setCacheStorageMethod()将(如果试图未启用时APC缓存,以APC为例)返回成功一个布尔值真,假失败。
一个单独的缓存保持每个工作表,在工作表的基础上的高速缓存方法和设置您已经配置实例化时自动创建。一旦你开始读一工作簿或已经创建了第一个工作表,不能更改配置设置。
目前,以下高速缓存方法是可用的。
PHPExcel_CachedObjectStorageFactory :: cache_in_memory;
默认。如果不初始化任何高速缓存的方法,则这是PHPExcel将使用的方法。 Cell对象保持在PHP内存截至目前。
PHPExcel_CachedObjectStorageFactory :: cache_in_memory_serialized;
使用这种高速缓存方法,将细胞在PHP存储器保持为序列化对象的阵列,从而降低了以最小的性能开销的存储器占用。
PHPExcel_CachedObjectStorageFactory :: cache_in_memory_gzip;
像cache_in_memory_serialized,此方法包含在PHP存储单元作为序列化对象的阵列,但gzip压缩以减少存储器的使用仍进一步,虽然访问读或写一个单元是稍微慢一些。
PHPExcel_CachedObjectStorageFactory :: cache_igbinary;
使用PHP的igbinary扩展名(如果可用)将序列号存储单元的对象。这通常是速度更快,使用比标准的PHP序列化更少的内存,但在大多数主机环境提供。
PHPExcel_CachedObjectStorageFactory :: cache_to_discISAM;
当使用cache_to_discISAM所有单元都在一个临时磁盘文件举行,只有一个索引到它们的位置中保持在PHP存储器该文件。这比任何的cache_in_memory方法慢,但是显著减少了存储器占用。默认情况下,将PHPExcel使用PHP的临时目录缓存文件,但你可以初始化cache_to_discISAM时指定一个不同的目录。
$ cacheMethod = PHPExcel_CachedObjectStorageFactory :: cache_to_discISAM;
$cacheSettings = array( 'dir' => '/usr/local/tmp'
);
PHPExcel_Settings :: setCacheStorageMethod($ cacheMethod,$ cacheSettings);
当你的脚本终止临时磁盘文件被自动删除。
PHPExcel_CachedObjectStorageFactory :: cache_to_phpTemp;
像cache_to_discISAM,使用cache_to_phpTemp当所有的细胞都保持在php://临时I / O流,只有一个索引来保持在PHP的内存其位置。在PHP,PHP的:在存储器//存储器封装存储数据:PHP://温度行为类似,但使用的临时文件存储中的数据达到一定存储器限制时。默认值是1 MB,但初始化cache_to_phpTemp时,你可以改变这一点。
$ cacheMethod = PHPExcel_CachedObjectStorageFactory :: cache_to_phpTemp;
$cacheSettings = array( 'memoryCacheSize' => '8MB'
);
PHPExcel_Settings :: setCacheStorageMethod($ cacheMethod,$ cacheSettings);
PHP的:当你的脚本终止//临时文件被自动删除。
PHPExcel_CachedObjectStorageFactory :: cache_to_apc;
当使用cache_to_apc,细胞的对象被保持在APC与只在PHP存储器保持以确定细胞存在的指标。缺省情况下,600秒的APC缓存超时使用时,应该是足够对于大多数应用:虽然有可能初始化cache_to_APC当改变这一点。
$ cacheMethod = PHPExcel_CachedObjectStorageFactory :: cache_to_APC;
$cacheSettings = array( 'cacheTime' => 600
);
PHPExcel_Settings :: setCacheStorageMethod($ cacheMethod,$ cacheSettings);
当脚本终止所有条目将来自APC被清除,而不管cacheTime值的,因此,使用这个机制,它不能被用于持久存储。
PHPExcel_CachedObjectStorageFactory :: cache_to_memcache
当使用cache_to_memcache,细胞的对象被保持在内存缓存仅在PHP存储器保持以确定细胞存在的指标。
默认情况下,PHPExcel查找本地主机上一个内存缓存服务器在端口11211.它还设置为600秒内存缓存超时限制。如果您在不同的服务器或端口上运行的memcache,那么您可以在初始化cache_to_memcache修改这些默认值:
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache;
$cacheSettings = array( 'memcacheServer' => 'localhost',
'memcachePort' => 11211,
'cacheTime' => 600
);
PHPExcel_Settings :: setCacheStorageMethod($ cacheMethod,$ cacheSettings);
当脚本终止所有条目将从记忆快取被清除,而不管cacheTime值的,因此,使用这个机制,它不能被用于持久存储。
PHPExcel_CachedObjectStorageFactory :: cache_to_wincache;
当使用cache_to_wincache,细胞的对象被保持在WINCACHE仅在PHP存储器保持以确定细胞存在的指标。缺省情况下,600秒WINCACHE缓存超时使用时,应该是足够对于大多数应用:虽然有可能初始化cache_to_wincache当改变这一点。
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_wincache;
$cacheSettings = array( 'cacheTime' => 600
);
PHPExcel_Settings :: setCacheStorageMethod($ cacheMethod,$ cacheSettings);
当脚本终止所有条目将从WINCACHE被清除,而不管cacheTime值的,因此,使用这个机制,它不能被用于持久存储。
PHPExcel_CachedObjectStorageFactory :: cache_to_sqlite;
使用一个SQLite 2内存数据库缓存单元格数据。不像其他的高速缓存方法,既不是细胞,也不是指数保持在PHP的内存 - 索引数据库表,就没有必要持有PHP内存中的任何指标 - 使这个最内存效率的电池高速缓存方法。
PHPExcel_CachedObjectStorageFactory :: cache_to_sqlite3;
使用一个SQLite 3内存数据库缓存单元格数据。不像其他的高速缓存方法,既不是细胞,也不是指数保持在PHP的内存 - 索引数据库表,就没有必要持有PHP内存中的任何指标 - 使这个最内存效率的电池高速缓存方法。
4.2.2。语言/区域设置
一些本土化元素都被列入PHPExcel。您可以通过更改设置设置一个区域。以区域设置为葡萄牙语(巴西),需要使用:
$locale = 'pt_br';
$validLocale = PHPExcel_Settings::setLocale($locale);
if (!$validLocale) {
echo 'Unable to set locale to '.$locale." - reverting to en_us
\n";
}
如果巴西葡萄牙语语言文件不可用,那么葡萄牙将代替启用:如果葡萄牙语言文件不可用,那么的setLocale()方法会返回一个错误,和美国英语(EN_US)设置将在整个使用。
可用一旦一个区域的功能的更多细节已定,包括语言,目前支持的语言环境的列表,可以在公式4.5.5节的区域设置来找到。
4.3。清除从内存工作簿
该PHPExcel对象包含循环引用(例如,工作簿链接到工作表和工作表链接到其父母的工作簿),这会导致出现问题时,PHP将试图从内存中清除的对象时,他们都没有设置(),或在年底当他们在本地范围内的功能。这样做的结果是“内存泄漏”,它可以很容易地使用大量的PHP有限的内存。
这只能以手动方式解决:如果您需要取消设置一个工作簿,然后你还需要“破”在这样做之前,这些循环引用。 PHPExcel为此提供的disconnectWorksheets()方法。
$objPHPExcel->disconnectWorksheets();
unset($objPHPExcel);
4.4。工作表
有一个工作表单元格,公式的,图像,图形的集合,......它拥有必要的表示为电子表格的工作表的所有数据。
当您从电子表格文件加载的工作簿,将其所有现有工作表被载入(除非指定只有特定的表应该被加载)。当您从非电子表格文件加载(如CSV或HTML文件),或从电子表格格式,不要被名称(如SYLK)确定工作表,然后一个名为“工作表”一个工作表将创建一个包含从数据该文件。
当你实例化一个新的工作簿,PHPExcel将与所谓的“工作表”一个工作表中创建它。
该getSheetCount()方法会告诉你在工作簿的工作表数;而getSheetNames()方法将返回工作簿中的所有工作表,在其中他们的“标签”将在MS Excel(或其他适当的电子表格程序)打开时显示的顺序索引列表。
单个的工作表可以通过名称来访问,或通过在工作簿中的索引位置。索引位置表示当工作簿在MS Excel(或其他适当的电子表格程序)中打开每个工作表“标签”显示的顺序。为了通过它的索引访问片,使用getSheet()方法。
//获取工作簿中的第二板
//注意纸张从0索引
$ objPHPExcel-> getSheet(1);
如果不指定表的索引,那么第一个工作表将被退回。
方法也存在让您重新排序工作表在工作簿中。
要通过名称访问表,使用getSheetByName()方法,指定您要访问的工作表的名称。
//获得所谓的“工作表1”工作表
$objPHPExcel->getSheetByName('Worksheet 1');
另外,一个工作表总是在当前活动工作表,您可以直接访问。当前活动工作表是一个当工作簿在MS Excel(或其他适当的电子表格程序)打开,这将是积极的。
//获得当前活动工作表
$objPHPExcel->getActiveSheet();
使用此方法创建一个新的工作表将被称为“工作表”或“工作表”,其中“”是最低数量可以保证,标题是独一无二的。
或者,您可以实例化一个新的工作表(设为不管你选择的名称),然后将其插入到使用addSheet()方法,您的工作簿。
//创建一个名为“我的数据”的新的工作表
$myWorkSheet = new PHPExcel_Worksheet($objPHPExcel, 'My Data');
//附加“我的数据”工作作为PHPExcel对象中的第一个工作表
$objPHPExcel->addSheet($myWorkSheet, 0);
如果不指定为第二个参数的索引位置,则新的工作表将在最后一个现有工作表后添加。
4.4.2。复制工作表
同一工作簿中的表可以通过创建要复制工作表的副本,然后使用addSheet()方法插入克隆到工作簿中进行复制。
$objClonedWorksheet = clone $objPHPExcel->getSheetByName('Worksheet 1');
$objClonedWorksheet->setTitle('Copy of Worksheet 1')
$objPHPExcel->addSheet($objClonedWorksheet);
在这两种情况下,这是开发商的责任,确保工作表名称不重复。如果您尝试复制工作表会导致重复名称PHPExcel会抛出异常。
4.4.3。删除工作表
您可以从一个工作簿,其索引位置确定删除工作表,使用removeSheetByIndex()方法
$sheetIndex = $objPHPExcel->getIndex($objPHPExcel-> getSheetByName('Worksheet 1'));
$objPHPExcel->removeSheetByIndex($sheetIndex);
如果当前活动工作表被删除,则表在先前索引位置将成为当前活动工作表。
4.5。访问单元格
在PHPExcel工作访问单元应该是非常简单的。本主题列出了一些选项来访问一个单元格。
4.5.1。通过设置坐标单元格值
通过设置坐标单元格值可以使用工作表的setCellValue方法来实现。
$objPHPExcel->getActiveSheet()->setCellValue('B8', 'Some value');
4.5.2。通过检索协调细胞
检索的小区的值,细胞应首先从使用getCell方法的工作表中检索。单元格的值可以再次使用下面的代码行阅读:
$objPHPExcel->getActiveSheet()->getCell('B8')->getValue();
如果你需要一个单元格的计算值,使用下面的代码。这是在35年4月4日进一步解释。
$objPHPExcel->getActiveSheet()->getCell('B8')->getCalculatedValue();
4.5.3。通过行和列设置单元格值
通过设置坐标单元格值可以使用工作表的setCellValueByColumnAndRow方法来实现。
//设置单元格B8
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, 8, 'Some value');
4.5.4。由列和行中检索的小区
检索的小区的值,细胞应首先从使用getCellByColumnAndRow方法的工作表中检索。单元格的值可以再次使用下面的代码行阅读:
//获取小区B8
$objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getValue();
如果你需要一个单元格的计算值,使用下面的代码。这是在35年4月4日进一步解释
//获取小区B8
$objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getCalculatedValue();
4.5.4。由列和行中检索的小区
检索的小区的值,细胞应首先从使用getCellByColumnAndRow方法的工作表中检索。单元格的值可以再次使用下面的代码行阅读:
//获取小区B8
$objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getValue();
如果你需要一个单元格的计算值,使用下面的代码。这是在35年4月4日进一步解释
//获取小区B8
$objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getCalculatedValue();
4.5.4。由列和行中检索的小区
检索的小区的值,细胞应首先从使用getCellByColumnAndRow方法的工作表中检索。单元格的值可以再次使用下面的代码行阅读:
//获取小区B8
$objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getValue();
如果你需要一个单元格的计算值,使用下面的代码。这是在35年4月4日进一步解释
//获取小区B8
$objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getCalculatedValue();
4.5.5。循环细胞
使用迭代器循环细胞
循环细胞的最简单方法是使用迭代器。使用迭代器,可以使用的foreach循环的工作表,行和单元格。
下面是我们读到的工作表中所有的值,并在表中显示它们的例子。
'Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("test.xlsx");
$objWorksheet = $objPHPExcel->getActiveSheet();
echo '' . "\n";
foreach ($objWorksheet->getRowIterator() as $row) {
echo '' . "\n";
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false); // This loops all cells,
// even if it is not set.
// By default, only cells
// that are set will be
// iterated.
foreach ($cellIterator as $cell) {
echo '' . $cell->getValue() . ' ' . "\n";
}
echo ' ' . "\n";
}
echo '
' . "\n";
?>
请注意,我们已经设置单元格迭代器的setIterateOnlyExistingCells()为false。这使得这个循环的所有单元格,即使他们没有之前设置。
细胞迭代将返回null作为细胞如果未在工作表中设定。
设置单元格迭代器的setIterateOnlyExistingCells()设置为false将循环在工作表中,可以在那一刻可用的所有单元格。这将需要来创建新的细胞,提高内存的使用!只使用它,如果它被用于循环是可能可用的所有细胞。
使用索引循环细胞
人们可以使用的可能性由列和行索引等(0,1)来访问元值而不是“A1”用于读取和在循环中写单元值。
注意:在PHPExcel列索引,而行的索引是基于1从零开始。这意味着'A1'〜(0,1)
下面是我们读到的工作表中所有的值,并在表中显示它们的例子。
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("test.xlsx");
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow(); // e.g. 10
$highestColumn = $objWorksheet->getHighestColumn(); // e.g 'F'
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); // e.g. 5
echo '' . "\n";
for ($row = 1; $row <= $highestRow; ++$row) {
echo '' . "\n"; for ($col = 0; $col <= $highestColumnIndex; ++$col) {
echo '
' . $objWorksheet->getCellByColumnAndRow($col, $row)->getValue() . ' ' . "\n";
} echo '
' . "\n";
}
echo '
' . "\n";
?>
4.5.6。使用值粘合剂,以方便数据录入
在内部,PHPExcel使用默认PHPExcel_Cell_IValueBinder实现(PHPExcel_Cell_DefaultValueBinder),以确定使用细胞的setValue()方法输入的数据的数据类型。
或者,PHPExcel的默认行为可以被修改,用户可以方便地输入数据。例如,一个PHPExcel_Cell_AdvancedValueBinder类是否存在。它会自动转换输入为字符串格式是否正确,还设置单元格的样式信息百分比和日期。下面的例子演示了如何设置的值粘结剂PHPExcel:
/** PHPExcel */
require_once 'PHPExcel.php';
/** PHPExcel_Cell_AdvancedValueBinder */
require_once 'PHPExcel/Cell/AdvancedValueBinder.php';
/** PHPExcel_IOFactory */
require_once 'PHPExcel/IOFactory.php';
// Set value binder
PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
//添加一些数据,类似一些不同的数据类型
$objPHPExcel->getActiveSheet()->setCellValue('A4', 'Percentage value:');
$objPHPExcel->getActiveSheet()->setCellValue('B4', '10%');
//转换为0.1,并设置个单元格样式
$objPHPExcel->getActiveSheet()->setCellValue('A5', 'Date/time value:');
$objPHPExcel->getActiveSheet()->setCellValue('B5', '21 December 1983');
//转换为日期,并设置日期格式的单元格样式
创建自己的价值粘结剂是容易的。
当需要先进值绑定,可以实现PHPExcel_Cell_IValueBinder接口或延长PHPExcel_Cell_DefaultValueBinder或PHPExcel_Cell_AdvancedValueBinder类。
4.6。 PHPExcel食谱
以下几页为您提供一些广泛使用的PHPExcel食谱。请注意,这些不提供具体的PHPExcel API函数的完整文档,而只是一个凸点,让你开始。如果您需要特定的API函数,请参阅API文档。
例如,4.4.7设置工作表的页面方向和大小覆盖设置页面方向为A4。其他纸张格式,如美国信,都没有包括在本文档中,但PHPExcel API文档中获得。
4.6.1。设置电子表格的元数据
PHPExcel允许一种简单的方法来设置电子表格中的元数据,使用文档属性访问。电子表格的元数据可以在一个文件存储库或文档管理系统中查找特定的文档非常有用。例如微软SharePoint使用文档元数据搜索在其文档列表特定文档。
设置电子表格的元数据方法如下:
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
$objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");
$objPHPExcel->getProperties()->setCategory("Test result file");
4.6.2。设置电子表格的活动表
下面的代码行设置活动工作表索引到第一页:
$ objPHPExcel-> setActiveSheetIndex(0);
4.6.3。写日期或时间进入细胞
在Excel中,日期和时间存储为计数自1900-01-01经过的天数数值。例如,日期“2008-12-31”表示为39813.您可以通过在单元格中输入该日期,之后换号格式为“一般”,所以真正的数值表现在Microsoft Office Excel中验证这一点。同样,“凌晨3:15”表示为0.135417。
PHPExcel可与UST(国际标准时间)日期和时间值,但不执行内部转换;所以它是由开发者确保传递到日期/时间转换函数值是UST。
在单元格中写入一个日期值由2行代码。选择适合你的最好的方式。这里有些例子:
/* PHPExcel_Cell_AdvanceValueBinder required for this sample */
require_once 'PHPExcel/Cell/AdvancedValueBinder.php';
// MySQL-like timestamp '2008-12-31' or date string
PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
$objPHPExcel->getActiveSheet()
->setCellValue('D1', '2008-12-31');
$objPHPExcel->getActiveSheet()
->getStyle('D1')
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH)
// PHP-time (Unix time)
$time = gmmktime(0,0,0,12,31,2008); // int(1230681600)
$objPHPExcel->getActiveSheet()
->setCellValue('D1', PHPExcel_Shared_Date::PHPToExcel($time));
$objPHPExcel->getActiveSheet()
->getStyle('D1')
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH)
// Excel-date/time
$objPHPExcel->getActiveSheet()
->setCellValue('D1', 39813)
$objPHPExcel->getActiveSheet()
->getStyle('D1')
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH)
用于输入日期的所有上述方法得到相同的结果。 PHPExcel_Style_NumberFormat提供了大量的预定义的日期格式。
该PHPExcel_Shared_Date :: PHPToExcel()方法也将与PHP DateTime对象工作。
同样,时间(或日期和时间值),可以以同样的方式输入:只记得使用适当的格式代码。
笔记:
1.请参见“使用值粘合剂,以方便数据录入”来了解更多关于在第一个例子中使用的AdvancedValueBinder。
2.在以前的版本中PHPExcel的直至并包括1.6.6,当一个细胞有个约会般的数字格式代码,它有可能直接进入使用整数PHP时间日期无须转换到Excel日期格式。与PHPExcel 1.6.7起这已不再支持。
3. Excel中也可以在基于1904年日历(默认工作簿保存在Mac)进行操作。通常情况下,你不必使用PHPExcel时,担心这个。
4.6.4。写了公式的单元格
里面的Excel文件,公式总是存储它们将出现在英文版本的Microsoft Office Excel中,并在内部PHPExcel处理所有的公式在这种格式。这意味着下面的规则成立:
•小数分隔符为“。” (期)
•函数参数的分隔符是','(逗号)
•矩阵行分隔符是“;” (分号)
•英语函数名称必须使用
这是无论哪个Microsoft Office Excel中的语言版本可能已被用于创建Excel文件。
当最终簿被用户打开,Microsoft Office Excel中将会显示根据应用语言式照顾。转换由应用程序照顾!
下面的代码行写入公式“=IF(C4>500,"profit","loss")”进入小区B8。需要注意的是公式必须以“=”开始进行PHPExcel承认这是一个公式。
如果你想要写一个字符串用“=”的小区开始,那么你应该使用setCellValueExplicit()方法。
$objPHPExcel->getActiveSheet()
->setCellValueExplicit('B8',
'=IF(C4>500,"profit","loss")',
PHPExcel_Cell_DataType::TYPE_STRING
);
单元格的公式可以再次使用下面的代码行阅读
$formula = $objPHPExcel->getActiveSheet()->getCell('B8')->getValue();
如果你需要一个单元格的计算值,使用下面的代码。这是在in 4.4.35.进一步解释。
$value = $objPHPExcel->getActiveSheet()->getCell('B8')->getCalculatedValue();
4.6.5。为公式区域设置
一些本土化元素都被列入PHPExcel。您可以通过更改设置设置一个区域。设置本地化俄罗斯可以使用:
$locale = 'ru';
$validLocale = PHPExcel_Settings::setLocale($locale);
if (!$validLocale) {
echo 'Unable to set locale to '.$locale." - reverting to en_us
\n";
}
如果俄语文件不可用,给setlocale()方法会返回一个错误,和英语的设置将在整个使用。
一旦您设置一个区域,你可以翻译从其内部英语编码的公式。
$formula = $objPHPExcel->getActiveSheet()->getCell('B8')->getValue();
$translatedFormula =
PHPExcel_Calculation::getInstance()->_translateFormulaToLocale($formula);
您也可以使用函数名和适当的定义的区域设置参数分割创建一个公式;然后设置单元格值之前它翻译成英文:
$formula = '=ДНЕЙ360(ДАТА(2010;2;5);ДАТА(2010;12;31);ИСТИНА)';
$internalFormula =
PHPExcel_Calculation::getInstance()->translateFormulaToEnglish($formula);
$objPHPExcel->getActiveSheet()->setCellValue('B8',$internalFormula);
目前,公式翻译只转换函数名,常量真假,以及函数参数分隔符。
目前,下列区域设置的支持:
Language
Locale Code
Czech
Čeština
cs
Danish
Dansk
da
German
Deutsch
de
Spanish
Español
es
Finnish
Suomi
fi
French
Français
fr
Hungarian
Magyar
hu
Italian
Italiano
it
Dutch
Nederlands
nl
Norwegian
Norsk
no
Polish
Język polski
pl
Portuguese
Português
pt
Brazilian Portuguese
Português Brasileiro
pt_br
Russian
русский язык
ru
Swedish
Svenska
sv
Turkish
Türkçe
tr
4.6.6。在单元格中写换行符“\ n”(ALT +“回车”)
在Microsoft Office Excel您通过点击ALT +“Enter”键得到一个细胞一个换行符。当你这样做,它会自动打开“自动换行”的单元格。
下面是如何在PHPExcel实现这一点:
$objPHPExcel->getActiveSheet()->getCell('A1')->setValue("hello\nworld");
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true);
了解更多关于使用getStyle()的其他地方设置单元格。
AdvancedValuebinder.php会自动打开“自动换行”,为细胞时,它看到了,你是在单元格中插入一个串一个换行符。就像微软Office Excel中。尝试这个:
require_once 'PHPExcel/Cell/AdvancedValueBinder.php';
PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
$objPHPExcel->getActiveSheet()->getCell('A1')->setValue("hello\nworld");
了解更多关于AdvancedValueBinder.php别处。
4.6.7。明确设置单元格的数据类型
您可以通过使用细胞的setValueExplicit方法或工作表的方法setCellValueExplicit明确设置单元格的数据类型。下面是一个例子:
$objPHPExcel->getActiveSheet()->getCell('A1')->setValueExplicit('25', PHPExcel_Cell_DataType::TYPE_NUMERIC);
4.6.8。一个细胞变成可点击网址
您可以通过设置超链接属性使细胞中的可点击的网址:
$objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net');
$objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('http://www.phpexcel.net');
如果你想使一个超链接到另一个工作表/单元格,使用下面的代码:
$objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net');
$objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl(“sheet://'Sheetname'!A1”);
4.6.9。设置一个工作表的页面方向和大小
设置工作表的页面方向和大小可以用下面的代码行来完成:
$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
$objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
请注意,有可用的附加页面设置。请参考API文档所有可能的选择。
4.6.10。页面设置:缩放选项
如图所示的插图PHPExcel的页面设置缩放选项直接关系到在“页面设置”对话框中的缩放选项。
如图插图PHPExcel默认值对应于MS Office Excel中的默认值
method
initial value
calling method will trigger
Note
setFitToPage(...)
false
-
setScale(...)
100
setFitToPage(false)
setFitToWidth(...)
1
setFitToPage(true)
value 0 means do-not-fit-to-width
setFitToHeight(...)
1
setFitToPage(true)
value 0 means do-not-fit-to-height
举例
下面是如何高大无限页面以适应1页宽:
$objPHPExcel->getActiveSheet()->getPageSetup()->setFitToWidth(1);
$objPHPExcel->getActiveSheet()->getPageSetup()->setFitToHeight(0);
正如你所看到的,这是没有必要调用setFitToPage(真),因为setFitToWidth(...)和setFitToHeight(...)触发此。
如果使用setFitToWidth(),你应该在一般还指定setFitToHeight()显式地像例子。小心依靠初始值。如果你是从PHPExcel 1.7.0升级到1.7.1凡适合到高度和适合与宽度的默认值改为0到1,这是尤其如此。
4.6.11。页边距
要设置页边距为工作表,使用此代码:
$objPHPExcel->getActiveSheet()->getPageMargins()->setTop(1);
$objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0.75);
$objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.75);
$objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(1);
注意,边缘值在英寸指定。
4.6.12。水平中心页/垂直
水平居中页/垂直,可以使用下面的代码:
$objPHPExcel->getActiveSheet()->getPageSetup()->setHorizontalCentered(true);
$objPHPExcel->getActiveSheet()->getPageSetup()->setVerticalCentered(false);
4.6.13。设置工作表的打印页眉和页脚
设置工作表的打印页眉和页脚可以用下面的代码行来完成:
$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader('&C&HPlease treat this document as confidential!');
$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddFooter('&L&B' . $objPHPExcel->getProperties()->getTitle() . '&RPage &P of &N');
替代和格式化代码(从&)可以在里面页眉和页脚中使用。没有在其中这些代码必须出现要求的顺序。
以下代码中第一次出现轮番格式ON,第二次出现再次将其关闭:
» Strikethrough
» Superscript
» Subscript
标和下标不能同时在同一时间打开。以先到者为准胜其他被忽略,而第一接通。
下面的代码由Excel2007的支持:
&L
Code for "left section" (there are three header / footer locations, "left", "center", and "right"). When two or more occurrences of this section marker exist, the contents from all markers are concatenated, in the order of appearance, and placed into the left section.
&P
Code for "current page #"
&N
Code for "total pages"
&font size
Code for "text font size", where font size is a font size in points.
&K
Code for "text font color"
» RGB Color is specified as RRGGBB
» Theme Color is specifed as TTSNN where TT is the theme color Id, S is either "+" or "-" of the tint/shade value, NN is the tint/shade value.
&S
Code for "text strikethrough" on / off
&X
Code for "text super script" on / off
&Y
Code for "text subscript" on / off
&C
Code for "center section". When two or more occurrences of this section marker exist, the contents from all markers are concatenated, in the order of appearance, and placed into the center section.
&D
Code for "date"
&T
Code for "time"
&G
Code for "picture as background"
Please make sure to add the image to the header/footer:
$objDrawing = new PHPExcel_Worksheet_HeaderFooterDrawing();
$objDrawing->setName('PHPExcel logo');
$objDrawing->setPath('./images/phpexcel_logo.gif');
$objDrawing->setHeight(36);
$objPHPExcel->getActiveSheet()->getHeaderFooter()->addImage($objDrawing, PHPExcel_Worksheet_HeaderFooter::IMAGE_HEADER_LEFT);
&U
Code for "text single underline"
&E
Code for "double underline"
&R
Code for "right section". When two or more occurrences of this section marker exist, the contents from all markers are concatenated, in the order of appearance, and placed into the right section.
&Z
Code for "this workbook's file path"
&F
Code for "this workbook's file name"
&A
Code for "sheet tab name"
&+
Code for add to page #
&-
Code for subtract from page #
&"font name,font type"
Code for "text font name" and "text font type", where font name and font type are strings specifying the name and type of the font, separated by a comma. When a hyphen appears in font name, it means "none specified". Both of font name and font type can be localized values.
&"-,Bold"
Code for "bold font style"
&B
Code for "bold font style"
&"-,Regular"
Code for "regular font style"
&"-,Italic"
Code for "italic font style"
&I
Code for "italic font style"
&"-,Bold Italic"
Code for "bold italic font style"
&O
Code for "outline style"
&H
Code for "shadow style"
提示
码上表似乎势不可挡您第一次试图找出如何写一些页眉或页脚。幸运的是,还有一个更简单的方法。让Microsoft Office Excel中做的工作适合你。
例如,在Microsoft Office Excel中创建,你作为使用程序自身的接口所需插入页眉和页脚XLSX文件。将文件保存为test.xlsx。现在,采取这一文件,并读出用PHPExcel如下值:
$objPHPexcel = PHPExcel_IOFactory::load('test.xlsx');
$objWorksheet = $objPHPexcel->getActiveSheet();
var_dump($objWorksheet->getHeaderFooter()->getOddFooter());
var_dump($objWorksheet->getHeaderFooter()->getEvenFooter());
var_dump($objWorksheet->getHeaderFooter()->getOddHeader());
var_dump($objWorksheet->getHeaderFooter()->getEvenHeader());
这揭示了奇/偶页眉和页脚的代码。有经验的用户可能会发现更容易重新命名为test.xlsx为test.zip,将它解压缩,并直接查阅有关XL /工作表/ sheetX.xml的内容找到页眉/页脚中的代码。
4.6.14。在一行或一列设置打印符
要设置打印断线,使用下面的代码,它设置在10排一排休息。
$objPHPExcel->getActiveSheet()->setBreak( 'A10' , PHPExcel_Worksheet::BREAK_ROW );
下面的代码行设置在D列的打印突破:
$objPHPExcel->getActiveSheet()->setBreak( 'D10' , PHPExcel_Worksheet::BREAK_COLUMN );
4.6.15。打印时,显示/隐藏网格线
显示/隐藏网格线打印时,使用下面的代码:
$objPHPExcel->getActiveSheet()->setShowGridlines(true);
4.6.16。设置行/列顶部重复/左
PHPExcel可以重复特定的行/顶部/左细胞页面。以下代码是如何重复行1至5中的特定的工作表的每一打印页上的例子:
$objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 5);
4.6.17。指定打印区域
要指定一个工作表的打印区域,使用下面的代码:
$objPHPExcel->getActiveSheet()->getPageSetup()->setPrintArea('A1:E5');
此外,还可以在一个工作表中的多个印刷方面:
$objPHPExcel->getActiveSheet()->getPageSetup()->setPrintArea('A1:E5,G4:M20');
4.6.18。设置单元格
一个单元可以用字体,边框,填充,...样式信息进行格式化。例如,可以设置为红色单元格的前景色,靠右对齐,并且边框为黑色,粗边框样式。让我们做到这一点的单元格B2:
$objPHPExcel->getActiveSheet()->getStyle('B2')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getFill()->getStartColor()->setARGB('FFFF0000');
Starting with PHPExcel 1.7.0 getStyle() also accepts a cell range as a parameter. For example, you can set a red background color on a range of cells:
$objPHPExcel->getActiveSheet()->getStyle('B3:B7')->getFill()
->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
->getStartColor()->setARGB('FFFF0000');
提示
建议风格多个单元格一次,例如使用的getStyle('A1:M500“),而不是在一个循环中个别样式的细胞。这相对于通过细胞循环和个别造型要快得多。
此外,还有一个替代的方式来设置的样式。下面的代码设置单元格的风格字体加粗,右对齐,上边框薄,渐变填充:
$styleArray = array(
'font' => array(
'bold' => true,
),
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT,
),
'borders' => array(
'top' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
),
),
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
'rotation' => 90,
'startcolor' => array(
'argb' => 'FFA0A0A0',
),
'endcolor' => array(
'argb' => 'FFFFFFFF',
),
),
);
$objPHPExcel->getActiveSheet()->getStyle('A3')->applyFromArray($styleArray);
或单元格区域:
$objPHPExcel->getActiveSheet()->getStyle('B3:B7')->applyFromArray($styleArray);
使用数组这种替代方法应该是更快,只要你设置多个样式属性执行方面。但不同的可能几乎是可测量的,除非你有工作簿中的许多不同的风格。
之前PHPExcel 1.7.0 duplicateStyleArray()是造型的小区范围的推荐方法,但是这种方法现已自的getStyle弃用()已开始接受一个单元格区域。
4.6.19。数字格式
你经常要在Excel格式化数字。例如,您可能想要一个千位分隔符加小数点后固定数量的小数。或者你想用一些数字是零填充。
在Microsoft Office Excel,你可能熟悉从“单元格格式”对话框中选择一个数字格式。这里有可用的一些预定义的数字格式包括一些日期。该对话框设计的方式,所以你不必除非您需要自定义数字格式与底层的原始数字格式的代码进行交互。
在PHPExcel,你也可以应用各种预定义的数字格式。例:
$objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1);
这将例如格式化数1587.2所以它显示为1,587.20,当你打开MS Office Excel中的工作簿。 (根据为在Microsoft Office Excel小数和千位分隔设置,它可能会显示为1.587,20)
您可以使用此实现完全一样,上面:
$objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()
->setFormatCode('#,##0.00');
在Microsoft Office Excel,以及在PHPExcel,你将有每当你需要一些特殊的自定义数字格式的原始数字格式代码进行交互。例:
$objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()
->setFormatCode('[Blue][>=3000]$#,##0;[Red][<0]$#,##0;$#,##0');
另一个例子是当你想要的数字零填充带前导零为固定长度:
$objPHPExcel->getActiveSheet()->getCell('A1')->setValue(19);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()
->setFormatCode('0000'); // will show as 0019 in Excel
小费
用于组成在Excel中的数字格式代码,可以将规则相当复杂。有时候,你知道如何创建Microsoft Office Excel中一些数字格式,但不知道底层的数字格式的代码是什么样子。你怎么找到它?
随PHPExcel读者前来救援。使用例如装入模板的工作簿Excel2007的读者透露的数字格式代码。例如如何读取单元格A1的数字格式的代码:
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load('template.xlsx');
var_dump($objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()
->getFormatCode());
高级用户可能会发现它更快地通过重命名为template.xlsx template.zip,解压缩,并寻找持有的数字格式代码XL / styles.xml相关的一段XML代码检查直接的数字格式代码。
4.6.20。校准和自动换行
让我们垂直对齐方式设置为顶部单元格A1:D4
$objPHPExcel->getActiveSheet()->getStyle('A1:D4')
->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_TOP);
下面是如何实现换行文字:
$objPHPExcel->getActiveSheet()->getStyle('A1:D4')
->getAlignment()->setWrapText(true);
4.6.21。设置工作簿的默认样式
有可能设置一个工作簿的默认的样式。让我们默认的字体设置为宋体大小8:
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');
$objPHPExcel->getDefaultStyle()->getFont()->setSize(8);
4.6.22。造型单元格边框
在PHPExcel很容易在矩形选择应用各种边框。下面是如何应用厚厚的红色边框轮廓围绕单元格B2:G8。
$styleArray = array(
'borders' => array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_THICK,
'color' => array('argb' => 'FFFF0000'),
),
),
);
$objWorksheet->getStyle('B2:G8')->applyFromArray($styleArray);
在Microsoft Office Excel,上述操作就相当于选择单元格B2:G8,启动风格的对话框,选择一个厚厚的红色边框,并单击“纲要”边框组件。
注意,边界轮廓被施加到矩形选择B2:单独G8作为一个整体,而不是在每个小区。
你可以只用5个基本的边框和上一次单细胞操作实现任何边框效果:
Array key
Maps to property
left
right
top
bottom
diagonal
getLeft()
getRight()
getTop()
getBottom()
getDiagonal()
额外的快捷键边框派上用场,就像上面的例子。这些快捷键可用边界:
Array key
Maps to property
allborders
outline
inside
vertical
horizontal
getAllBorders()
getOutline()
getInside()
getVertical()
getHorizontal()
所有边境快捷键的概述中可以看到下面的图片:
如果同时设置例如allborders和垂直,那么我们有“重叠”边框和组件的人有哪里有边界重叠拉拢对方。在PHPExcel,从弱到强的边界,列表如下:allborders,大纲/里面,垂直/水平,左/右/上/下/对角线。
这个边界层次可被用来实现以容易的方式的各种效果。
4.6.23。条件格式的单元格
一个单元可以有条件格式化,基于特定的规则。例如,可以如果它的值是零以下,并以绿色,如果它的值是零个或多个单元格的前景颜色设置为红色。
人们可以使用以下代码设置条件样式规则集到单元:
$objConditional1 = new PHPExcel_Style_Conditional();
$objConditional1->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS);
$objConditional1->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_LESSTHAN);
$objConditional1->addCondition('0');
$objConditional1->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
$objConditional1->getStyle()->getFont()->setBold(true);
$objConditional2 = new PHPExcel_Style_Conditional();
$objConditional2->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS);
$objConditional2->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_GREATERTHANOREQUAL);
$objConditional2->addCondition('0');
$objConditional2->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_GREEN);
$objConditional2->getStyle()->getFont()->setBold(true);
$conditionalStyles = $objPHPExcel->getActiveSheet()->getStyle('B2')->getConditionalStyles();
array_push($conditionalStyles, $objConditional1);
array_push($conditionalStyles, $objConditional2);
$objPHPExcel->getActiveSheet()->getStyle('B2')->setConditionalStyles($conditionalStyles);
如果要复制的规则集到其他单元格,可以复制该样式对象:
$objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('B2'), 'B3:B7' );
4.6.24。注释添加到单元格
要将注释添加到单元格,使用下面的代码。下面的例子增加了电池E11评论:
$objPHPExcel->getActiveSheet()->getComment('E11')->setAuthor('PHPExcel');
$objCommentRichText = $objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun('PHPExcel:');
$objCommentRichText->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun("\r\n");
$objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun('Total amount on the current invoice, excluding VAT.');
4.6.25。应用自动筛选到的单元格区域
要应用自动筛选的单元格区域,请使用以下代码:
$objPHPExcel->getActiveSheet()->setAutoFilter('A1:C9');
请确保您始终包含完整的过滤范围!
Excel中确实支持仅设置标题行,但是这不是一个最好的做法?
4.6.26。在电子表格设置的安全性
Excel提供了3个级别的“保护”:文档安全性,板材的安全性和电池的安全性。
- 文档安全允许你在一个完整的电子表格设置密码,允许输入该密码时,只所做的更改。
- 工作表的安全性提供了其他安全选项:您可以禁止在特定工作表中插入的行,禁止排序,...
- 电池的安全性提供了锁定/解锁单元以及显示/隐藏内部公式选项
关于设置文档安全性的一个例子:
$objPHPExcel->getSecurity()->setLockWindows(true);
$objPHPExcel->getSecurity()->setLockStructure(true);
$objPHPExcel->getSecurity()->setWorkbookPassword("PHPExcel");
关于设置工作表安全性的一个例子:
$objPHPExcel->getActiveSheet()->getProtection()->setPassword('PHPExcel');
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
$objPHPExcel->getActiveSheet()->getProtection()->setSort(true);
$objPHPExcel->getActiveSheet()->getProtection()->setInsertRows(true);
$objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(true);
关于设置单元安全性的一个例子:
$objPHPExcel->getActiveSheet()->getStyle('B1')->getProtection()->setLocked(
PHPExcel_Style_Protection::PROTECTION_UNPROTECTED
);
确保您启用工作表保护,如果你需要的任何工作表保护功能!这可以用下面的代码来实现:
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
4.6.27。上的小区设置数据验证
数据验证是Excel2007中的一个强大的功能。它允许以指定在可在一个特定的细胞中插入的数据的输入滤波器。该过滤器可以是一个范围(即值必须是0和10之间),一个列表(即,值必须从列表中选取的),...
下面这段代码只允许在B3单元格中输入10和20之间的数字:
$objValidation = $objPHPExcel->getActiveSheet()->getCell('B3')
->getDataValidation();
$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_WHOLE );
$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_STOP );
$objValidation->setAllowBlank(true);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setErrorTitle('Input error');
$objValidation->setError('Number is not allowed!');
$objValidation->setPromptTitle('Allowed input');
$objValidation->setPrompt('Only numbers between 10 and 20 are allowed.');
$objValidation->setFormula1(10);
$objValidation->setFormula2(20);
下面这段代码只允许在B3单元格中输入的数据从一个列表选择了一个项目:
$objValidation = $objPHPExcel->getActiveSheet()->getCell('B5')
->getDataValidation();
$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST );
$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
$objValidation->setAllowBlank(false);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setShowDropDown(true);
$objValidation->setErrorTitle('Input error');
$objValidation->setError('Value is not in list.');
$objValidation->setPromptTitle('Pick from list');
$objValidation->setPrompt('Please pick a value from the drop-down list.');
$objValidation->setFormula1('"Item A,Item B,Item C"');
当使用像上面数据验证列表,确保你把之间的名单“与”和你用逗号分割的项目(,)。
要记住,参加一个Excel公式中的任何字符串允许为最多255个字符(而不是字节)是很重要的。这台多少项目可以将字符串“项目A,项目B,C项”中有个限度。因此,它通常是一个更好的主意,直接在某些单元格区域中键入项目值,例如A1:A3,而是使用,比如说,
$objValidation->setFormula1('Sheet!$A$1:$A$3');
另一个好处是,该项目值本身可以包含逗号“,”字符本身。
如果你需要数据的多个单元格的验证,可以克隆规则集:
$objPHPExcel->getActiveSheet()->getCell('B8')->setDataValidation(clone $objValidation);