word文档中有页面数(不打开Word文档获取总页数)
word文档中有页面数(不打开Word文档获取总页数)
2024-11-21 08:24:39  作者:是是是我错  网址:https://m.xinb2b.cn/sport/bwz446413.html


打开word文档获取总页数的方法很多:

Selection.Information(wdNumberOfPagesInDocument)ActiveDocument.ComputeStatistics(wdStatisticPages)ActiveDocument.ActiveWindow.ActivePane.Pages.CountActiveDocument.BuiltinDocumentProperties(wdPropertyPages)

当然以上方法里,第2和第4两种方法更方便封装

以上方法缺点是需要打开文件才能获取页数

优点是获取到的页数是准确的

以下讲一下解析2007以上文件的方法来获取页数,需要用到一个typelib(oleexp.tlb)

因为发链接限制比较多,就不发链接了

引用tlb之后,测试一下代码:

Private Declare Function SHParseDisplayName Lib "shell32" (ByVal pszName As Long, ByVal IBindCtx As Long, ByRef ppidl As Long, sfgaoIn As Long, sfgaoOut As Long) As Long

Private Declare Function ILFree Lib "shell32" (ByVal pidlFree As Long) As Long

Private Declare Function lstrlenA Lib "kernel32" (ByVal lpString As Long) As Long

Private Declare Function SysAllocStringByteLen Lib "oleaut32.dll" (Optional ByVal pszStrPtr As Long, Optional ByVal Length As Long) As String

Private Const CLSID_Zip = "{E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}"

Private Const IID_IShellExtInit = "{000214E8-0000-0000-C000-000000000046}"

Function GetPageCount(ByVal strFilePath As String) As Long 'xml文档docx

Dim CLSID As UUID

Dim iid As UUID

Dim IExt As oleexp.IShellExtInit

Dim IPF As oleexp.IPersistFolder2

Dim iStg As oleexp.IStorage

Dim iStat As oleexp.STATSTG

Dim docProps As oleexp.IStorage

Dim appxml As oleexp.IStream

Dim pidl As Long

Dim cb As Long

Dim buf() As Byte

Dim strTemp As String

Dim arr() As String

CLSIDFromString CLSID_Zip, CLSID

CLSIDFromString IID_IShellExtInit, iid

If CoCreateInstance(CLSID, Nothing, 1&, iid, IExt) <> 0 Then GoTo lExit

Set IPF = IExt

SHParseDisplayName StrPtr(strFilePath), 0, pidl, 0, 0

IPF.Initialize pidl

ILFree pidl

Set iStg = IPF

Set docProps = iStg.OpenStorage("docProps", 0, STGM_READ, 0, 0)

Set appxml = docProps.OpenStream("app.xml", 0, STGM_READ, 0)

appxml.stat iStat, STATFLAG_NOOPEN

ReDim buf(10000 * iStat.cbSize - 1)

cb = appxml.Read(buf(0), UBound(buf) 1)

If cb Then

strTemp = SysAllocStringByteLen(VarPtr(buf(0)), lstrlenA(VarPtr(buf(0))))

End If

mySplit strTemp, arr, "</Pages>" '内置Split的效率不能忍

mySplit arr(0), arr, "<Pages>"

GetPageCount = arr(1)

lExit:

End Function

Public Sub mySplit(ByVal Expression$, ResultSplit$(), Optional Delimiter$ = " ")

' By Chris Lucas, cdl1051@earthlink.net, 20011208

Dim c&, SLen&, DelLen&, tmp&, Results&()

SLen = LenB(Expression) \ 2

DelLen = LenB(Delimiter) \ 2

If SLen = 0 Or DelLen = 0 Then ' Bail if we were passed an empty delimiter or an empty expression

ReDim Preserve ResultSplit(0 To 0)

ResultSplit(0) = Expression

Exit Sub

End If

ReDim Preserve Results(0 To SLen) ' Count delimiters and remember their positions

tmp = InStr(Expression, Delimiter)

Do While tmp

Results(c) = tmp

c = c 1

tmp = InStr(Results(c - 1) 1, Expression, Delimiter)

Loop

ReDim Preserve ResultSplit(0 To c) ' Size our return array

If c = 0 Then ' Populate the array

ResultSplit(0) = Expression ' lazy man's call

Else

ResultSplit(0) = Left$(Expression, Results(0) - 1) ' typical call

For c = 0 To c - 2

ResultSplit(c 1) = Mid$(Expression, Results(c) DelLen, Results(c 1) - Results(c) - DelLen)

Next c

ResultSplit(c 1) = Right$(Expression, SLen - Results(c) - DelLen 1)

End If

End Sub

代码写的比较粗糙,直接从内存中获取app.xml文件,并直接读取里面的<Pages>页数</Pages>字段

MySplit只是个提高自带Split函数效率的方法

