计算word文件打印页数 VBA实现

目录

  • 场景复现
    • 环境说明
    • 实现原理
    • 计算当前文件夹下所有word文件页数总和
    • 利用递归计算当前文件夹所有work文件页面数量
      • 几个BUG
      • 计算结果
      • 软件报价
        • 后话

场景复现

最近需要帮我弟打印高考资料,搜集完资料去网上打印,商家发出了这个计算页数的界面。我就好奇怎么实现的,计算的准不准,所以就动手自己用VBA代码实现了一下
在这里插入图片描述

环境说明

因为需要获取word文件的属性,所以需要引用work库。
在这里插入图片描述

在这里插入图片描述

实现原理

获取的是左下角页面的数量,然后把各个文件加起来。
在这里插入图片描述

计算当前文件夹下所有word文件页数总和

先实现计算当前文件夹下所有文件的,不会计算子文件夹。计算原理也很简单,直接要获取
在这里插入图片描述

Sub CountWordPagesInFolder()Dim folderPath As StringDim totalPages As LongDim doc As ObjectDim fileSystem As ObjectDim folder As ObjectDim file As ObjecttotalPages = 0' 设置文件夹路径folderPath = "C:\Users\Administrator\Desktop\读取页数"' 创建FileSystemObjectSet fileSystem = CreateObject("Scripting.FileSystemObject")Set folder = fileSystem.GetFolder(folderPath)' 遍历文件夹中的每个文件For Each file In folder.FilesDebug.Print file.NameIf UCase(fileSystem.GetExtensionName(file.Name)) = "DOCX" Or _UCase(fileSystem.GetExtensionName(file.Name)) = "DOC" Then' 打开Word文件'Set doc = wordApp.Documents.Open(file.Path)' 创建Word应用程序实例Dim wordApp As ObjectSet wordApp = CreateObject("Word.Application")wordApp.Visible = FalseSet doc = wordApp.Documents.Open(file.Path, ReadOnly:=True)' 更新文档以确保准确计算页数'doc.Repaginate'Debug.Print file.Path' 计算页数'totalPages = totalPages + doc.ComputeStatistics(1) ' wdStatisticPages = 1totalPages = totalPages + doc.ComputeStatistics(wdStatisticPages) ' wdStatisticPages = 1' 关闭文档On Error Resume Nextdoc.CloseIf Err.Number <> 0 Then'Handle the error if any...Debug.Print "不正常正常关闭"End IfOn Error GoTo 0End IfNext file' 关闭Word应用程序wordApp.Quit' 输出总页数MsgBox "Total pages in Word files: " & totalPages
End Sub

利用递归计算当前文件夹所有work文件页面数量

folderPath 改成自己的文件夹就行了。

Sub CountWordPagesInFolder()Dim folderPath As StringDim totalPages As LongDim fileSystem As ObjectDim folder As ObjectDim wordApp As ObjecttotalPages = 0' 设置文件夹路径folderPath = "E:\work\高考真题\打印参考答案"' 创建FileSystemObjectSet fileSystem = CreateObject("Scripting.FileSystemObject")Set folder = fileSystem.GetFolder(folderPath)' 创建Word应用程序实例Set wordApp = CreateObject("Word.Application")wordApp.Visible = False' 遍历文件夹及其子文件夹中的所有文件totalPages = TraverseFolders(folder, fileSystem, wordApp)' 关闭Word应用程序wordApp.Quit' 释放对象Set wordApp = NothingSet fileSystem = NothingSet folder = Nothing' 输出总页数MsgBox "Total pages in Word files: " & totalPages
End SubFunction TraverseFolders(folder As Object, fileSystem As Object, wordApp As Object) As LongDim totalPages As LongDim file As ObjectDim subFolder As ObjectDim doc As ObjecttotalPages = 0' 遍历文件夹中的每个文件For Each file In folder.FilesDebug.Print fileIf UCase(fileSystem.GetExtensionName(file.Name)) = "DOCX" Or _UCase(fileSystem.GetExtensionName(file.Name)) = "DOC" Then' 打开Word文件On Error Resume NextSet doc = wordApp.Documents.Open(file.Path, ReadOnly:=True)If Err.Number <> 0 ThenDebug.Print "无法打开文件: " & file.Path & " 错误信息: " & Err.DescriptionErr.ClearOn Error GoTo 0GoTo NextFileEnd IfOn Error GoTo 0' 计算页数totalPages = totalPages + doc.ComputeStatistics(wdStatisticPages)' 关闭文档'doc.Close SaveChanges:=FalseEnd If
NextFile:Next file' 遍历子文件夹For Each subFolder In folder.SubFolderstotalPages = totalPages + TraverseFolders(subFolder, fileSystem, wordApp)Next subFolderTraverseFolders = totalPages
End Function

