PhpSpreadsheet读取XLSX图表:按上下排序与获取图表名称咨询
解决PhpSpreadsheet图表排序与名称读取问题
1. 按图表上下位置排序
PhpSpreadsheet默认按图表的创建/粘贴顺序返回结果,要实现从上到下的位置排序,需基于图表的top坐标值处理:
- 通过
getCharts()获取工作表内所有图表对象数组 - 使用
usort()对数组排序,比较每个图表的getTop()返回值,按数值从小到大排列(数值越小,位置越靠上)
示例代码:
$reader = IOFactory::createReader('Xlsx'); $reader->setIncludeCharts(true); $reader->setLoadAllSheets(); $spreadsheet = $reader->load('file.xlsx'); $loadedSheetNames = $spreadsheet->getSheetNames(); foreach ($loadedSheetNames as $loadedSheetName) { $activeSheet = $spreadsheet->getSheetByName($loadedSheetName); $charts = $activeSheet->getCharts(); // 按top坐标从上到下排序图表 usort($charts, function($a, $b) { return $a->getTop() - $b->getTop(); }); // 此时$charts数组已按位置排序,索引0对应最上方的图表 }
2. 读取Excel中的图表名称
Excel中选中图表时显示的对象名称,可通过Chart对象的getName()方法直接获取;若需要图表的标题文本,则调用getTitle()->getText():
示例代码(承接上述排序逻辑):
foreach ($charts as $index => $chart) { // 获取Excel中显示的图表对象名称 $chartObjectName = $chart->getName(); // 获取图表的标题文本(无标题时返回自定义提示) $chartTitle = $chart->getTitle() ? $chart->getTitle()->getText() : '无标题'; echo "排序后索引{$index}的图表:对象名称={$chartObjectName},标题={$chartTitle}\n"; }
注意:若图表未手动设置名称,getName()会返回Excel默认命名(如Chart 1、Chart 2),与Excel内的规则一致。
内容的提问来源于stack exchange,提问作者Matteor
相关产品推荐
相关产品推荐

