我编写了一个程序来使用Apache POI读取excel文件,该程序可以正常工作。下一部分是实施-“如果包含DDE链接/信息,则拒绝读取excel文件。

我通过以下链接阅读了有关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,可以使用ExternalLinksTablesList中获得XSSFWorkbook.getExternalLinksTableXSSFWorkbook

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

诸如='C:\Users\Paul\Documents\[2014 Budget.xlsx]Details'!$R$7='http://teamsite.company.com/corporate/[MySpreadsheet.xlsx]‌​Sheet1'!F4之类的外部链接与DDE无关。使用此类链接没有危险,因此也没有理由“拒绝读取excel文件(如果包含)”这样的链接。 DDE链接在Excel中看起来像=ddeapp|'parameters'!reference。因此,我们需要将DDE链接与其他链接区别开来,并且仅“拒绝读取excel文件(如果包含)”确实是DDE链接。使用CTExternalLink.isSetDdeLink,我们可以做到这一点。

我怀疑要求“如果包含DDE链接则拒绝读取excel文件”是关于避免在Excel中使用像=ddeapp|'parameters'!reference这样的单元格公式。如果用户不专心并且是管理员,那么使用这样的公式可能会做真正的坏事和危险的事情。示例:=cmd|'/C control'!anyname。这将在Windows中打开系统控制应用程序,如果用户是管理员,那么它将允许更多...

由于DDE是来自IT的新石器时代的古老技术,因此目前尚无以生产方式使用DDE的良好示例。您需要一个ddeapp应用程序,该应用程序允许通过DDE进行联系并返回一个值。此youtube video: DDE Link Setup for DTN IQFeed显示了一个示例。

关于java - Excel中的DDE信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47153078/

10-10 03:10