几个BUG

'doc.Close SaveChanges:=False

doc对象正常来说用完就应关闭的,但是关闭后打开第二个文件机会报错
Set doc = wordApp.Documents.Open(file.Path, ReadOnly:=True)
在这里插入图片描述
查询官网和GPT 都没给出很好的解释,然后我尝试关闭后每次重新创建一个wordApp对象读取文件信息,就不会报错。 估计是关闭文件会释放这个对象资源或者其他,肯定会影响。
Set wordApp = CreateObject(“Word.Application”)
wordApp.Visible = False

Sub CountWordPagesInFolder()Dim folderPath As StringDim totalPages As LongDim doc As ObjectDim fileSystem As ObjectDim folder As ObjectDim file As ObjecttotalPages = 0' 设置文件夹路径folderPath = "C:\Users\Administrator\Desktop\读取页数"' 创建FileSystemObjectSet fileSystem = CreateObject("Scripting.FileSystemObject")Set folder = fileSystem.GetFolder(folderPath)' 遍历文件夹中的每个文件For Each file In folder.FilesDebug.Print file.NameIf UCase(fileSystem.GetExtensionName(file.Name)) = "DOCX" Or _UCase(fileSystem.GetExtensionName(file.Name)) = "DOC" Then' 打开Word文件'Set doc = wordApp.Documents.Open(file.Path)' 创建Word应用程序实例Dim wordApp As ObjectSet wordApp = CreateObject("Word.Application")wordApp.Visible = FalseSet doc = wordApp.Documents.Open(file.Path, ReadOnly:=True)' 更新文档以确保准确计算页数'doc.Repaginate'Debug.Print file.Path' 计算页数'totalPages = totalPages + doc.ComputeStatistics(1) ' wdStatisticPages = 1totalPages = totalPages + doc.ComputeStatistics(wdStatisticPages) ' wdStatisticPages = 1' 关闭文档On Error Resume Nextdoc.CloseIf Err.Number <> 0 Then'Handle the error if any...Debug.Print "不正常正常关闭"End IfOn Error GoTo 0End IfNext file' 关闭Word应用程序wordApp.Quit' 输出总页数MsgBox "Total pages in Word files: " & totalPages
End Sub

知道原因的大佬可以评论一下

计算结果

在这里插入图片描述
我计算了5025页,商家的软件只计算了 4699页!看来还是挺良心的。
顺藤摸瓜,我问了商家他们说是老板买软件计算的,这个是打印软件的官网https://www.nprint.cn/,这让我感觉到需求无处不在啊!

软件报价

在这里插入图片描述

后话

至于计算为什么不一样,我也联系和软件官方账号询问他们的计算算法是否有差异,目前还没回复。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何把视频语音转文字?交给这4款工具就完事

这两天巴黎奥运会的盛大开幕&#xff0c;世界各地的记者们纷纷涌入这个体育盛事的现场&#xff0c;带着他们的镜头和麦克风&#xff0c;捕捉每一个激动人心的瞬间。 然而&#xff0c;随着采访的深入&#xff0c;如何快速准确地将这些珍贵的视频内容转化为文字记录&#xff0c;…

