首页/新闻资讯/正文详情

PHPExcel 样式数组速查:applyFromArray() 全量键名映射与源码级解析

发布时间:2026/9/25 13:54:04 来源:云帆数科 栏目:资讯中心
PHPExcel 样式数组速查:applyFromArray() 全量键名映射与源码级解析
PHPExcel 样式数组速查applyFromArray() 全量键名映射与源码级解析【免费下载链接】PHPExcelARCHIVED项目地址: https://gitcode.com/gh_mirrors/ph/PHPExcel导读本文是 PHPExcel Developer Documentation 的附录篇对应仓库 Documentation/markdown/Overview/11-Appendices.md完整整理 PHPExcel 中PHPExcel_Style及各样式子组件applyFromArray()方法所支持的全部数组键名。当你在生成报表时希望用一段结构化数组一次性完成字体、填充、边框、对齐、数字格式、保护等样式的批量设置而不是逐个调用setXxx()方法本文给出的键名映射表就是你的标准参考。读完后你将掌握每个键对应的 setter/getter 属性、嵌套子数组的写法、边框高级模式advanced mode的边界处理逻辑以及如何在非 supervisor 对象上直接应用样式数组。说明原附录开头的 Credits 小节指向外部站点codeplex 链接原文仅供获取贡献者名单与核心技术无关此处不再展开仓库本体代码版权与许可信息见 Classes/PHPExcel/Style.php 头部注释及 license.md。applyFromArray() 的两种工作模式在给出键名映射表之前先理解applyFromArray()的调用路径这决定了数组键如何被消费。入口实现在 Classes/PHPExcel/Style.php签名如下public function applyFromArray($pStyles null, $pAdvanced true)第二个参数$pAdvanced默认true仅在 supervisor 样式对象上且传入borders键时生效即“高级模式”专门处理边框的分区推导其余场景走“简单模式”simple mode。两种模式都会在$pStyles不是数组时抛出PHPExcel_Exception(Invalid style array passed.)Style.php因此任何键值必须以数组形式传入。非 supervisor直接透传子组件当调用对象不是 supervisor例如new PHPExcel_Style()创建的独立样式对象或通过$cell-getStyle()取得的真实样式时方法会依次把数组分发给对应的子组件if (array_key_exists(fill, $pStyles)) { $this-getFill()-applyFromArray($pStyles[fill]); } if (array_key_exists(font, $pStyles)) { $this-getFont()-applyFromArray($pStyles[font]); } if (array_key_exists(borders, $pStyles)) { $this-getBorders()-applyFromArray($pStyles[borders]); } if (array_key_exists(alignment, $pStyles)) { $this-getAlignment()-applyFromArray($pStyles[alignment]); } if (array_key_exists(numberformat, $pStyles)) { $this-getNumberFormat()-applyFromArray($pStyles[numberformat]); } if (array_key_exists(protection, $pStyles)) { $this-getProtection()-applyFromArray($pStyles[protection]); } if (array_key_exists(quotePrefix, $pStyles)) { $this-quotePrefix $pStyles[quotePrefix]; }源码见 Classes/PHPExcel/Style.php可以看到六个子组件键映射到各自的getXxx()取值其值必须是“另一个样式数组”再递归交给子组件的applyFromArray()唯一的例外是quotePrefix它直接赋值给样式对象本身的属性。supervisor克隆-应用-去重当对象是 supervisor典型场景$objPHPExcel-getActiveSheet()-getStyle(A1:B2)返回的样式代理时流程变为通过getSelectedCells()取得当前选中的单元格区域按列/行/单元格三种选择类型收集旧的 XF 索引$oldXfIndexes见 Style.php克隆每个受影响的样式对象并应用数组然后通过getHashCode()去重若工作簿中已存在相同哈希的样式则复用其索引否则addCellXf()新增Style.php最后把新 XF 索引写回对应列/行/单元格维度Style.php。这正是 PHPExcel 的“共享样式”内存优化机制——相同样式只保存一份 XF 记录配合__clone()深拷贝见 Classes/PHPExcel/Style/Supervisor.php大量单元格套用相同样式不会线性消耗内存。PHPExcel_Style 顶层键名映射下表来自附录原文列出PHPExcel_Style::applyFromArray()的顶层键11-Appendices.md数组键映射属性值类型fillgetFill()样式数组见 PHPExcel_Style_FillfontgetFont()样式数组见 PHPExcel_Style_FontbordersgetBorders()样式数组见 PHPExcel_Style_BordersalignmentgetAlignment()样式数组见 PHPExcel_Style_AlignmentnumberformatgetNumberFormat()样式数组见 PHPExcel_Style_NumberFormatprotectiongetProtection()样式数组见 PHPExcel_Style_Protection规则附录原文若“映射属性”列指向 setter则该键的值被直接应用若指向 getter则该键的值作为另一个样式数组被传递。表中除numberformat、protection外的四列均指向 getter。此外从 Style.php 可知顶层键还支持quotePrefix布尔值直接赋值。配套示例getStyle()返回 supervisor因此是高级模式可用的完整写法$objPHPExcel-getActiveSheet()-getStyle(B2)-applyFromArray( array( font array( name Arial, bold true, italic false, underline PHPExcel_Style_Font::UNDERLINE_DOUBLE, strike false, color array(rgb 808080) ), borders array( bottom array( style PHPExcel_Style_Border::BORDER_DASHDOT, color array(rgb 808080) ), top array( style PHPExcel_Style_Border::BORDER_DASHDOT, color array(rgb 808080) ) ), quotePrefix true ) );示例出自 Classes/PHPExcel/Style.php 的 docblock子组件键名映射全表以下各表均为附录原文完整继承同时补充了源码中可确认的默认值与取值范围。PHPExcel_Style_Fill填充数组键映射属性typesetFillType()rotationsetRotation()startcolorgetStartColor()endcolorgetEndColor()colorgetStartColor()实现见 Classes/PHPExcel/Style/Fill.phptype、rotation走 setterstartcolor、endcolor、color三个键的值都是颜色数组其中color与startcolor等价都作用于getStartColor()。type常用取值PHPExcel_Style_Fill::FILL_SOLID实心、FILL_NONE无填充默认、FILL_GRADIENT_LINEAR、FILL_GRADIENT_PATH、FILL_PATTERN_*系列setFillType()默认参数即FILL_NONEFill.php。color/startcolor/endcolor值形如array(rgb FFCCFF)或array(argb FFCCFFCC)见 Examples/23sharedstyles.php。PHPExcel_Style_Font字体数组键映射属性namesetName()boldsetBold()italicsetItalic()underlinesetUnderline()strikesetStrikethrough()colorgetColor()sizesetSize()superScriptsetSuperScript()subScriptsetSubScript()实现见 Classes/PHPExcel/Style/Font.php。color键的值是颜色数组交给getColor()-applyFromArray()其余键均为直接 setter。补充要点underline使用常量PHPExcel_Style_Font::UNDERLINE_NONE、UNDERLINE_DOUBLE、UNDERLINE_SINGLE等bold、italic、strike、superScript、subScript传布尔值name传字体名如Arialsize传数值磅值。PHPExcel_Style_Borders边框集合数组键映射属性allbordersgetLeft();getRight();getTop();getBottom()leftgetLeft()rightgetRight()topgetTop()bottomgetBottom()diagonalgetDiagonal()verticalgetVertical()horizontalgetHorizontal()diagonaldirectionsetDiagonalDirection()outlinesetOutline()实现见 Classes/PHPExcel/Style/Borders.php 起。allborders是快捷键值会同时应用给左/右/上/下四条边框left、right、top、bottom、diagonal、vertical、horizontal的值是“边框数组”见下节 Border。PHPExcel_Style_Border单条边框数组键映射属性stylesetBorderStyle()colorgetColor()实现见 Classes/PHPExcel/Style/Border.php 起。style常用常量PHPExcel_Style_Border::BORDER_THIN细线、BORDER_MEDIUM中粗线、BORDER_DASHDOT点划线、BORDER_DOUBLE、BORDER_NONE等。color同样是颜色数组。PHPExcel_Style_Alignment对齐数组键映射属性horizontalsetHorizontal()verticalsetVertical()rotationsetTextRotation()wrapsetWrapText()shrinkToFitsetShrinkToFit()indentsetIndent()实现见 Classes/PHPExcel/Style/Alignment.php 起。注意这里的rotation映射到setTextRotation()文本旋转角度与 Fill 的rotation含义不同wrap、shrinkToFit传布尔值horizontal/vertical使用常量如PHPExcel_Style_Alignment::HORIZONTAL_CENTER、VERTICAL_CENTER。PHPExcel_Style_NumberFormat数字格式数组键映射属性codesetFormatCode()实现见 Classes/PHPExcel/Style/NumberFormat.php 起。code传入格式字符串例如0.00、yyyy-mm-dd、0.00%或内置常量PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2等。PHPExcel_Style_Protection保护数组键映射属性lockedsetLocked()hiddensetHidden()实现见 Classes/PHPExcel/Style/Protection.php 起。两者均传布尔值locked常用常量PHPExcel_Style_Protection::PROTECTION_PROTECTED/PROTECTION_UNPROTECTED。保护效果需结合工作表/单元格的锁定状态才能生效。边框高级模式allborders / outline / inside 的分区推导这是applyFromArray()最复杂的部分也是$pAdvanced参数存在的意义。当 supervisor 对象收到含borders键的数组时Style.php会先把三个“快捷键”展开allborders→ 同时展开为outline与inside仅对未显式设置的组件生效outline→ 展开为top、right、bottom、leftinside→ 展开为vertical与horizontal。if (isset($pStyles[borders][allborders])) { foreach (array(outline, inside) as $component) { if (!isset($pStyles[borders][$component])) { $pStyles[borders][$component] $pStyles[borders][allborders]; } } unset($pStyles[borders][allborders]); } if (isset($pStyles[borders][outline])) { foreach (array(top, right, bottom, left) as $component) { if (!isset($pStyles[borders][$component])) { $pStyles[borders][$component] $pStyles[borders][outline]; } } unset($pStyles[borders][outline]); } if (isset($pStyles[borders][inside])) { foreach (array(vertical, horizontal) as $component) { if (!isset($pStyles[borders][$component])) { $pStyles[borders][$component] $pStyles[borders][inside]; } } unset($pStyles[borders][inside]); }Classes/PHPExcel/Style.php随后高级模式会把选中区域切分为最多 3×3 个“区域”region依据行列数min(..., 3)截断逐个计算每个区域与选区边缘的相对位置紧贴选区外缘的区域继承top/right/bottom/left边内部交界的边缘则按vertical/horizontal或已展开的inside值填充每个区域以简单模式applyFromArray($regionStyles, false)见 Style.php递归应用。这样做的好处是对A1:C3这类多行多列区域只需一组边框数组就能自动生成正确的“外框 内分隔线”无需手工为每条边写数组。结合实例共享样式的数组化应用仓库示例 Examples/23sharedstyles.php 展示了非 supervisor 路径的典型用法——创建两个独立的PHPExcel_Style对象用数组批量配置后复用$sharedStyle1 new PHPExcel_Style(); $sharedStyle1-applyFromArray( array(fill array( type PHPExcel_Style_Fill::FILL_SOLID, color array(argb FFCCFFCC) ), borders array( bottom array(style PHPExcel_Style_Border::BORDER_THIN), right array(style PHPExcel_Style_Border::BORDER_MEDIUM) ) ));Examples/23sharedstyles.php该示例通过setSharedStyle()把同一样式对象赋给多个单元格配合工作簿级的 XF 去重机制实现内存节省——这正是applyFromArray()数组键设计与 supervisor 克隆流程协同工作的实际场景。更多综合用法还可参考 Examples/05featuredemo.inc.php 与 Examples/22heavilyformatted.php。小结与使用建议场景推荐写法给区域套用整套样式getStyle(A1:D4)-applyFromArray([...])supervisor可走高级模式边框快捷设置用allborders/outline/inside键复用同一样式new PHPExcel_Style()applyFromArray()setSharedStyle()颜色统一写法array(rgb RRGGBB)或array(argb AARRGGBB)最后提醒三点一是键名区分大小写且必须与表内拼写一致如numberformat、quotePrefix源码使用array_key_exists()精确匹配二是传给applyFromArray()的非数组参数会直接抛异常三是numberformat、protection等键虽在附录表格中标注为 getter 映射实际应用时仍需以对应子组件的键code、locked/hidden组成内层数组。掌握这份键名映射表就能用一份结构清晰的数组完成绝大多数单元格样式设置让报表生成代码更简洁、更易维护。【免费下载链接】PHPExcelARCHIVED项目地址: https://gitcode.com/gh_mirrors/ph/PHPExcel创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

