2016年8月18日12:45:14 php
请注意这个是粗翻译版,仅供参考,不是精校版 精校版后面才会更新
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<br />\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(); 使用此方法建立一个新的工做表将被称为“工做表”或“工做表<N>”,其中“<N>”是最低数量能够保证,标题是独一无二的。 或者,您能够实例化一个新的工做表(设为无论你选择的名称),而后将其插入到使用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循环的工做表,行和单元格。 下面是咱们读到的工做表中全部的值,并在表中显示它们的例子。 <?php $objReader = PHPExcel_IOFactory::createReader('Excel2007'); $objReader->setReadDataOnly(true); $objPHPExcel = $objReader->load("test.xlsx"); $objWorksheet = $objPHPExcel->getActiveSheet(); echo '<table>' . "\n"; foreach ($objWorksheet->getRowIterator() as $row) { echo '<tr>' . "\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 '<td>' . $cell->getValue() . '</td>' . "\n"; } echo '</tr>' . "\n"; } echo '</table>' . "\n"; ?>
请注意,咱们已经设置单元格迭代器的setIterateOnlyExistingCells()为false。这使得这个循环的全部单元格,即便他们没有以前设置。html
细胞迭代将返回null做为细胞若是未在工做表中设定。
设置单元格迭代器的setIterateOnlyExistingCells()设置为false将循环在工做表中,能够在那一刻可用的全部单元格。这将须要来建立新的细胞,提升内存的使用!只使用它,若是它被用于循环是可能可用的全部细胞。
使用索引循环细胞
人们可使用的可能性由列和行索引等(0,1)来访问元值而不是“A1”用于读取和在循环中写单元值。前端
注意:在PHPExcel列索引,而行的索引是基于1从零开始。这意味着'A1'〜(0,1)web
下面是咱们读到的工做表中全部的值,并在表中显示它们的例子。sql
<?php
$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 '<table>' . "\n";
for ($row = 1; $row <= $highestRow; ++$row) {
echo '<tr>' . "\n";缓存
for ($col = 0; $col <= $highestColumnIndex; ++$col) {
echo '<td>' . $objWorksheet->getCellByColumnAndRow($col, $row)->getValue() . '</td>' . "\n";
}
echo '</tr>' . "\n";
}
echo '</table>' . "\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<br />\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() |
额外的快捷键边框派上用场,就像上面的例子。这些快捷键可用边界:
Array key |
Maps to property |
allborders inside 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);