C语言 | Leetcode C语言题解之第309题买卖股票的最佳时机含冷冻期

题目&#xff1a; 题解&#xff1a; int maxProfit(int* prices, int pricesSize) {if (pricesSize 0) {return 0;}int f0 -prices[0];int f1 0;int f2 0;for (int i 1; i < pricesSize; i) {int newf0 fmax(f0, f2 - prices[i]);int newf1 f0 prices[i];int newf2…

Linux 和 Unix 的关系

Linux 和 Unix 的关系 2.2.1unix 是怎么来的 2.2.2Linux 是怎么来的 GNU计划的另一个目的是构建自由的软件文化&#xff0c;以支持以无条件自由软件和开放源码程序这种文化理念为核心的一整套系统&#xff0c;来推动软件在世界范围内的普及及发展。其中包括支持点&#xff08;推…

海思Hi35XX系列(一)环境搭建与挂载

小白一个&#xff0c;新的开发板刚到手有点懵&#xff0c;之前没弄过没有经验&#xff0c;简单记录一下吧 一般买开发板都会给带一个已经配置好的虚拟机文件&#xff0c;直接使用就可以 一、下载安装虚拟机与镜像文件 VMware-workstation16.1.0 我的镜像文件是官方文档资料…

路径规划——广度优先搜索与深度优先搜索

路径规划——广度优先搜索与深度优先搜索 https://www.hello-algo.com/chapter_graph/graph_traversal/ 1.广度优先搜索 Breath-First-Search 在图论中也称为广度优先遍历&#xff0c;类似于树的层序遍历。 算法原理 从起始节点出发&#xff0c;首先访问它的邻近节点&…

Typora2024最新版破解方法(亲测可用)

此方法非常简单&#xff0c;无需安装dll补丁&#xff0c;无需修改注册表&#xff0c;无需使用老版本。仅需修改部分文件内容即可 方法步骤 步骤一 下载并安装Typora 安装Typora 打开官网 下载并安装最新版即可 点击访问Typora官网 https://typoraio.cn/ 步骤二 修改文件 …

C#编写多导联扫描式的波形图Demo

本代码调用ZedGraph绘图框架&#xff0c;自己先安装好ZedGraph环境&#xff0c;然后拖一个zedGraphControl控件就行了&#xff0c;直接黏贴下面代码 基本代码显示 using System; using System.Windows.Forms; using ZedGraph; using System.Timers;namespace ECGPlot {public…

Bugku-ctf-web

Simple_SSTI_1 1.启动场景&#xff0c;http://114.67.175.224:12592 2.页面提示传入参数flag&#xff0c;F12查看源码得到第二个提示 3.SECRET_KEY(秘钥)是Flask中重要的一个配置值&#xff0c;在这题&#xff0c;构造语句查看它&#xff0c;得到flag&#xff0c;也可以构造?…

python+selenium+unittest自动化测试框架

前言 关于自动化测试的介绍&#xff0c;网上已有很多资料&#xff0c;这里不再赘述&#xff0c;UI自动化测试是自动化测试的一种&#xff0c;也是测试金字塔最上面的一层&#xff0c;selenium是应用于web的自动化测试工具&#xff0c;支持多平台、多浏览器、多语言来实现自动化…

AGV系统设计解析:布局-车体-对接-数量计算-路径规划

AGV AGV是实现柔性制造、装配及自动化物流的关键设备之一&#xff0c;近几年来&#xff0c;随着各国智能制造政策的不断实施&#xff0c;促进了AGV产业的快速发展。 目前&#xff0c;AGV系统广泛应用于各个行业之中&#xff0c;比如物流行业、新能源行业、汽车行业、制药行业等…

Python爬虫入门02:Fiddler下载使用教程

