0

OneNote ノートブック内の非常に特定の場所にセクションを作成することができました。今、私はページで同じことを達成したいと考えています。したがって、予測不可能な配置の「CreateNewPage」メソッドを使用する代わりに、完全に正常に機能する UpdateHierarchy を使用します (テスト目的で、以下の AppendChild を使用しています)。

私が抱えている唯一の問題は、UpdateHierarchy を使用して新しいページを作成した後、新しく作成されたページへのリンクが完全に失われていることです。OneNote は ID を割り当て、それ以降に指定したすべてのタグ/名前を無視します。また、タイトルの設定に使用される One:T メンバーの設定は無視され、常に「無題のページ」が作成されます。

私は何か間違ったことをしていますか、最初に CreateNewPage を作成し、割り当てられたページ ID を使用して、UpdateHierarchy を使用してそれを再配置する必要がありますか?

よろしくジョエル

function createPage {
param([string]$title, [string]$sectionnode)

[string]$pageref=$null

# Gather the pages within the notebook
[xml]$ref = $null
$_globalOneNote["COM"].GetHierarchy($sectionnode,  [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsPages, [ref]$ref)

[System.Xml.XmlNamespaceManager] $nsmgr = $ref.NameTable
$nsmgr.AddNamespace('one', "http://schemas.microsoft.com/office/onenote/2010/onenote")

# Creation of a new page
$newPage = $ref.CreateElement('one', 'Page', 'http://schemas.microsoft.com/office/onenote/2010/onenote')
$newTitle = $ref.CreateElement('one', 'Title', 'http://schemas.microsoft.com/office/onenote/2010/onenote')
$newOE = $ref.CreateElement('one', 'OE', 'http://schemas.microsoft.com/office/onenote/2010/onenote')
$newT = $ref.CreateElement('one', 'T', 'http://schemas.microsoft.com/office/onenote/2010/onenote')

$newPage.SetAttribute('name', "Olololo")
$newT.InnerText = '<![CDATA[Testtitle]]>'

$newOE.AppendChild($newT)
$newTitle.AppendChild($newOE)
$newPage.AppendChild($newTitle)

$ref.Section.AppendChild($newPage)
$_globalBJBOneNote["COM"].UpdateHierarchy($ref.OuterXML)
}
4

1 に答える 1

0

これでうまくいきます。タイトルなどの設定は UpdatePageContent を使用して行う必要がありますが、新しいページは適切に配置されます。メタデータ (タイトル、インデントなど) を配置するために、createPage 関数の返された GUID を使用して機能する別の関数を使用できます。

function createPage {
param([string]$sectionnode, [string]$pagenode = $sectionnode)

# Gather the sections within the notebook
[xml]$ref = $null
$_globalBJBOneNote["COM"].GetHierarchy($sectionnode,  [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsPages, [ref]$ref)

[System.Xml.XmlNamespaceManager] $nsmgr = $ref.NameTable
$nsmgr.AddNamespace('one', "http://schemas.microsoft.com/office/onenote/2010/onenote")

# Create new page
[string]$pageID = $null
$_globalBJBOneNote["COM"].createNewPage($ref.Section.ID, [ref]$pageID)

# Reload the hierarchy, now we can get the node of the new notebook
$_globalBJBOneNote["COM"].GetHierarchy($sectionnode,  [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsPages, [ref]$ref)
$newPageNode = $ref.SelectSingleNode('//one:Page[@ID="' + $pageID + '"]', $nsmgr)
$referencePageNode = $ref.SelectSingleNode('//one:Page[@ID="' + $pagenode + '"]', $nsmgr)

# Reposition
[void]$ref.Section.removeChild($newPageNode)
[void]$ref.Section.InsertAfter($newPageNode, $referencePageNode)
$_globalBJBOneNote["COM"].UpdateHierarchy($ref.OuterXML)

$pageID
}
于 2013-05-28T12:32:11.010 に答える