返回
PhpOffice\\PhpSpreadsheet“结构化引用无法找到”错误:原因与解决方法
php
2024-04-04 05:51:30
PhpOffice\PhpSpreadsheet:解决“结构化引用无法找到”错误
导言
PhpOffice\PhpSpreadsheet库是一个流行的PHP工具,用于读取和操作电子表格文件。然而,在使用库时,可能会遇到“Top Sheet! E102 -> Top Sheet! E15 -> Table7 for Structured Reference cannot be located”的错误。此错误表明库无法在电子表格中找到引用的结构化引用,导致无法获取单元格值。
问题原因
此错误通常是由以下原因引起的:
- 不存在的表或命名范围: 确保电子表格中存在名为“Table7”的表或已定义的命名范围。
- 错误的引用: 检查电子表格中引用的结构化引用是否正确。
- 加载模式不正确: 使用
setReadDataOnly(true)
方法加载电子表格以禁用公式计算并直接返回单元格值。
解决方案
为了解决此错误,可以采取以下步骤:
- 检查表或命名范围: 验证是否存在名为“Table7”的表或命名范围。
- 更正引用: 确保电子表格中引用的工作表、范围或表名称无误。
- 使用
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或通过官方网站下载最新版本。