文章目录 手机抓包全攻略&#xff1a;Fiddler 工具深度解析引言Fiddler 工具简介为什么选择 Fiddler&#xff1f; 安装与配置 Fiddler步骤一&#xff1a;下载与安装步骤二&#xff1a;配置浏览器代理步骤三&#xff1a;安装 HTTPS 证书 配置手机以使用 Fiddler步骤一&#xff1…

堆的创建和说明

文章目录 目录 文章目录 前言 小堆&#xff1a; 大堆&#xff1a; 二、使用步骤 1.创建二叉树 2.修改为堆 3.向上调整 结果实现 总结 前言 我们已经知道了二叉树的样子&#xff0c;但是一般的二叉树是没有什么意义的&#xff0c;所以我们会使用一些特殊的二叉树来进行实现&a…

码农职场:一本专为IT行业求职者量身定制的指南

目录 写在前面 推荐图书 推荐理由 写在后面 写在前面 本期博主给大家推荐一本专为IT行业求职者量身定制的指南&#xff1a;《码农职场》。 推荐图书 https://item.jd.com/14716160.html 内容简介 这是一本专为广大IT 行业求职者量身定制的指南&#xff0c;提供了从职前…

Netty 必知必会(四)—— Channel-Pipeline 责任链

一、责任链模式 适用场景: 对于一个请求来说&#xff0c;如果每个对象都有机会处理它&#xff0c;而且不明确到底是哪个对象会处理请求时&#xff0c;我们可以考虑使用责任链模式实现它&#xff0c;让请求从链的头部往后移动&#xff0c;直到链上的一个节点成功处理了它为止 …

python爬虫初识

一、什么互联网 互联网&#xff08;Internet&#xff09;是全球范围内最大的计算机网络&#xff0c;它将数以百万计的私人、公共、学术、商业和政府网络通过一系列标准通信协议&#xff08;如TCP/IP&#xff09;连接起来形成的一个庞大的国际网络。 互联网的起源可以追溯到196…

Java 后端已经过时的技术,也是我逝去的青春

最近这段时间收到了一些读者的私信&#xff0c;问我某个技术要不要学&#xff0c;还有一些的同学竟然对 Java 图形化很感兴趣&#xff0c;还想找这方面的工作。 我接触 Java 已近 10多年了&#xff0c;见证了许多 Java 技术变迁&#xff0c;包括&#xff1a; JavaEE 框架&…

常见的应急救援设备有哪些_鼎跃安全

在我们的生活中&#xff0c;应急事件的发生常常是突如其来的&#xff0c;它们对人民的生命财产安全构成重大威胁&#xff0c;同时也对社会稳定提出严峻挑战。在这样的紧急情况下&#xff0c;迅速开展有效的救援工作显得尤为重要。而在整个救援过程中&#xff0c;应急设备的使用…

1-4章节复习总结

1-4章节总结 章节重点回顾-第一章-中央处理单元练习题 章节重点回顾-第一章-进制章节重点回顾-第一章-校验码奇偶校验码CRC循环冗余校验码海明码练习题 多草节重点回顾-第一草-计算机体系结构分类章节重点回顾-第一章-计算机指令练习题 章节重点回顾-第一章-指令流水线练习题 章…

canvas绘制表格

canvas绘制表格 最近在为公司产品做技术预研&#xff0c;经理让用canvas做一个表格&#xff0c;于是就有了这篇博客。 我们的数据是后端通过MQTT推送过来的 我在代码中也直接使用了 具体MQTT的实现代码&#xff0c;可见博客 在vue使用MQTT 在这里为了方便实用我直接封装成组件…

POI 快速入门 Excel导入导出

Excel导入导出 1 什么是POI POI简介&#xff08;Apache POI&#xff09;&#xff0c;Apache POI是Apache软件基金会的开放源码函式库&#xff0c;POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 Apache POI官网http://poi.apache.org/ HSSF &#xff0d; 提…