見出し画像

マインドマップをSmartArtにするためマークダウン(#)を変換するためのスクリプトを作成した

マインドマップは思考の整理やアイデアの可視化に非常に便利なツールです。しかし、マインドマップを他の人と共有する際同じ社内なら問題なさそうですが、ほかの人に渡す際に同時の形式では共有しずらい。PowerPointに取り込みたいが、図形にしてもあとでマインドマップと整合性が取れなくなり不便に感じていました。

編集はマインドマップ、PowerPointには張り付けるだけにできないかなと。
PowerPointのSmartArtに変換できれば近いことができるかなと思い、いろいろ調べても直接PowerPointのSmartArtに変換できるのは見当たらなかったの
で作ってみました。

私が使っているマインドマップソフトはマークダウン記法にエクスポートできるの(ハッシュタグ「#」で階層は表現される)をPowerPointのSmartArtに変換するためのPowerShellスクリプト作ってみました。

マインドマップを一からPowerPointで再現する必要がなくなります。
渡した相手にはSmartArtとして編集してもらうこともできます。

使い方

このスクリプトは、テキスト入力欄にマインドマップのマークダウンテキストを貼り付けます。その後、「変換」ボタンをクリックすると、このテキストはPowerPointのSmartArtに適した形式に変換され、隣のテキストボックスに表示されます。さらに、「コピー」ボタンでこの変換されたテキストをクリップボードにコピーし、PowerPointのSmartArtのテキストボックス欄に貼り付けることができます。

スクリプト

以下のスクリプトをPowerShellで実行もしくはメモ帳に張り付けて.ps1の拡張子で保存し実行します

なお#タグの階層以外認識しません

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()

# メインウィンドウの作成
$mainForm = New-Object System.Windows.Forms.Form
$mainForm.Text = 'SmartArt Text Converter'
$mainForm.Size = New-Object System.Drawing.Size(800,600)
$mainForm.StartPosition = 'CenterScreen'

# 入力テキストボックス
$inputTextBox = New-Object System.Windows.Forms.TextBox
$inputTextBox.Location = New-Object System.Drawing.Point(10, 10)
$inputTextBox.Size = New-Object System.Drawing.Size(370, 500)
$inputTextBox.Multiline = $true
$inputTextBox.ScrollBars = 'Vertical'

# 結果テキストボックス
$outputTextBox = New-Object System.Windows.Forms.TextBox
$outputTextBox.Location = New-Object System.Drawing.Point(400, 10)
$outputTextBox.Size = New-Object System.Drawing.Size(370, 500)
$outputTextBox.Multiline = $true
$outputTextBox.ScrollBars = 'Vertical'
$outputTextBox.ReadOnly = $true

# 変換ボタン
$convertButton = New-Object System.Windows.Forms.Button
$convertButton.Location = New-Object System.Drawing.Point(10, 520)
$convertButton.Size = New-Object System.Drawing.Size(75, 23)
$convertButton.Text = '変換'
$convertButton.Add_Click({
    $outputTextBox.Text = ''
    $inputTextBox.Lines | ForEach-Object {
        if ($_ -ne '') {
            $level = ($_ -split '#').Count - 1
            $text = $_ -replace '^#+', ''
            $tabString = [string]::Join('', (1..$level | ForEach-Object { "`t" }))
            $outputTextBox.AppendText("$tabString$text`r`n")
        }
    }
})

# コピー ボタン
$copyButton = New-Object System.Windows.Forms.Button
$copyButton.Location = New-Object System.Drawing.Point(100, 520)
$copyButton.Size = New-Object System.Drawing.Size(75, 23)
$copyButton.Text = 'コピー'
$copyButton.Add_Click({
    [System.Windows.Forms.Clipboard]::SetText($outputTextBox.Text)
})

# コントロールの追加
$mainForm.Controls.Add($inputTextBox)
$mainForm.Controls.Add($outputTextBox)
$mainForm.Controls.Add($convertButton)
$mainForm.Controls.Add($copyButton)

# メインウィンドウの表示
[void]$mainForm.ShowDialog()

.ps1で保存して実行する場合、以下のbatファイルから呼び出すと権限設定をパスできます。

@ECHO OFF
PowerShell -NoProfile -ExecutionPolicy Bypass -File "ファイル名.ps1"

この記事が気に入ったらサポートをしてみませんか?