簡體   English   中英

如何從java中的excel單元格中提取公式來識別cmd函數?

[英]How to extract formula from excel cell in java to identify cmd functions?

以下是問題的簡要說明。

我正在識別具有 CMD 功能的 excel 文件,例如用於安全過濾的“=cmd|'/C calc'!A0”。 我們目前必須使用 Java 來解析這些文件。

我使用了以下兩種方法:

  1. 阿帕奇興趣點。 我可以將 excel 解析為工作簿並獲取每個單元格值。 我在這里面臨的問題是我們得到的單元格已經過評估,似乎沒有辦法檢查單元格是否以“cmd”開頭
  2. 蒂卡。 它類似於這里。 我能夠獲取元數據,但是當嘗試使用處理程序獲取 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 文檔:)

如果單元格中有如下公式,則無法獲取單元格的完整字符串

SUM(1+1)*cmd|' /C calc'!A0

當我使用myCell.getCellFormula() ,結果是SUM(1+1)*A1這不是預期的結果。

我想阻止 =cmd| 或 cmd| 如果在工作表的特定單元格中找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM