Office文档处理语言(VBA/PyWin32/Jacob)对比

概述:

        首先给出的结论是:VBA > PyWin32 > Jacob,下面将给出详细的对比情况


详细对比数据:

1. VBA

        VBA,微软的亲儿子,和Office是契合度最高的,也是和Windows系统契合度最高的,如果你是VBA高手,那么恭喜你,几乎所有的Office文档问题,你都可以解决,它具有以下的优缺点;

优点
  • 只要代码正确,调用Office的成功率就是100%,所以根本不用担心
  • 速度快,执行效率高
  • 书写简单,可以直接找ChatGpt帮忙代写
缺点
  • 运行机制不完美或者不完善,如果数据量特别大的时候,很容易卡死或者宕机。比如很大的一个word文档,要获取到每一个字符的Range信息(index,行号,页号等),就很容易卡死
  • 数据结构简单,只有数组等简单的基本结构,编程不方便
总结

        综上,VBA以其良好的系统亲和力,0失误率,是其成为处理office的第一选择;但是因其内存管理不完美,如果进程内存占用过高,处理不妥当的话就会出现卡死的情况;

        所以在文档处理时,简单的业务,可以直接使用高级语言或者VBA,但是复杂的业务,通常会作为其他高级语言的临时脚本使用

  • 关于文档的操作,尽量交给VBA
  • 脚本并不会容纳太多数据,处理完一部分文档的业务后,就会返回
  • 脚本可重复调用

        关于java等高级语言对VBA脚本(宏)的调用,前文已经讲过,或者直接问chatGpt

2. PyWin32

        pyWin32因微软向其公开了API,所以不需要任何中间件,直接调用即可,且网上有完善的教程学习,比如B站,有以下优缺点:

优点
  • 不需要中间件,只要有Python环境,导入依赖包就可以使用
  • 代码的写法无线近似于VBA
  • 有良好的内存管理机制
缺点
  • 速度一般,尤其是在做大数据量的遍历的时候,会变得很慢。解决办法是,分段的调用VBA脚本,进行处理
  • 调用API时,有时候会出现COM组件异常的情况,当然也有解决办法,就是让
    Application的Visable属性,设置为True,可见即可
总结
  •  PyWin32因其调用COM得API时,会出现异常,虽然有解决办法,但是终究不是COM得API得调用方
  • 但是因其写法近似于VBA,且环境不依赖中间件,所以是良好的VBA脚本得调用方
  • 所以建议得是,PyWin32来调用VBA脚本,来完成文档处理,这是最佳得解决方案

3. jaocb 

        jacob是java提供的COM组件的调用包,依赖与jacob.dll文件运行,在java环境的基础上,还需要配置jacob的运行环境,且写法相较于PyWin32较为笨拙,冗余,具有下面的优缺点:

优点
  • 优点可能就是java可以打包成jar包发布,以及良好的内存管理机制
缺点
  • 强依赖于Dispatch这个操作对象,导致写法笨拙,代码冗余
  • 在java环境的基础上还需要正确配置jacob.dll这个文件
  • Pywin调用不通的COM-API,jacob仍然调用不通,jacob调用不通的COM-API,pywin32也调用不通,解决办法也一样,就是让Application的Visable属性,设置为True,可见即可
  • 遍历属性时,强依赖于For循环,同时只能用Item(Num)这个属性来取,有时候会出现错误,不像Pywin32那样可以类似于VBA的遍历方法来进行属性遍历
总结
  • Jacob并不是一个好的COM-API调用方,因为有些情况会出现错误,虽然可以像PyWin32那样让Application的Visable属性,设置为True,但是还是不建议
  • jacob又不是一个好的VBA脚本调用方,因为强依赖于for循环和Item(Num),使得有时候进行遍历处理时,会出错,比如在使用   doc.ConvertNumbersToText,这个函数进行序号清除时,以及遍历删除时

