• 什么是COM技术
  • IBM I2 Analyst's Notebook软件介绍
  • 如何使用Python调用I2的COM接口,批量自动生成图表,提高工作效率



python写com组件 com组件 python_python写com组件


COM技术

COM:组件对象模型,是Component Object Model的缩写,是微软提出的一种组件技术,它是一种面向对象的编程模式,定义了对象在单个应用程序内部或多个应用程序之间交互的行为方式,是一种无关平台、语言中立、位置透明、支持网络的中间件技术。COM定义了适用于多种操作系统和硬件平台的二进制标准。COM定义了在不同的硬件平台上运行的对象之间的标准线格式和协议进行交互。

COM组件由以Win 32动态连接库(DLL)或可执行文件(EXE)形式发布的可执行代码所组成。遵循COM规范编写出来的组件将能够满足对组件架构的所有要求。COM组件可以给应用程序、操作系统以及其他组件提供服务。

这是小编准备的py thon学习资料,想学习py thon或者人工智能的都可以私信小编“01”免费获取领取资料!


python写com组件 com组件 python_自动生成_02


简单地说,一个成熟软件可以通过COM技术,提供其他语言可以调用的接口,实现跨平台、跨软件的信息处理交互,或者实现程序的自动化。比如,可以根据输入的内容自动生成Word文档,根据录入的数据自动生成Excel表格。避免了大量重复劳动。

IBM I2 Analyst's Notebook

IBM i2 Analyst's Notebook,一般在用户交流中简称为I2,它是IBM公司一款数据可视化(I2:information to image)工具软件。I2的多维数据可视化分析功能可为分析人员提供支持,以便他们能够快速发现隐藏在数据中的联系和模式。比如,查看网络中的关系,使用集成的社交网络分析功能来进一步了解罪犯、恐怖分子和欺诈性网络的构成、层次和作案手段。

业务背景和难题

在风险管控实践中,IBM I2 Analyst's Notebook,简称I2,对识别隐性担保关系、洗钱网络、非法融资平台等有很强的辅助作用。但在使用过程中,往往需要经过数据整理、导入、格式化等多个步骤才能生成可读性较强的图表,对多个类似数据源也不能批量生成,而是需要一个个手动操作,大大影响了检查工作效率。

问题解决思路

分析后发现,IBM i2 Analyst's Notebook安装成功后,会安装多个ActiveX控件,并在系统中注册多个COM服务。

用OleView工具查看系统中已注册的COM服务,展开 Type Libraries,向下滚动可以看到I2相关的COM服务,其中最重要的服务是“i2 Notebook 8.0 Application Type Library”,对应的对象名称为“LinkNotebook.Application.7”。这里显示的版本7是为了保持向下兼容性,为固定值,可能与当前安装的I2版本不一致。

I2的COM服务提供的接口对象层级关系如下,类似于Excel的层级:工作簿->图表区->图表元素->样式。


python写com组件 com组件 python_应用程序_03


既然I2隐含提供了COM接口,那就完全可以使用Python来批量读取数据,批量自动生成I2的图表关系文件,避免图表生成过程中耗费时间和精力的重复劳动,将检查人力资源更多投放到数据分析和核查中

思路实现环境

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,具有丰富、强大的库,功能全。其中win32com库可以在Windows环境中用于创建、操作COM服务。

基于Python环境引入win32com库,调用I2的COM接口,实现批量网络关系图的自动生成。

本文分析所使用的环境具体如下:

软件或环境说明Win10 64位系统环境IBM i2 Analyst’s Notebook 9.0I2软件Python 2.7数据分析语言平台win32comCOM接口调用库os本地文件系统操作库

代码实现

1# coding: utf-8 2 3# Func:调用COM接口生成I2的图表文件 4# 可左右滑动查看 5 6import win32com.client 7import os 8 9# 创建I2 Notebook对象10objApp = win32com.client.Dispatch('LinkNotebook.Application.7')11# 是否显示I2软件窗口12objApp.Visible = True 1314# 添加一个空白图表15objApp.Charts.Add('')1617# 获取当前图表对象18objChart = objApp.Charts.CurrentChart19# 获取当前图表的实体(节点)集合20objEntityTypeColl = objChart.EntityTypes2122# 添加一个图表中节点类型 并指定图标为Person23objEntityType = objEntityTypeColl.Add(u'客户','Person',0)2425# 添加节点26## 获取当前图表Icon类型节点的样式27objIconStyle = objChart.CurrentIconStyle28objIconStyle.Type = objEntityType29## 添加两个节点 函数原型为LNChart.CreateIcon (Style, X, Y, Label, Identity)30objIcon1 = objChart.CreateIcon(objIconStyle,150,150,u'客户1','001')31## 节点2 加框突出显示32objIconStyle.SetSubItemVisible(8,True)33objIcon2 = objChart.CreateIcon(objIconStyle,350,150,u'客户2','002')3435# 添加链接36## 获取当前图表链接的样式37objLinkStyle = objChart.CurrentLinkStyle38## 设置链接的箭头39objLinkStyle.ArrowStyle = 1 # 0-ArrowStyle.ArrowNone 1-ArrowStyle.ArrowOnHead40## 创建链接 函数原型为LNChart.CreateLink (Style, EndFrom, EndTo, Label)41objLink1 = objChart.CreateLink(objLinkStyle,objIcon1,objIcon2,u'1000.02')4243# 添加图表属性 给当前链接加一个属性:交易笔数44objAttributeClassColl = objChart.AttributeClasses45objAttributeClass = objAttributeClassColl.Find(u"交易笔数")46# 如果不存在才创建47if objAttributeClass is None:48 objAttributeClass = objChart.CreateAttributeClass(u"交易笔数