Excel中的DDE信息

我写了一个程序来读取使用Apache POI的excel文件,正如预期的那样工作。 下一部分是实现 – “拒绝读取excel文件,如果它包含DDE链接/信息。

我通过下面的链接了解DDE信息

  • https://en.wikipedia.org/wiki/Dynamic_Data_Exchange
  • http://jdde.pretty-tools.com/
  • https://v8doc.sas.com/sashtml/win/z3ples.htm

    我无法获得有关如何的信息

  • 一个Excel文件看起来像DDE的信息。

  • 确定一个包含DDE信息的Excel文件

    如果有人能帮助我理解上述两点,那将是很棒的。

提前致谢

对于XSSF可以使用XSSFWorkbook.getExternalLinksTable从XSSFWorkbook获取ExternalLinksTable的List

然后遍历List ,使用ExternalLinksTable.getCTExternalLink为每个ExternalLinksTable获取CTExternalLink ,然后检查CTExternalLink.isSetDdeLink是否为true 。 如果是这样,我们有一个DDE链接。

外部链接='C:\Users\Paul\Documents\[2014 Budget.xlsx]Details'!$R$7 or ='http://teamsite.company.com/corporate/[MySpreadsheet.xlsx]‌​Sheet1'!F4DDE无关。 使用这样的链接没有任何危险,所以没有理由“拒绝读取excel文件,如果它包含”这样的链接。 在Excel中, DDE链接看起来像=ddeapp|'parameters'!reference 。 所以我们需要不同的DDE链接,只有“拒绝读取excel文件,如果它包含” 真正的 DDE链接。 使用CTExternalLink.isSetDdeLink,我们可以做到这一点。

我怀疑“拒绝读取excel文件,如果它包含DDE链接”是关于避免Excel中的=ddeapp|'parameters'!reference单元格公式。 使用这样的公式,如果用户不注意并且是pipe理员,那么可以做非常危险的事情。 例如: =cmd|'/C control'!anyname 。 这将在Windows中打开系统控制应用程序,如果用户是pipe理员,那么它将允许更多…

由于DDE是来自IT新石器时代的古老技术,目前还没有很好的例子来高效地使用DDE 。 你需要一个ddeapp ,这是一个应用程序,允许通过DDE联系,然后返回一个值。 这个YouTubevideo:DTN IQFeed的DDE链接设置显示了一个例子。