java - 如何从java中的excel单元格中提取公式来识别cmd函数?
问题描述
这是问题的简要说明。
我正在努力识别具有 CMD 功能的 excel 文件,例如 "=cmd|'/C calc'!A0" 用于安全过滤。我们目前必须使用 Java 来解析这些文件。
我使用了以下两种方法:
- 阿帕奇 POI。我可以将 excel 解析为工作簿并获取每个单元格的值。我在这里面临的问题是我们得到的单元格已经被评估,似乎没有办法检查单元格是否以“cmd”开头
- 蒂卡。它在这里类似。我能够获取元数据,但是当尝试使用处理程序来获取 excelt 文件的测试时,它更像是 !#REF,这不是我们需要的。
有没有人有一些建议我该怎么做?这真的很有帮助。
谢谢你。
解决方案
我确实找到了一个精心设计的解决方案,我使用上面链接的 stackoverflow 来使用它。它同时处理 XSSF 和 HSSF。
if (workbook instanceof XSSFWorkbook) {
XSSFWorkbook xssfWorkbook = (XSSFWorkbook) workbook;
List<ExternalLinksTable> externalLinks = xssfWorkbook.getExternalLinksTable();
for (ExternalLinksTable linksTable : externalLinks) {
if (linksTable.getCTExternalLink().isSetDdeLink()) {
return false;
}
}
} else {
HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook;
Set<String> references = getWorkbookReferences(hssfWorkbook);
if (containsStartsWithSubString(references, "cmd")) {
return false;
}
}
private Set<String> getWorkbookReferences (HSSFWorkbook wb)
{
Set<String> references = new HashSet<>();
InternalWorkbook internalWorkbook = wb.getInternalWorkbook();
int extSheetIdx = 0;
while (internalWorkbook.getExternalSheet(extSheetIdx) != null) {
EvaluationWorkbook.ExternalSheet extSheet =
internalWorkbook.getExternalSheet(extSheetIdx++);
references.add(extSheet.getWorkbookName());
// fail safe.
if (extSheetIdx > maxExterLinks) {
return references;
}
}
return references;
}
欢迎任何建议!
不幸的是,我仍在研究如何识别 Word 文档:)
推荐阅读
- jquery - jQuery悬停更改边框和鼠标离开问题
- java - 为数组类型设置数据 - RestAssured Post 方法
- python - 如何在同一行中漂亮地打印带有长数组的 json
- java - Java 分析新手,我似乎有线程问题
- pandas - 将时间戳列转换为浮点分钟熊猫 python
- css - 居中网格内容,同时左对齐每一行的内容,具有任意项/列宽度
- docker - Docker 与 Symfony 5
- c# - 如何为按钮单击 C# 创建事件和正确使用事件处理程序
- excel - 基于单元格类的 DataTables Excel 样式
- android - Android:后退按钮的覆盖在库中不起作用