word文档中有页面数(不打开Word文档获取总页数)
word文档中有页面数(不打开Word文档获取总页数)
2024-11-22 03:55:32  作者:是是是我错  网址:https://m.xinb2b.cn/know/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冬天钓鱼是人找鱼#头条创作挑战赛#我们通常会说,台钓是鱼找人,而传统钓是人找鱼这样说的依据主要来自它们的垂钓方式,台钓大多是一人一窝,守着一个地方钓,边诱边钓而传统钓是一人多窝,来回钓、哪里出鱼钓哪里,要是都不出鱼,。
  • PDF如何添加水印(如何给pdf添加水印)
  • 2024-11-22如何给pdf添加水印如何给pdf添加水印?很多小伙伴在完成一份pdf文件之后,会在第一时间内给pdf文件加上水印,给pdf文件添加水印的好处非常多,例如明确文件的版权出处、减少文件被恶意盗用的可能、而且还有一定的品牌宣传。
  • 平价又好穿的粗高跟鞋(美到爆的小众品牌高跟鞋都有哪些)
  • 2024-11-22美到爆的小众品牌高跟鞋都有哪些我虽然不是日日穿高跟鞋,也不是次次都恨天高但对于高跟鞋的热爱,跟很多妹纸对包的热爱一样真真的真爱!网上冲浪,刷的最多就是高跟鞋超喜欢在打折季去捡大牌的漏今天为集美们分享几款在打折的小众通勤高跟鞋(我自。
  • 普通办公电脑一般什么配置(办公电脑什么配置合适)
  • 2024-11-22办公电脑什么配置合适台式电脑的主流配置的选择需要参考很多因素,如预算、需求和其他方面的考虑,所以我们应该有一个详细的了解我们的信息在采购之前,这样我们就可以适应的情况,选择最合适的模型然后,让我们跟随小系列来理解桌面计算。
  • 那些难忘的少年时光(岁月间我们陪少年们)
  • 2024-11-22岁月间我们陪少年们小说简介:那是我爱的少年,陪我走过青葱岁月与风华流年《岁月间》百晓推荐:作者说那是她爱的少年,陪她走过青葱岁月与风华流年,我作为读者也想说,那也是我爱的少年们,看他们青春无间和幸福美满小说名叫《岁月间。
  • 情侣发朋友圈说说大全(适合情侣发的精选微信说说)
  • 2024-11-22适合情侣发的精选微信说说1/有没有一个人让你过了奈何桥还在牵挂有没有一个人让你喝了孟婆汤还在思念2/不管再苦我都会在你身边不管再难我都会等你回来3/我心疼你,疼到忽略自己我相信你,信到怀疑自己4/很迷人,但我得回家你很帅气,。
  • 一首望月思亲的诗(邛崃杂诗一首)
  • 2024-11-22邛崃杂诗一首《杂诗一首》清.马维翰考注:凡丁[序]宋.嘉定间,知州事张方瑞庵得古井,甚甘,为再愁(瓦部,音宙)之名集曰:《亨泉遗稿》意思:南宋嘉定年间(1208-1224),邛州知州张方在白鹤山中发现一口水质极佳。
  • 黄金土豆芝士球怎么做(黄金土豆芝士球的做法)
  • 2024-11-22黄金土豆芝士球的做法食材:土豆2个、食盐3g、玉米淀粉30g、鸡蛋1个、芝士碎80g、面包糠30g、胡椒粉2g、番茄酱10g土豆清洗干净,切片,放入蒸锅中,蒸熟碾压成泥加入胡椒粉和食盐,搅拌均匀,分成8份压扁,放上芝士碎。
  • 毛球后来还跟着石昊吗(曾是沙滩排球运动员)
  • 2024-11-22曾是沙滩排球运动员16号开播,23号收官,《祝卿好》这更新周期对观众来说太友好了!这部剧虽然只有22集,但剧情却很丰富,还有3对CP,每对都很好嗑,这部剧从主演到配角颜值也都很高,好久没有看到全员都是帅哥的古偶剧了而男。
  • 冻顶乌龙茶是茶中之王吗(茶--冻顶乌龙茶)
  • 2024-11-22茶--冻顶乌龙茶冻顶乌龙今天阳光明媚,适合干嘛呢?对啦,喝茶嘻嘻..............今天我们和冻顶乌龙茶怎样?但是呢,在和之前我们一起聊聊冻顶乌龙可好冻顶乌龙茶,生产地为台湾鹿谷乡凤凰村永隆村彰雅村(冻顶巷)。
  • 大家如何发现自己得甲减的(任由甲减千张面孔)
  • 2024-11-22任由甲减千张面孔医脉通编辑撰写,未经授权禁止媒体转载,欢迎个人转发至朋友圈导读:甲减的危害可累及多系统、多器官,患者或伴有非特异性的临床表现,如未加以了解,非常容易导致误诊提到甲减的症状,首先想到的往往是全身乏力、畏。