Java 确保excel工作表是否包含任何用户定义的函数

Java 确保excel工作表是否包含任何用户定义的函数,java,excel,Java,Excel,我的应用程序包含一个上载选项,用户可以从中上载文件(任何文件)。 我知道用户有能力在excel工作表中编写代码/脚本。因此,我如何防止这种情况发生,因为这可能导致安全漏洞。 或者我可以应用什么检查来知道上传的工作表包含任何函数?我从Java标记中假设,上传工作表的应用程序是Java应用程序 使用apachepoi,您可以使用POIFSReader(参见此)在较低级别上读取文件 这里有一个Réal Gagnon的网站,展示了如何通过查看名字来检查内容 我不得不修改侦听器(添加了另一个比较) 所以它

我的应用程序包含一个上载选项,用户可以从中上载文件(任何文件)。 我知道用户有能力在excel工作表中编写代码/脚本。因此,我如何防止这种情况发生,因为这可能导致安全漏洞。
或者我可以应用什么检查来知道上传的工作表包含任何函数?

我从Java标记中假设,上传工作表的应用程序是Java应用程序

使用
apachepoi
,您可以使用
POIFSReader
(参见此)在较低级别上读取文件

这里有一个Réal Gagnon的网站,展示了如何通过查看名字来检查内容

我不得不修改侦听器(添加了另一个比较)


所以它对一些测试文件有效。您可能需要调整/扩展检查。

HSSFCell.CELL\u TYPE\u公式
用于简单的单元格公式。OP想知道如何检测宏。@Jim Garrison谢谢你的提示,我已经更新了答案。谢谢,解决了我的问题。:)@不客气。感谢您确认它解决了您的问题。
class MacroListener implements POIFSReaderListener {
  [...]

  @Override
  public void processPOIFSReaderEvent(POIFSReaderEvent event) {
    System.out.println("  Event: Name " + event.getName() + ", path "
            + event.getPath());
    if (event.getPath().toString().startsWith("\\Macros")
            || event.getPath().toString().startsWith("\\_VBA")
            || event.getPath().toString().contains("_VBA_")) {
        this.macroDetected = true;
    }
  }
}