【问题标题】:phpExcel cannot retrieve Excel cells containing index - match functionphpExcel 无法检索包含索引的 Excel 单元格 - 匹配函数
【发布时间】:2016-12-13 06:18:16
【问题描述】:

我需要将电子表格中的数据导入数据库。最初,我使用 phpExcel 将每个工作表导出为 csv 文件,但只要有一个包含索引匹配函数的单元格,phpExcel 就无法检索该单元格值。

=INDEX(Sheet1!$E$2:$E$100,MATCH(TRUE,EXACT(B16,Sheet1!$A$2:$A$100),0))

然后我决定使用 phpExcel 的 toArray(null,true,true,true) 将数据直接从电子表格导出到数据库中,以将工作表加载到数组中。第二个参数 ($calculateFormulas) 为真,但 phpExcel 仍然无法检索包含索引匹配函数的任何单元格的单元格值。

我在一篇文章中阅读到谨慎使用 $objReader->setReadDataOnly(true) - 我试了一下,但仍然没有运气。

一种解决方案是打开电子表格,复制每个工作表并粘贴特殊值,但我认为 toArray() 中的 $calculateFormulas 会这样做。该解决方案不是很吸引人,因为我有大约 50 个电子表格,每个电子表格包含 5 个工作表,并且它们会定期出现:(

任何建议都非常感谢。

【问题讨论】:

    标签: excel phpexcel


    【解决方案1】:

    我有同样的问题(几分钟前),但无法直接用 PHPExcel 解决。相反,我编辑了 Excel 文件中的单元格,将原始公式划分为不同的单元格。

    最初我在每个单元格中都有这个公式(在这个例子中是 C13):

    • =IF(INDEX(DatosIntel!$N$1:$N$77,MATCH(B13,DatosIntel!$H$1:$H$77,0))=0,$y$1,1)

    现在,我一分为二(Q13 和 C13):

    • =MATCH(B13,DatosIntel!$H$1:$H$77,0)
    • =IF(INDEX(DatosIntel!$N$1:$N$77,Q13,0)=0,$Y$1,1)

    我什至使用 PHPExcel 为 C13 编写了新内容:

    • $objTpl->getActiveSheet()->setCellValue('C13', '=IF(INDEX(DatosIntel!$N$1:$N$77,Q13,0)=0,$Y$1,1)');

    似乎无法正确解析一个单元格中包含的复杂公式以使用 PHPExcel 进行读取。

    我希望这会有所帮助。

    【讨论】:

    • 非常感谢您的回复 - 看起来很多人都没有遇到过这个问题。我认为你拆分公式的方法有效??
    • 是的,它对我有用。如果您尝试用“&”连接超过 2 个字符串,您会发现类似的问题。例如:=A2 &"text" &B5... PhpExcel 将离开 =A2 &"text"。但这可以使用 Concatenate 函数来解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2019-07-27
    • 2020-11-22
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多