我编写了一个程序来使用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
,可以使用ExternalLinksTables从List
中获得XSSFWorkbook.getExternalLinksTable的XSSFWorkbook
。
然后遍历该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/