背景:
在我的工作环境中,我们为知识库笔记提供了一个过渡位置。这些内容驻留在许多OneNote 2016工作簿中,这些工作簿已经维护了多年。我目前正在将内容更新工作委派给我们的员工,并且这项工作的一部分涉及将我们所有的OneNote笔记本名称和部分名称导入到用于层次结构管理的excel电子表格中。

任务:我花了很长时间在网上寻找一种简单快捷的方法,使用PowerShell将层次结构信息从OneNote导出到csv,但我一生都找不到一种可行的简便方法。以下代码在整个Internet上引起了共鸣,但是每次我尝试运行该代码时,我都会不断出错。

$onenote = New-Object -ComObject OneNote.Application
$scope = [Microsoft.Office.Interop.OneNote.HierarchyScope]::hsPages
[ref]$xml = $null

$onenote.GetHierarchy($null, $scope, $xml)

$schema = @{one=”http://schemas.microsoft.com/office/onenote/2013/onenote”}

$xpath = “//one:Notebook/one:Section”
Select-Xml -Xml (

$xml.Value) -Namespace $schema -XPath $xpath |
foreach {
$node = $psitem.Node

$npath = Split-Path -Path $node.Path -Parent

$props = [ordered]@{
Workbook =  Split-Path -Path $npath -Leaf
Section = $node.Name
}
New-Object -TypeName PSObject -Property $props
}

错误:
我将从执行此代码中得到的错误如下:

类型为“System.String”的值,以类型为“System.Xml.XmlNode”。
在线:10字符:17
+ Select-Xml -Xml(

最佳答案

解决方案:
最后,我不得不断开与Onenote应用程序的已建立连接,并找到适用于OneNote 2016的可行解决方案。我提供了我的解决方案,但希望能在将来听到有效处理此数据的任何其他方式:

Function Get-OneNoteHeaders{

[CmdletBinding()]
Param()

Begin
{
    $onenote = New-Object -ComObject OneNote.Application
    $scope = [Microsoft.Office.Interop.OneNote.HierarchyScope]::hsPages
    [ref]$xml = $null
    $csvOutput = "c:\temp\onenote-headers.csv"
}
Process
{
    $onenote.GetHierarchy($null, $scope, $xml)
    [xml]$result = ($xml.Value)

    Foreach($notebook in $($result.DocumentElement.Notebook)){
        Add-content -Path $csvOutput -Value "$($notebook.name)"
        Foreach($section in $($notebook.section)){
            Add-content -Path $csvOutput -Value ",$($section.name)"
            Foreach($page in $section.page){
                Add-content -Path $csvOutput -Value ",,$($page.name)"
            }
        }
    }
}
End{}
}

#Get-OneNoteHeaders

关于powershell - 如何使用PowerShell从OneNote文档中提取标题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44427418/

10-11 07:48