You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:01:00