返回

PhpOffice\\PhpSpreadsheet“结构化引用无法找到”错误:原因与解决方法

php

PhpOffice\PhpSpreadsheet:解决“结构化引用无法找到”错误

导言

PhpOffice\PhpSpreadsheet库是一个流行的PHP工具,用于读取和操作电子表格文件。然而,在使用库时,可能会遇到“Top Sheet! E102 -> Top Sheet! E15 -> Table7 for Structured Reference cannot be located”的错误。此错误表明库无法在电子表格中找到引用的结构化引用,导致无法获取单元格值。

问题原因

此错误通常是由以下原因引起的:

  • 不存在的表或命名范围: 确保电子表格中存在名为“Table7”的表或已定义的命名范围。
  • 错误的引用: 检查电子表格中引用的结构化引用是否正确。
  • 加载模式不正确: 使用setReadDataOnly(true)方法加载电子表格以禁用公式计算并直接返回单元格值。

解决方案

为了解决此错误,可以采取以下步骤:

  1. 检查表或命名范围: 验证是否存在名为“Table7”的表或命名范围。
  2. 更正引用: 确保电子表格中引用的工作表、范围或表名称无误。
  3. 使用setReadDataOnly 在加载电子表格时使用setReadDataOnly(true)方法。

代码示例

use PhpOffice\PhpSpreadsheet\IOFactory;

$file = $request->file;

$readerExtension = ucfirst($file->getClientOriginalExtension());
$reader = IOFactory::createReader($readerExtension);
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($request->file('file'));

$import = $spreadsheet->getSheetByName('Top Sheet');
$cell = $import->getCell('E102');
$cellValue = $cell->getValue();

其他提示

  • 检查电子表格中是否存在可能干扰PhpSpreadsheet读取的宏或VBA代码。
  • 尝试使用不同的Excel读取器,例如createReader('Xls')createReader('Xlsx')
  • 确保使用的PhpSpreadsheet版本是最新的。

常见问题解答

问:什么是结构化引用?
答:结构化引用是一种用于在电子表格中引用表格或命名范围的方法。

问:如何避免此错误?
答:确保使用正确的语法、引用存在的数据和使用setReadDataOnly(true)方法加载文件。

问:为什么需要禁用公式计算?
答:禁用公式计算可以提高读取速度并避免在获取单元格值时出现错误。

问:如何检查电子表格中的宏或VBA代码?
答:打开Excel文件并转到“开发人员”选项卡(如果不可见,请启用它)。单击“宏”按钮查看可用宏。

问:如何更新PhpSpreadsheet版本?
答:使用Composer或通过官方网站下载最新版本。