所以,如果实在一定要用jacob进行文档处理时,最好做到以下几点:

  • 最好将ActiveXComponent的Visible属性设置为True,哪怕是以最小化的形式打开
  • 最好是将COM-API调用交给VBA来做,将jacob作为VBA脚本的调用方
  • 妥善处理属性遍历时的FOR循环,用ITEM(num)来进行属性的更改,删除,格式话时,如果不能交给VBA脚本来做,就多测试


总结:

  • 就文本处理而言,VBA是最好的COM-API的调用方,但是复杂的业务只能作为脚本使用,因为内存处理较差
  • PyWin32是最好的VBA脚本调用方,因为遍历属性时,不需要Item(Num)来获取属性,但是记得要设置Application的Visable为true;同时PyWin32也不是最好的COM-API的使用方
  • 如果一定要使用Jacob,尽量将COM-API的调用方交给VBA,jacob仅仅作为脚本的调用方,并记得要设置Application的Visable为true;同时如果要用Item(Num)来获取属性,来格式化,删除,转换等消除动作时,如果不能交给VBA,记得多测试
  • Pywin32和Jacob在COM-API的调用出错情况是相同的,解决办法也是一样的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/696577.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】结构型设计模式之 适配器模式

介绍 适配器模式(Adapter Pattern) 是一种结构型设计模式,它的核心目的是使接口不兼容的类能够协同工作。适配器模式通过将一个类的接口转换为客户希望的另一个接口,来解决两个已有接口之间不匹配的问题,从而增加它们…

【递归+二叉树思想+搜索】 Alice and the Cake题解

Alice and the Cake题解 AC记录:记录-洛谷 题面翻译(大概就是题目大意) 执行恰好 n − 1 n-1 n−1 次操作,每次操作可以选择当前所有蛋糕中满足其重量 w ⩾ 2 w\geqslant 2 w⩾2 的一块,然后将其分为质量分别为 …

powerdesigner各种字体设置

1、设置左侧菜单: 步骤如下: tools —> general options —> fonts —> defalut UI font ,选择字体样式及大小即可,同下图。 2、设置Table的字体大小 Tools------>Display Prefrences------>Table------->Format---------…

【EDA】SSTA中最慢路径与最快路径统计计算

假设(X1,X2)为二元高斯随机向量,均值(μ1,μ2),标准差(σ1,σ2),相关系数ρ 定义:X=max(X1,X2),Y=min(X1,X2) SSTA中计算setup/hold的worst delay时即求X、Y,路径N对应维度为N维。 X的概率密度函数PDF为f(x)=f1(-x)+f2(-x),f1和f2为: 其中小Φ和大Φ…

Android 蓝牙profile的配置

在做BQB认证之前,我们需要确认那些profile之前,我们需要查看profile的配置情况 Android13版本前蓝牙profile的配置 MTK的项目代码如下 vendor\mediatek\proprietary\packages\modules\Bluetooth\android\app\res\values\config.xml 高通的项目代码如…

【CS.OS】堆管理算法:不同的堆分配和管理算法

1000.5.CS.OS.1.3-基础-内存管理-堆管理算法-Created: 2024-06-09.Sunday10:41 文章目录 1 内存分配算法概述1.1 首次适应(First-Fit)1.2 最佳适应(Best-Fit) 2 伙伴系统(Buddy System) 3 总结References …

Django ListView 列表视图类

ListView是Django的通用视图之一,它用于显示一个对象列表。这个视图将所有的对象作为一个上下文变量传递给模板。 1,创建应用 python manage.py startapp app3 2,注册应用 Test/Test/settings.py Test/Test/urls.py 3,添加模型 …

IDEA去除代码和XML中的波浪线(黄色警告线)

通常情况下,IDE自带的侦测功能会帮我们提示一些错误、警告等。但这对于强迫症患者来说并不友好。以下是去除IDE代码和XML文件中的波浪线(黄色警告线)、拯救强迫症患者的有效方案 1、去除XML中的波浪线 2、去除代码中的波浪线 关爱强迫症患者…

Go模板页面浏览器显示HTML源码问题

