首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Powershell在OneNote文件中搜索文本

如何使用Powershell在OneNote文件中搜索文本
EN

Stack Overflow用户
提问于 2019-08-07 15:02:53
回答 1查看 1.3K关注 0票数 2

我试图使用Powershell打开一个OneNote文件(可能是网络共享上的文件,而不一定是我自己的OneNote文件)。我犯了个错误

调用带有"4“参数的"OpenHierarchy”的异常:“来自HRESULT: 0x80042018的异常”

在打给OpenHierarchy的电话里,我找不到如何解决这个问题。有人能帮忙吗?这是我的代码:

代码语言:javascript
复制
$OneNote = New-Object -ComObject OneNote.Application

$OneNoteFilePath = "someNetworkPath"
[ref]$xml = ""
[xml]$Hierarchy = ""
$OneNote.OpenHierarchy($OneNoteFilePath, "", $xml, "cftNotebook")
$OneNote.GetHierarchy("", [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsPages, [ref]$Hierarchy)

ForEach($notebook in $Hierarchy.Notebooks.Notebook)
{
    [ref]$PageXML = ''
    $OneNote.GetPageContent($notebook.ID, [ref]$PageXML, [Microsoft.Office.Interop.OneNote.PageInfo]::piAll)

    If ($PageXML | Where-Object { $_ -match "\b$word\b" })
    {
        ## Do something
    }

    ForEach($section in $notebook.Section)
    {
        [ref]$PageXML = ''
        $OneNote.GetPageContent($notebook.ID, [ref]$PageXML, [Microsoft.Office.Interop.OneNote.PageInfo]::piAll)

        If ($PageXML | Where-Object { $_ -match "\b$word\b" })
        {
            ## Do something
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-07 20:56:14

这句话有个问题:

$OneNote.OpenHierarchy($OneNoteFilePath, "", $xml, "cftNotebook")

最后一个参数应该是int,3,而不是字符串"cftNotebook“。

或者您可以使用正确的枚举,而不是3:[Microsoft.Office.Interop.OneNote.CreateFileType]::cftSection

https://learn.microsoft.com/en-us/office/client-developer/onenote/application-interface-onenote CreateFileType

如果您正在寻找一个工作片段,下面是一些可以帮助您开始的内容:

代码语言:javascript
复制
$OneNote = New-Object -ComObject OneNote.Application

$OneNoteFilePath = "c:\path\to\onenote.one"
[ref]$oneNoteID = ""
[xml]$Hierarchy = ""
$OneNote.OpenHierarchy($OneNoteFilePath, "", $oneNoteID, [Microsoft.Office.Interop.OneNote.CreateFileType]::cftSection)
$OneNote.GetHierarchy($oneNoteID.Value, [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsPages, [ref]$Hierarchy)

#At this point, check $Heirarchy for what properties it has, it could be Notebooks, or SectionGroup, or Section

#If your $Hierarchy contains sections, you can do this
ForEach($page in $Hierarchy.Section.Page)
{
    [ref]$PageXML = ''
    $OneNote.GetPageContent($page.ID, [ref]$PageXML, [Microsoft.Office.Interop.OneNote.PageInfo]::piAll)
    Write-Output $PageXML.Value
}

注意,有些节可以有节组,在这种情况下,您必须使用一些递归。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57397334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档