word文档中有页面数(不打开Word文档获取总页数)
word文档中有页面数(不打开Word文档获取总页数)
2024-11-10 09:16:26  作者:是是是我错  网址: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-11浪费粮食的名言鉴赏不当家不知柴米贵省下烟酒钱,急难免求人珍惜粮食,远离浪费细水长流,遇灾不愁珍惜粮食就是热爱生命身后有余忘缩手,眼前无路想回头精打细算够半年,遇到荒年不受难粒米虽小犹不易,莫把辛苦当儿戏珍珠为宝,稻米为。
  • 灯槽灯带安装方法图解(步骤阅读)
  • 2024-11-11步骤阅读首先确定一下要安装的长度,然后取整数截取因为这种灯带是1米一个单元,只有从剪口截断,才不会影响电路,如果随意剪断,会造成一个单元不亮LED本身是二极管,直流电驱动,所以是有正负极的,如果正负极反接,就。
  • 豆瓣酱哪个牌子最正宗(豆瓣酱怎么样的算正宗?)
  • 2024-11-11豆瓣酱怎么样的算正宗?在郫县独特气候下生产的豆瓣酱都是比较正宗的郫县豆瓣酱大概分两种(1)一种是红油豆瓣,发酵期短,工艺简单,用途较少在四川特别是郫县当地,讲究点的家庭都是自己做的(2)还有一叫传统郫县豆瓣发酵周期越长颜色。
  • 采购成本控制的步骤(采购成本控制流程)
  • 2024-11-11采购成本控制流程关注【本头条号】更多关于制度、流程、体系、岗位、模板、方案、工具、案例、故事、图书、文案、报告、技能、职场等内容,弗布克15年积累免费与您分享!一、定量采购定量采购操作流程定量订货法是指预先确定一个订。
  • 茶叶中的养生小知识(聊聊茶叶里的健康之道)
  • 2024-11-11聊聊茶叶里的健康之道来源:海外网图为今年9月,山东省青岛市崂山区雕龙嘴村的村民们正在茶园里忙着采摘秋茶杨雪梅摄(人民视觉)上图右侧为各类茶叶,左侧为相对应的茶水示意图按照发酵程度由轻到重排序,从上至下依次为:绿茶、白茶、。
  • 怎么做好一个合格的班组长(合格班组长要做到这些)
  • 2024-11-11合格班组长要做到这些来源|网络全文总计4031字,需阅读10分钟,以下为正文:班组职位不大,责不小他是企业的一线指挥官,联系上下级的纽带和桥梁不想当将军的士兵不是好士兵,班组长是当将军的第一步,第一步必须心中有数:要知道。
  • 人生常态精辟句子(人生感悟的句子)
  • 2024-11-11人生感悟的句子经历过,体验过,人就变得温柔,对所有发生的事情都能释怀,不管所经历的是巨大的伤痛,被人伤害或造成他人的伤害,都没有什么不好,一切都是被需要只要我们内在变得坚强,就没有所谓分离、伤害或痛苦,活在世上,就。
  • 如何自行组装烘干机?(下面14个步骤帮你解决)
  • 2024-11-11下面14个步骤帮你解决首先用剪刀将烘干机的包装打开,取出所有的零部件然后将标注有下层的塑料架子掰开,插上三根钢管接着往向上的孔中插入六根钢管然后将“烘干机的外衣”套进六根钢管中接着将把标注有中层的塑料组件卡进钢管中然后取三。
  • 去香港旅游是否要通行证(内地游客来到香港)
  • 2024-11-11内地游客来到香港去香港旅游是一个不可多得的经历虽然它也有许多高楼大厦和其他现代化的地方,但这座城市保留了许多老式的风格,使人感到如同回到过去此外,香港还是一个购物天堂,有成千上万家店铺供游客选购,几乎能买到所有想要的。
  • 说唱分为hook还有什么?Rakim他定义了什么是说唱音乐里的Flow
  • 2024-11-11说唱分为hook还有什么?Rakim他定义了什么是说唱音乐里的Flow昨天在我的微头条里,有读者留言说想看关于Rakim的文章,借此机会,今天我来说一说这个定义了在说唱音乐里什么叫做“Flow”的传奇人物1968年,Rakim在美国纽约出生,他的阿姨正是有着“R&。