130 lines
5.3 KiB
Markdown
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
|
|
}
|
|
}
|
|
```
|
|
- |