是否可在不打开OSISoft PI ProcessBook的前提下导出状态报告为CSV
编辑 [已关闭]
我需要基于多个文件生成多份状态报告,为此计划开发脚本,在不打开OSISoft PI ProcessBook程序的前提下将状态报告导出为CSV格式。请问该方案是否可行?还是我需要编写「模拟点击」脚本,通过点击「保存到文件」按钮来生成CSV?
当前运行环境为搭载.pi格式文件的OSISoft PI ProcessBook
(附截图:状态报告可保存为CSV文件)
方案可行性结论
完全不需要使用模拟点击脚本,不用打开PI ProcessBook可视化界面就能批量导出状态报告为CSV的方案是完全可行的,推荐以下两种稳定实现路径,优先级从高到低:
路径1:调用PI ProcessBook原生COM接口(推荐,适配性最强)
ProcessBook本身自带可编程的COM组件,支持后台静默加载.pi文件,不需要弹出主界面就能操作文件内所有元素,你可以用VBScript、C#或者Python(搭配pywin32库)实现,核心逻辑如下:
- 初始化ProcessBook应用对象时设置
Visible = False,全程后台运行无界面 - 加载目标.pi文件后遍历定位到状态报告对象,直接调用内置的
SaveAs方法指定CSV格式输出即可
Python示例核心代码:
import win32com.client # 初始化ProcessBook应用,设为后台运行 pb_app = win32com.client.Dispatch("PIProcessBook.Application") pb_app.Visible = False # 遍历所有待处理的pi文件 pi_file_list = [r"C:\path\to\report1.pi", r"C:\path\to\report2.pi"] for idx, pi_path in enumerate(pi_file_list): pb_doc = pb_app.Open(pi_path) # 定位文件内的状态报告元素,不同版本状态报告的Type常量可能略有差异,可自行打印验证 for sym in pb_doc.Symbols: if sym.Name == "目标状态报告名" or sym.Type == 32: # 导出为CSV,第二个参数1对应CSV格式 sym.SaveAs(r"C:\output\path\report_{}.csv".format(idx), 1) pb_doc.Close() # 退出进程,避免后台残留 pb_app.Quit()
路径2:直接拉取PI数据生成CSV(无需依赖ProcessBook程序)
如果你的运行环境不能安装ProcessBook,也可以直接解析.pi文件里的状态报告配置(包含取数点位、时间范围、计算规则等),调用PI AF SDK直接从PI Server拉取对应数据,自行拼接生成CSV文件,这种方案连ProcessBook进程都不需要启动,性能更高。
注意事项
- 两种方案的稳定性远高于模拟点击,不会受界面弹窗、分辨率变化、程序卡顿等因素影响,天生支持批量处理
- 用COM接口的方案注意执行完后主动调用
Quit方法,避免ProcessBook后台残留进程占用.pi文件
内容的提问来源于stack exchange,提问作者NayNay
相关产品推荐
相关产品推荐