光电成像器件CAD仿真:从物理模型到像素阵列设计
光电成像器件CAD仿真:从物理模型到像素阵列设计

简介:以电场三大定理、连续超张弛迭代算法和拉格朗日插值算法为基础,结合C语言编程的光电成像器件CAD实验报告,完整实现了像管内电势计算、等势线绘制与对称轴电位求解的程序设计与验证。报告先推导有限差分方程,再引入超张弛迭代… · 2026/9/23 16:26:44

SAP PLM与西门子Teamcenter选型核心:流程驱动vs数据驱动
SAP PLM与西门子Teamcenter选型核心:流程驱动vs数据驱动

简介:本资源是一份面向制造业数字化转型决策者与IT规划人员的PLM系统选型专业对比分析材料,聚焦SAP PLM与西门子PLM在架构理念、集成能力、适用行业及实施风险等维度的深度差异。内容直击企业级PLM落地痛点:SAP PLM强调全生命周期数据贯通与E… · 2026/9/23 16:26:44

74LS181构建8位ALU:数据通路、控制信号与串行乘法实战解析
74LS181构建8位ALU:数据通路、控制信号与串行乘法实战解析

简介:运算器实验是计算机组成原理课程中的核心实践环节,这份PDF资料围绕74LS181算术逻辑运算器,完整介绍了算术运算、逻辑运算和基于“累加-移位”原理的串行乘法实验。内容涉及拨码开关经三态门74LS244输入数据、74LS273寄存器REG_0/REG_1存… · 2026/9/23 16:26:43

