我正在生成一个.xls文件,其中有一个包含以下公式的列:
IF(A1 = 1;'xxx'; IF(A1 = 2;'yyy'; IF(A1 = 3;'zzz'...
你知道,如果它不是excel公式,它将是一个SWITCH。
问题是,根据我使用的IF数量,生成.xls文件所需的时间呈指数级增长。
文件大小差异不大。
我有18个案例,这意味着18个IF,这需要花费不可接受的时间。
为什么会这样?有什么我可能做错了吗?
以下是示例代码:
for ($k = 1; $k<16; $k++){
$cellID = "A".($row+$k);
$codes_if = '=IF('.$cellID.'="1",4579,'
.'IF('.$cellID.'="2",7978,'
... // some more IF's
.'""))))))))))))))))';
$actSheet->SetCellValue("B".($row+$k),$codes_if);
}
答案 0 :(得分:1)
具有多个嵌套IF的这样的公式无论如何都是低效的
考虑用VLOOKUP代替多个嵌套的IF
e.g。
=VLOOKUP(A1,E1:F3,2,TRUE)
其中列E包含查找值1, 2, 3, ...
,列F包含返回值aaa, yyy, zzz
等)
这相当于MS Excel中的switch语句
您会发现使用VLOOKUP比嵌套IF更有效
为了减少进一步保存文件所需的时间,请注意PHPExcel会在默认 之前计算所有公式。您可以通过调用
来更改该行为$objWriter->setPreCalculateFormulas(false);
在致电保存
之前