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'!F4
与DDE
无关。 使用这样的链接没有任何危险,所以没有理由“拒绝读取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链接设置显示了一个例子。