我有一个Excel文件(大约5000到8000行和32个cols),可以使用表中的值进行编辑。我已经成功完成了这项工作,但我希望减少脚本的平均运行时间。
所以我尝试将加载的对象保存到会话中,并在每次运行脚本时检查它是否存在,而不是每次都重新加载。
if (!isset($_SESSION['col10Read']))
{
global $sheet;
$objPHPExcel = $objReader->load($inputFileName);
$_SESSION['col10Read'] = $objPHPExcel;
$sheet = $objPHPExcel->getActiveSheet();
}
else
{
global $sheet;
$sheet = $_SESSION['col10Read']->getActiveSheet();
}
但是当我第一次运行代码后(当我的会话变量存在时),我收到此错误:
致命错误:未捕获的异常' PHPExcel_Exception'消息'您请求的工作表索引:0超出范围。实际的工作表数为0。'
我现在一直在努力尝试一天,无休止地搜索谷歌,任何帮助都会受到谴责。
答案 0 :(得分:1)
$_SESSION
由serializing传递给它的任何对象。并非所有类都被设计为序列化,看起来您正在存储的对象类型就是这些类。解决此类问题的最简单方法是存储足够的信息来恢复对象的状态而不存储对象本身:例如,您可以存储文件名和您所在的行。我知道这可能是你想要避免的,但不幸的是,你正在使用的框架不是为你想要实现的优化而设计的。