PHPExcel编写器太慢了

时间:2014-09-18 12:31:10

标签: phpexcel

我正在生成一个.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);

}

1 个答案:

答案 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);

在致电保存

之前