word文档中有页面数(不打开Word文档获取总页数)
word文档中有页面数(不打开Word文档获取总页数)
2024-07-01 03:14:40  作者:是是是我错  网址:https://m.xinb2b.cn/life/bwz446413.html

word文档中有页面数(不打开Word文档获取总页数)(1)

打开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-07-01盘点王力宏李云迪友情线这届网友,人人都是列文虎克吧...起因是有人发现王力宏和他老婆已经公开两年无互动了,于是开始怀疑,这两人...是不是婚姻出现问题了?接着找出两人最后一次的公开互动,已经要追溯到前年#男方最后一次和老婆。
  • 和平精英免费抽皮肤的主播(Hello语音联合和平精英狂送福利)
  • 2024-07-01Hello语音联合和平精英狂送福利在大家在玩《和平精英》时有没有遇见过这样一个问题,自己明明发现了敌人,却因为语音延迟的缘故导致没能及时沟通给队友,最终导致了团队的覆灭如果这样的话,你就需要一个专业的游戏语音开黑软件了,最近和《和平精。
  • 沙画歌曲火红的萨日朗(红月亮诗画艺苑-驼铃叮咚)
  • 2024-07-01红月亮诗画艺苑-驼铃叮咚【原创】刀郎麦西来甫作者:驼铃叮咚|朗诵:坤厚漪叶尔羌河从喀喇昆仑山冰川流出在塔克拉玛干大沙漠的边缘划出了一道美丽的圆弧圆弧哺育了广袤的胡杨刀郎人以狩猎游牧在这里谋生星河泄地,大漠银霜孤烟落日,胡杨金。
  • 星锐4系5系(同增24.5星锐新5系如何打造新蓝牌下)
  • 2024-07-01同增24.5星锐新5系如何打造新蓝牌下2022年前11月,江淮星锐同比增长24.5%在蓝牌新规标准下,江淮星锐新5系品质升级,能否成为2023年市场增长的强引擎?2022年9月,蓝牌新规正式落地,冲击轻客行业加速变革在新标准下,5.5米就。
  • 泰语萨瓦迪卡是什么意思(萨瓦滴卡并非地道泰语)
  • 2024-07-01萨瓦滴卡并非地道泰语“萨瓦迪卡”这句广为人知的泰语,相信大家并不陌生有一点儿泰国文化基础或是看过一丁点儿泰剧的人都知道,这是泰语中的问候语外国游客到泰国去,无论男女老少,总要说上一句“萨瓦迪卡”若说话者是位女士也就罢了,。
  • 档案文化创意小镇(身边档案杨柳河)
  • 2024-07-01身边档案杨柳河朱鸿伟/文一次偶然的骑行,令我对杨柳河产生了强烈的亲近愿望那是某年早春二月骑车去金华采风,恰值白日微暄,菜花盛开,眺望杨柳河口,河中小洲一片金黄,目光漫溯,岸边竹林、枫杨、茅舍,还有劳作的农人倒影水中。
  • ai如何快速添加多个画板(AI小技巧01关于画板)
  • 2024-07-01AI小技巧01关于画板今天,我们来介绍一下Illustrator“画板”的相关使用技巧,不知道这些技巧你是不是都知道呢?1、利用矩形直接创建画板当我们创建新画板时,常规的做法是单击工具箱中的“面板”按钮,再单击属性栏中的“。
  • 杨幂最经典的一部电视剧(处女作演杨幂哥哥)
  • 2024-07-01处女作演杨幂哥哥采访/撰文:赫希同图片:由受访者提供疫情还没有过去,演员张思帆在老家湖南等待着复工的消息他和于朦胧、陈钰琪共同主演的古装甜蜜爱情剧《两世欢》刚刚收官,不久前我在北京拨通了张思帆的电话,进行了这次云采访。
  • 国家队和俱乐部的比赛(因国家队比赛时间冲突)
  • 2024-07-01因国家队比赛时间冲突直播吧8月29日讯西甲联盟官方宣布,由于此前的时间安排和国家队比赛日的时间冲突,因此西甲第四轮的比赛赛程时间将重新调整此前西甲官方曾表示,支持有拉美球员的俱乐部不放人参加国家队比赛,但被体育仲裁法庭(。
  • 奇瑞对比吉利车质量怎么样(买国产车别大意)
  • 2024-07-01买国产车别大意导读:近两年,随着国产车品牌不断崛起,认可国产车的消费者也是越来越多,而像吉利和奇瑞等品牌的口碑都很高,比亚迪汽车更是力压众多合资车品牌夺得销冠而启辰、领克、东风风行、宝骏、星途、广汽埃安和长安欧尚等。
  • 泰戈尔爱情诗(永恒的爱情讲解)
  • 2024-07-01永恒的爱情讲解《永恒的爱情》:我以数不清的方式爱你,我的痴心永远为你编织歌之花环——亲爱的,接受我的奉献,世世代代以各种方式挂在你的胸前我听过的许多古老爱情的故事,充满聚首的欢乐和离别的悲郁纵观无始的往昔,我看见你。