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

server/2024/9/23 2:35:19/

目录

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

场景复现

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

环境说明

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

在这里插入图片描述

实现原理

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

word_14">计算当前文件夹下所有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.ppmy.cn/server/93693.html

相关文章

详细分析nohup后台运行命令

目录 1. 基本知识2. Demo 1. 基本知识 Unix/Linux 命令&#xff0c;用于在后台运行程序&#xff0c;并确保它在用户退出或注销后继续运行 nohup 的主要作用是使程序在终端会话结束后继续运行&#xff0c;这对需要长时间执行的任务特别有用 基本的用法如下&#xff1a; nohu…

使用Prometheus监控Java应用性能

使用Prometheus监控Java应用性能 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将探讨如何使用Prometheus监控Java应用的性能。 一、引入Prometheus客户端库 在Java应用中使用…

Docker安装rocketMq

一、概述 RocketMQ是阿里巴巴开源的一款分布式消息中间件&#xff0c;用于处理大规模消息传输与存储。它使用Java语言编写&#xff0c;是阿里巴巴内部历经双十一等高并发场景考验的成熟产品。2016年开源后&#xff0c;RocketMQ捐赠给Apache&#xff0c;并成为了Apache的一个顶…

<数据集>棉花识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;13765张 标注数量(xml文件个数)&#xff1a;13765 标注数量(txt文件个数)&#xff1a;13765 标注类别数&#xff1a;4 标注类别名称&#xff1a;[Partially opened, Fully opened boll, Defected boll, Flower] 序…

堆的实现-向上调整算法-向下调整算法-堆排序-TopK问题 C语言

堆的实现与堆排序及TopK问题的C语言代码 下面是详细的堆实现&#xff0c;包括向上调整、向下调整算法&#xff0c;以及堆排序和解决TopK问题的完整C语言示例代码。 1. 堆的实现 首先&#xff0c;定义堆的数据结构&#xff1a; #include <stdio.h> #include <stdli…

IIS解析漏洞~ IIS7.漏洞分析

IIS解析漏洞 文件解析漏洞是由于中间件错误的将特殊格式的文件解析成可执行网页文件(脚本)&#xff0c;配合文件上传漏洞进行GetShell的漏洞&#xff01; 1.2&#xff1a;IIS7.X 在IIS7.0和IIS7.5版本下也存在解析漏洞&#xff0c;在默认Fast-CGI开启状况下&#xff0c;在一个文…

《看漫画学Python》全彩PDF教程,495页深度解析,零基础也能轻松上手!

前言 说起编程语言&#xff0c;Python 也许不是使用最广的&#xff0c;但一定是现在被谈论最多的。随着近年大数据、人工智能的兴起&#xff0c;Python 越来越多的出现在人们的视野中。 在各家公司里&#xff0c;Python 还常被用来做快速原型开发&#xff0c;以便更快验证产品…

python-自动化办公-Excel-Openpyxl

Python处理Excel数据之Openpyxl 1.1 Openpyxl库的安装使用 openpyxl模块是一个读写Excel 2010文档的 Python 库&#xff0c;如果要处理更早格式的Excel文档&#xff0c;需要用到额外的库&#xff0c;openpyxl是一个比较综合的工具&#xff0c;能够同时读取和修改Excel文档。其…