Python 通过 COM 调用 ChemDraw 实践

火影  金牌会员 | 2024-8-30 13:51:22 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 864|帖子 864|积分 2592

COM

Component Object Model (COM) 是由 Microsoft 提供的一种二进制接口技术,用于软件组件间的交互。它支持在不同编程语言、编程情况、进程和盘算机之间以语言中立的方式使用对象。
使用 Python 通过 COM 接口调用 ChemDraw 绘制分子及获取文档中的对象

Python 提供了一些常用的库,如 pywin32 和 comtypes,可以用来与 COM 举行交互。
以下是一个使用 Python 通过 COM 接口调用 ChemDraw 20 绘制分子结构并获取文档中对象数据的示例:
  1. import time
  2. import comtypes.client as w32
  3. import win32clipboard
  4. smiles = 'CC1=Nc2ccccc2[NMe]1'
  5. def set_clipboard_text(text: str):
  6.     win32clipboard.OpenClipboard()
  7.     win32clipboard.EmptyClipboard()
  8.     win32clipboard.SetClipboardText(text)
  9.     win32clipboard.CloseClipboard()
  10. # 创建 ChemDraw 实例
  11. ChemDraw = w32.CreateObject("ChemDraw.Application")
  12. # 新建文档
  13. doc = ChemDraw.Documents.Add()
  14. # 将 SMILES 粘贴到到剪贴板
  15. set_clipboard_text(smiles)
  16. # 将剪贴板中的 SMILES 粘贴到 ChemDraw 文档页面中
  17. doc.Paste()
  18. # way2: 直接 set 对象
  19. # 此操作不一定成功,如该操作无效,则使用“复制-粘贴”的方法
  20. # doc.Objects.Data.fset(doc.Objects.Data.instance, pVal=smiles)
  21. # 等待粘贴操作完成 过于频繁的复制粘贴操作可能会报错
  22. time.sleep(0.5)
  23. # 获取标准化的 SMILES
  24. canonical_smiles = doc.Objects.Data('chemical/x-smiles')
  25. # 获取 CDXML 文件内容
  26. cdxml_file = doc.Objects.Data('chemical/x-cdxml')
  27. # 获取 MOL 文件内容
  28. mol_block = doc.Objects.Data('chemical/x-mdl-molfile')
  29. # 清空文档中的对象,为下一次操作做准备
  30. doc.Objects.Clear()
  31. # 关闭文档以清理资源
  32. doc.Close()
  33. ChemDraw.Quit()
复制代码
留意:确保 Python 和 ChemDraw 的位数一致。如果 ChemDraw 是 32 位的,则需要在 32 位的 Python 情况下运行该脚本。此外,不同的 ChemDraw 接口可能不一致,需要根据实际情况修改。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

火影

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表