logseq_kauer/pages/OneNote%5CNotizen in Markdo...

130 lines
5.3 KiB
Markdown

tags:: Wissensmanagement
- ## Quelle
- [(1458) Easily Convert OneNote to Markdown (and Obsidian.md) - YouTube](https://www.youtube.com/watch?v=C70jUkQyIQM)
Mit dem im Video verlinkten Skript tritt immer folgender Fehler:
> onenote Exception calling Publish" with "4" argument(s): The remote procedure call failed. (Exception from HRESULT: 0x800706BE)
In Kombination mit diesem Skript konnte ich eine lauffähige Version erstellen:
[theohbrothers/ConvertOneNote2MarkDown: Ready to make the step to Markdown and saying farewell to your OneNote, EverNote or whatever proprietary note taking tool you are using? Nothing beats clear text, right? Read on! (github.com)](https://github.com/theohbrothers/ConvertOneNote2MarkDown)
- ## Tabellen umwandeln
- [markdownTables (jmalarcon.github.io)](https://jmalarcon.github.io/markdowntables/)
- ## meine Lösung
- ```powershell
$OUTPUT_DIR = "C:\exp"
$ASSETS_DIR = "assets"
$current_notebook = "" # set globally below
Function Remove-InvalidFileNameChars {
param(
[Parameter(Mandatory = $true,
Position = 0,
ValueFromPipeline = $true,
ValueFromPipelineByPropertyName = $true)]
[String]$Name
)
$newName = $Name.Split([IO.Path]::GetInvalidFileNameChars()) -join '_'
return ($newName.Replace(" ", "_"))
}
write-host $OUTPUT_PATH
$OneNote = New-Object -ComObject OneNote.Application
[xml]$Hierarchy = ""
$OneNote.GetHierarchy("", [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsPages, [ref]$Hierarchy)
function handlePage($page, $path, $assets_path, $i) {
# Make the dir if not exists
$abspath = [IO.Path]::Combine($OUTPUT_DIR, $path)
New-Item -ItemType Directory -Force -Path $abspath | Out-Null
#Write-Host PAGE: $page.name at $path
$pagename = $page.name.Split([IO.Path]::GetInvalidFileNameChars()) -join '_'
$pagename = -join(([string]$i).PadLeft(2,'0'), "_", $pagename)
$filename_docx = -join($pagename, ".docx") | Remove-InvalidFileNameChars
$filename_md = -join($pagename, ".md") | Remove-InvalidFileNameChars
$filename_htm = -join($pagename, ".htm") | Remove-InvalidFileNameChars
$filename_assets = -join($pagename, "_files") #| Remove-InvalidFileNameChars
$path_docx = [IO.Path]::Combine($OUTPUT_DIR, $path, $filename_docx)
$path_htm = [IO.Path]::Combine($OUTPUT_DIR, $path, $filename_htm)
$path_md = [IO.Path]::Combine($OUTPUT_DIR, $path, $filename_md)
$path_assets = [IO.Path]::Combine($OUTPUT_DIR, $path, $filename_assets)
Write-Host Creating DOCX: $path_docx
if (-Not(Test-Path $path_md)) {
# $OneNote.Publish($page.ID, $path_docx, 5, "")
$OneNote.Publish($page.ID, $path_docx, "pfWord", "")
$OneNote.Publish($page.ID, $path_htm, 7, "")
pandoc.exe -i $path_docx -o $path_md -t markdown-simple_tables-multiline_tables-grid_tables --wrap=none
rm $path_docx
rm $path_htm
}
if (Test-Path $path_assets) {
$path_assets_wild = Join-Path $path_assets "*"
$section_assets = [IO.Path]::Combine($OUTPUT_DIR, $path, "assets")
New-Item -ItemType Directory -Force -Path $section_assets | Out-Null
$items = Get-ChildItem $path_assets_wild
$items | Rename-Item -NewName { $pagename + "_" + $_.Name };
Move-Item -Force $path_assets_wild $section_assets
rmdir $path_assets
# Replace image links with the right path
Write-Host Fixing image links
$LINK_REGEX = '!\[[^\]]*\]\(media\/image((.*?)\.(.*?))?(?=\"|\))(?<optionalpart>\".*\")?\)(\{.*\})?'
$path_md2 = -join($path_md, "2")
$prefix = -join($pagename, "_")
$hello = (Get-Content -encoding utf8 $path_md) `
-replace $LINK_REGEX, ("![[$prefix" + "image" + ('$2'.PadLeft(4, '0')) + '.$3]]') `
-replace 'jpeg', 'jpg' |
Out-File -Encoding utf8 $path_md2
Move-Item -Force $path_md2 $path_md
}
}
function handleSection($section, $path) {
$path = Join-Path $path $section.name
Write-Host Section: $path
$i=0
foreach($page in $section.Page) {
handlePage $page $path $assets_path $i
$i++
}
}
function handleSectionGroup($sg, $path) {
$path = Join-Path $path $sg.name
if ($sg.isRecycleBin -ne 'true') {
Write-Host Section Group: $path
foreach ($section in $sg.Section) {
handleSection $section $path
}
foreach ($sg2 in $sg.SectionGroup) {
handleSectionGroup $sg2 $path
}
}
}
while ($true) {
try{
foreach ($notebook in $Hierarchy.Notebooks.Notebook ) {
$current_notebook = $notebook.Name
Write-Host Notebook: $current_notebook
$path = $current_notebook
foreach ($sectiongroup in $notebook.SectionGroup) {
handleSectionGroup $sectiongroup $path
}
foreach ($section in $notebook.Section) {
handleSection $section $path
}
}
break
} catch {
Write-Host ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Write-Host $_
sleep 10
}
}
```
-