アウトラインプロセッサの階層付きテキストを、CSV形式に変換するPowerShellスクリプトです。
一般に、アウトラインプロセッサ(アウトラインエディタ)の印刷機能はあまり充実していません。
そこでExcelやOpenOffice(LibreOffice) Calcなど、表計算ソフトから印刷できるよう
階層付きテキストをCSV形式に変換するツールを作成しました。
使い方は次の通りです。
※Windowsの初期状態のままでは、PowerShellスクリプトを実行することはできません。
#階層付きテキスト to CSV変換ツール (Microsoft PowerShellスクリプト) #ユーザによるカスタマイズ可能な値 開始 #見出しの開始文字列を設定 $headertitle = '○ ' #本文の字下げ文字列を設定 $honbunindent = ' ' #Excelの実行ファイルをフルパスで指定。この例はExcel2010 32bit版 標準インストールの場合 #値を設定した場合は、行先頭の#を削除して下さい #$excelfullpath = 'C:\\Program Files (x86)\\Microsoft Office\\Office14\\EXCEL.EXE' #ユーザによるカスタマイズ可能な値 終了 #パス取得 $CurrnetDir = Split-Path ( & { $myInvocation.ScriptName } ) -parent Set-Location $CurrnetDir #ファイル名取得 Write-Host '階層付きテキスト to CSV変換ツール (バージョン6)' Write-Host '' Write-Host '階層付きテキストのファイル名を入力して下さい' $TextBaseName = Read-Host ".txtなどの拡張子も必要です" $CsvBaseName = [IO.Path]::ChangeExtension($TextBaseName, ".csv") #本文表示を選択 Write-Host '' $OutputBody = Read-Host "本文(先頭にピリオドの無い行)を出力しますか? (y/[n])" #テキストを格納 $TextContent = Get-Content $TextBaseName #もしOutputBodyがでなければ、見出し行のみ抽出 if ($OutputBody -match '[yY]') { $Replaced1 = $TextContent } else { $Replaced1 = $TextContent | Select-String '^\.' } #見出しのみ変換 $Counter = 0 while($Replaced1[$Counter] -ne $null){ [String]$Line = $Replaced1[$Counter] $Line = $Line -replace '^\.',',' while($Line -match '^,+\.'){ $Line = $Line -replace '(^,+)\.','$1,' } $Replaced1[$Counter] = $Line $counter++ } $Replaced1 = $Replaced1 -replace '(^,+)',('$1' + $headertitle) #本文変換 $Replaced2 = $Replaced1 $Counter = 0 while($Replaced1[$Counter + 1] -ne $null){ #先行行:判定用 [String]$Line = $Replaced1[$Counter] #未処理行:判定用 [String]$LinePlus1 = $Replaced1[$Counter + 1] #先行行がカンマで始まり、かつ、未処理行がカンマで始まらない場合は加工が必要 #そうでなければ加工が不要なので処理スキップ if(($Line.Substring(0) -match '^,*') -and ($LinePlus1.Substring(0) -match '^([^,]|$)')){ $Commas = $Line.Substring(0, $Line.LastIndexOf(',') + 1) $Replaced2[$Counter + 1] = $Commas + $honbunindent + $LinePlus1 } $Counter++ } #第1階層は先頭のカンマ不要なので除去 $Replaced2 = $Replaced2 -replace '^,', '' Set-Content -Path $CsvBaseName -Value $Replaced2 #excelの実行ファイル名が設定されていたら、excelを起動 if($excelfullpath.Length -gt 1){ Start-Process ($excelfullpath + ' \') -ArgumentList $CsvBaseName } #以上
(2014年9月16日)
© 2015 S.Ishikawa