<!--* Title: This is a file for ……* Author: JackieZheng* Date: 2024-06-09 17:00:01* LastEditTime: 2024-06-09 17:01:12* LastEditors: Please set LastEditors* Description:* FilePath: \\GoCode\\templates\\index.html --> <!DOCTYPE html> <html …

第一次视频学习

1、了解AI答题应用 1.1 业务流程架构图 1.2 自定义上传题目流程 1.3 时序图 这个比较困难&#xff0c;第一次了解到流式&#xff0c;便于前端与用户交互

2024年IntelliJ系列最新专业版安装码教程!(持续更新)

本教程适用于 J B 全系列产品&#xff0c;包括 Pycharm、IDEA、WebStorm、Phpstorm、Datagrip、RubyMine、CLion、AppCode 等。 2018-2024 均适用&#xff01; &#xff08;直接复制&#xff0c;拿走不谢&#xff09; 9H1390TRAK-eyJsaWNlbnNlSWQiOiI5SDEzOTBUUkFLIiwibGljZW…

Kubernetes入门-大简介

目录 何为微服务 何为云原生 何为编排器 “Kubernetes”这个名字来自希腊语&#xff0c;意思是“舵手”舵手是一个航海/航行术语&#xff0c;指掌舵的人从本质上说&#xff0c;Kubernetes是云原生微服务(cloud-native microservice)应用的编排器(orchestrator) 何为微服务 …

力扣刷题--728. 自除数【简单】

题目描述 自除数 是指可以被它包含的每一位数整除的数。 例如&#xff0c;128 是一个 自除数 &#xff0c;因为 128 % 1 0&#xff0c;128 % 2 0&#xff0c;128 % 8 0。 自除数 不允许包含 0 。 给定两个整数 left 和 right &#xff0c;返回一个列表&#xff0c;列表的…

安利一款非常不错浏览器文本翻译插件(效果很不错,值得一试)

官网地址&#xff1a;https://immersivetranslate.com/ “沉浸式翻译”这个词&#xff0c;由我们发明创造。如今&#xff0c;它已然成为“双语对照翻译”的代名词。自2023年上线以来&#xff0c;这款备受赞誉的 AI 双语对照网页翻译扩展&#xff0c;已帮助超过 100 万用户跨越语…

USB (3)

USB 流控 USB是polled bus,这和PCIe不一样,所有的transfer都是由host发起的。 对于IN(从device到host)。 如果device没有数据,那么只能回复NAK。 Token received corrupted

2024年高考作文考人工智能,人工智能写作文能否得高分

前言 众所周知&#xff0c;今年全国一卷考的是人工智能&#xff0c;那么&#xff0c;我们来测试一下&#xff0c;国内几家厉害的人工智能他们的作答情况&#xff0c;以及能取得多少高分呢。由于篇幅有限&#xff0c;我这里只测试一个高考真题&#xff0c;我们这里用百度的文心…

MySQL事务,视图,用户管理学习笔记【事务概念 | 事务隔离级别 | 设置级别 | 视图 | 用户管理】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;MySQL之旅_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;事务初…

109.网络游戏逆向分析与漏洞攻防-装备系统数据分析-商店与捨取窗口数据的处理

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…

使用 Scapy 库编写 TCP ACK 洪水攻击脚本

一、介绍 TCP ACK洪水攻击是一种分布式拒绝服务攻击&#xff08;DDoS&#xff09;&#xff0c;攻击者通过向目标服务器发送大量伪造的TCP ACK&#xff08;确认&#xff09;数据包&#xff0c;使目标服务器不堪重负&#xff0c;无法正常处理合法请求。虽然ACK包通常用于确认接收…

【上海大学计算机组成原理实验报告】七、程序转移机制

一、实验目的 学习实现程序转移的硬件机制。 掌握堆栈寄存器的使用。 二、实验原理 根据实验指导书的相关内容&#xff0c;实验箱系统的程序转移硬件机制在于&#xff0c;当LDPC有效时&#xff0c;如果此时DUBS上的值就是转移的目标地址&#xff0c;则此目标地址被打入PC&am…