这样读取的方法有一个确定,当文档的页数跟app.xml文件里的页数不对等时,这里获取到的当然就是错的。

为什么会有文档页数和app.xml里面不相等的情况了,因为不是文件有足够的页数,文件里的所有流都会实时更新

  • 哪里产的冰糖桔好吃(五大冰糖桔产地)
  • 2024-11-22五大冰糖桔产地冰糖橙是一种非常好吃的橙子品种,味道清甜几乎一点酸味都没有,据了解冰糖橙又叫做冰糖柑,原产地在我国的湖南洪江市,当然目前引种栽培的地区也有不少,下面一起了解下我国的冰糖橙主产地有哪些?一、湖南麻阳享有。
  • 怎样端正学生的态度,开学后如何端正学习态度
  • 2024-11-22怎样端正学生的态度,开学后如何端正学习态度快乐学拼音,轻松学语文很多家长都问,老师,开学前我们给孩子多鼓励,也讲道理了,孩子学习的劲头十足而在我们老师上了两三天课后发现,学生们哪里来的新学期新面貌,上课开小差、注意力不集中、小动作多、爱打小报。
  • 产后要经历的七种疼痛(产后这个部位最容易疼)
  • 2024-11-22产后这个部位最容易疼妈妈怀宝宝是一件很不容易的事情,其实生宝宝更是不易啊,就像是在鬼门关走一遭这句话说的一点儿都不夸张,妈妈们生完宝宝之后身体出现的很多问题都是因为在生产的时候不注意而留下来的后遗症并且大多数宝妈都有反应。
  • 香港旅游人数统计(香港旅游市场繁荣)
  • 2024-11-22香港旅游市场繁荣前几天,有一条消息引起了我的注意:“今年香港旅游高峰,外国人比往年多,连内地人都坐飞机来香港,场面十分热闹繁华”这是怎么回事?现在我就来跟大家说说这两天的香港外国人人数增长快自从内地开放赴港旅游以来,。
  • 蔡甸6号线延长线(武汉6条地铁线路最新进展来了)
  • 2024-11-22武汉6条地铁线路最新进展来了3月21日中午12时起武汉地铁对目前6条在建线路共28座车站的拟定站名进行公示此次进行站名公示的6条地铁线路分别是:轨道交通前川线工程轨道交通16号线二期工程轨道交通5号线二期工程轨道交通19号线工程。
  • creo新手入门教程(CREOProE自学教程)
  • 2024-11-22CREOProE自学教程关注:技术工程师engineer,领取更多有趣、有用的资料!本文分享CREO(ProE)各软件版本、安装教程、视频教程(入门--精通)、学习教程(入门--精通),各取所需,给需要的朋友领取,下载方法见。
  • ios 14.1 wifi断断续续(iOS16.1WiFi)
  • 2024-11-22iOS16.1WiFiiOS16.1更新有几天,也碰到不少Bug,特别是升级iOS16.1导致Wi-Fi连线不稳定,经常断线,断断续续今天分享三招方法来改善和解决一、关闭“网络与无线”设置-隐私-定位服务-系统服务-网络与。
  • 泰拉瑞亚战士徽章用处详解(泰拉瑞亚蠕虫围巾怎么获得)
  • 2024-11-22泰拉瑞亚蠕虫围巾怎么获得  泰拉瑞亚蠕虫围巾怎么获得?泰拉瑞亚中蠕虫围巾穿戴后可以使玩家所受伤害降低一部分,很多玩家都还不清楚这个装备要怎么获得,今天为大家带来了泰拉瑞亚蠕虫围巾获取攻略分享,一起来看看吧泰拉瑞亚蠕虫围巾获取。
  • 新手入手数位板需要注意些什么呢(最适合绘画初学者)
  • 2024-11-22最适合绘画初学者使用电脑绘制插图或漫画时,除了绘图软体外还要必备数位板绘图软体中搭载的笔刷是以数位板输入数位讯号为前提所设计,用数位板绘制图像时能感应笔压,让线条呈现出粗细或浓淡的变化这篇文章我打算为初学者进行推荐数。
  • 惠州房价有可能涨吗(惠州的房价在二线城市中算贵吗)
  • 2024-11-22惠州的房价在二线城市中算贵吗昨天惠州再次被第一财经公布的《2021城市商业魅力排行榜》中列为二线城市,在337个地级市中脱颖而出,在入围的30个城市中排名第21位,这个榜单评选的依据主要是五个方面,分别是商业资源聚集度、城市枢纽。
  • 儒家墨家道家法家分别代表思想(儒家道家佛家)
  • 2024-11-22儒家道家佛家一、儒家儒家的思想又称儒学以孔子、孟子为代表人物由孔子创立主要人物有孔子、孟子、荀卿、董仲舒、朱熹、王阳明等比较出名的代表作有《论语》、《孟子》、《荀子》、《周易》等儒家从创立到现在大约有2500多年。