Atlas 300V 24G加速卡详解与YOLO部署实战指南
Atlas 300V 24G加速卡详解与YOLO部署实战指南

如果你最近在网络上看过"atlas"这个词,八成绕不开华为昇腾系列AI加速卡。作为长期做深度学习部署的从业者,我几乎每天都要跟它打交道。最近不少朋友在问两件事:一是"atlas部署yolo怎么搞",二是"atlas 30… · 2026/9/25 13:53:44

5个免费AI写作软件搭配TaoToken:效率办公告别熬夜加班苦日子
5个免费AI写作软件搭配TaoToken:效率办公告别熬夜加班苦日子

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 13:53:31

AI视频生成新手第一课:用Seedance2-Skill快速上手即梦Seedance 2.0提示词(完整指南)
AI视频生成新手第一课:用Seedance2-Skill快速上手即梦Seedance 2.0提示词(完整指南)

AI视频生成新手第一课:用Seedance2-Skill快速上手即梦Seedance 2.0提示词(完整指南) 【免费下载链接】seedance2-skill skill to create best prompts for generating videos with seedance2.0 项目地址: https://gitcode.com/gh_mirrors/s… · 2026/9/25 13:53:31

C#酒店管理系统源码实战:WinForms前台与SQL Server后台全解析
C#酒店管理系统源码实战:WinForms前台与SQL Server后台全解析

简介:这是一套基于C#的酒店管理系统源码,适合学习桌面应用程序开发、酒店业务信息化管理的学生或初级开发者使用。系统覆盖前台与后台两大核心场景:前台支持预约、入住、换房、退房结算、客户信息维护及按房间号消费;后台提供财产… · 2026/9/25 13:53:31

LLS OAI 项目级会话记录模式:为 GitHub Copilot Chat 打造智能日志助手,一键生成工作日志告别繁琐汇报
LLS OAI 项目级会话记录模式:为 GitHub Copilot Chat 打造智能日志助手,一键生成工作日志告别繁琐汇报

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 13:53:25

3D校园导航系统开发实战:Three.js与A*算法应用解析
3D校园导航系统开发实战:Three.js与A*算法应用解析

1. 项目立项与需求分析1.1 为什么选择3D校园导航这个思路来源于一次典型的“软件工程课程设计”式需求:给学校做一个校园导航系统。但一开始大家讨论的是平面地图导航,类似百度地图那种。后来聊到新生报到的时候,很多人在校园里找不到楼、找不… · 2026/9/25 13:53:25

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码