2.スクリプト本体

#以下の内容をコピペ貼り付け(先頭の#があるならここも貼り付けて大丈夫)


#変更可能範囲ここから---------------------------------------------

#(1)対象ファイルのあるディレクトリパス

$filePth="対象ファイルのあるディレクトリ"


#(2)対象ファイル名(拡張子抜き)

$fileNm="拡張子、つまり「.docx」を抜いたファイル名"


#(3)使用フォント

$fntNm='使用するフォント名(ワードで選択する時の名前「MS 明朝」とかをコピペしてください)'


#(4)振るルビのサイズ(×2)

#4ptで振るなら8をセット、5ptなら10……で反映されるはず、たぶん

#初期値4として4×2で8をセット

$rbFntsz='8'


#(5)ルビ振る文字のサイズ(×2)

#4ptで振るなら8をセット、5ptなら10……で反映されるはず、たぶん

#初期値16として16×2で32をセット

$rbBsFntsz='32'


#(6)最大傍点文字数

#初期値として30にしてあるので、傍点のつく最大文字数に書き直してください

$tnMax = 30


#変更可能範囲ここまで---------------------------------------------


#正規表現用意する----------------------------------------------------------------

#基本的な文字は大丈夫なのだが、通常使用範囲じゃない文字とかは無視される文字が出てきたりするのでそれはアフターケアでカバーする


#始点設定アリのルビ

$rbKkym = '([.\w\s]+)([.\w\s]+)'


#傍点記法用 文字種はルビ側と合わせる

$tnKkym1 = '《《'

$tnKkym2 = '([.\w\s]{1})'

$tnKkym3 = '》》'


#始点無設定のルビ=ルビ対象文字漢字用

$rbNKkym = '([\p{IsCJKUnifiedIdeographs}々〇]+)《([.\w\s]+)》'


#ワード用XML変換後ルビ(長いのは仕様)

#フォント種類やサイズはアフターケアも可能

#ルビ全般対応

$rbWd = '</w:t></w:r><w:r><w:ruby><w:rubyPr><w:rubyAlign w:val="distributeSpace"/><w:hps w:val="'+$rbFntsz+'"/><w:hpsRaise w:val="18"/><w:hpsBaseText w:val="'+$rbBFntSz+'"/><w:lid w:val="ja-JP"/></w:rubyPr><w:rt><w:r w:rsidR="00E95970" w:rsidRPr="00E95970"><w:rPr><w:rFonts w:ascii="'+$fntNm+'" w:eastAsia="'+$fntNm+'" w:hAnsi="'+$fntNm+'" w:hint="eastAsia"/><w:sz w:val="'+$rbFntsz+'"/><w:szCs w:val="'+$rbBsFntsz+'"/></w:rPr><w:t>$2</w:t></w:r></w:rt><w:rubyBase><w:r w:rsidR="00E95970"><w:rPr><w:rFonts w:hint="eastAsia"/><w:sz w:val="'+$rbBsFntsz+'"/><w:szCs w:val="'+$rbBsFntsz+'"/></w:rPr><w:t>$1</w:t></w:r></w:rubyBase></w:ruby></w:r><w:r><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr><w:t>'


#傍点対応用(部品として三分割)

$tnWd1 = '</w:t></w:r><w:r><w:ruby><w:rubyPr><w:rubyAlign w:val="distributeSpace"/><w:hps w:val="'+$rbFntsz+'"/><w:hpsRaise w:val="18"/><w:hpsBaseText w:val="'+$rbBFntSz+'"/><w:lid w:val="ja-JP"/></w:rubyPr><w:rt><w:r w:rsidR="00E95970" w:rsidRPr="00E95970"><w:rPr><w:rFonts w:ascii="'+$fntNm+'" w:eastAsia="'+$fntNm+'" w:hAnsi="'+$fntNm+'" w:hint="eastAsia"/><w:sz w:val="'+$rbFntsz+'"/><w:szCs w:val="'+$rbBsFntsz+'"/></w:rPr><w:t>'

$tnWd2 = '</w:t></w:r></w:rt><w:rubyBase><w:r w:rsidR="00E95970"><w:rPr><w:rFonts w:hint="eastAsia"/><w:sz w:val="'+$rbBsFntsz+'"/><w:szCs w:val="'+$rbBsFntsz+'"/></w:rPr><w:t>'

$tnWd3 = '</w:t></w:r></w:rubyBase></w:ruby></w:r><w:r><w:rPr><w:rFonts w:hint="eastAsia"/><w:sz w:val="'+$rbBsFntsz+'"/><w:szCs w:val="'+$rbBsFntsz+'"/></w:rPr><w:t>'

#正規表現用意終了----------------------------------------------------------------


#docxファイルの実体部分取得開始----------------------------------------------------

#docx→zipに変更

Rename-Item -Path ($filePth + "\" + $fileNm + ".docx") -NewName ($fileNm + ".zip")


#zip解凍(解凍先はファイルのあるパスと同じ)

#以降解凍後のフォルダ名はファイル名と同じ&wordファイルであれば構成は同じなのでファイル名を使ってパスを指定していく

Expand-Archive -Path ($filePth + "\" + $fileNm + ".zip") -DestinationPath ($filePth + "\" + $fileNm)


#zip削除(後々邪魔になるため)

Remove-Item ($filePth + "\" + $fileNm + ".zip")


#いじる用のXMLパスセット

$wdXmlPath = ($filePth + "\" + $fileNm + "\word\document.xml")


#XMLの内容をごそっと取得

$strRaw = Get-Content $wdXmlPath -RAW -Encoding utf8

#docxファイルの実体部分取得終了----------------------------------------------------


#ルビの置換開始----------------------------------------------------


#始点開始アリルビの置換実施

$strRepRaw = $strRaw -replace $rbKkym,$rbWd


#傍点表記をループで対応

#1文字単位でルビ振る(変な均等割り付けを自動発生させないため)

#テンプレート生成用変数初期化

$tnWdTemp=''

$tnKkymTemp=''

$tnKkymregx=''

#-lt=<(未満)で判定するため上で設定した傍点振る文字の最大値+1する

$tnMax = $tnMax + 1

#ループで設定した傍点振る文字の最大分置換を実行

for($i=1; $i -lt $tnMax;$i++){

#置換用文字列を連結(ループ中溜め込むことで現在の周回分の文字に対応)

$tnWdTemp=$tnWdTemp + $tnWd1 + '・' + $tnWd2 + '$' + $i + $tnWd3

#正規表現用文字列を連結 (ループ中溜め込むことで現在の周回分の文字に対応)

$tnKkymTemp=$tnKkymTemp + $tnKkym2

#目印になる「」を正規表現につける

$tnKkymregx=$tnKkym1 + $tnKkymTemp + $tnKkym3

#置換実行

$strRepRaw = $strRepRaw -replace $tnKkymregx,$tnWdTemp

}


#始点無設定ルビをごそっと変換していっぺんに格納(始点無設定=直前は漢字のみ)

$strRepRaw = $strRepRaw -replace $rbNKkym,$rbWd


#対象ファイルに内容を上書き(Powershellのバージョンによって対応法が異なるのでバージョンチェックして分岐)

if($PSVersionTable.PSVersion.Major -gt 5){

#Powershellのバージョンが5より大きい=6以上なら

Out-File -FilePath $wdXmlPath -InputObject $strRepRaw -Encoding utf8

}else{

#Powershellのバージョンが5以下なら

#あとは.NET FrameworkのIO処理を使って書く

$UTF8woBOM = New-Object "System.Text.UTF8Encoding" -ArgumentList @($false)

[System.IO.File]::WriteAllLines((Join-Path ($filePth + "\" + $fileNm + "\word") "document.xml"), @($strRepRaw), $UTF8woBOM)

}


#解凍してできたフォルダをzipとして再度圧縮(置換処理前にzipを消してたのはこの時にエラーになるから)

Compress-Archive -Path ($filePth + "\" + $fileNm + "\*") -DestinationPath ($filePth + "\" + $fileNm + ".zip") -Force


#作成したzipの拡張子をzip→docxに変更

Rename-Item -Path ($filePth + "\" + $fileNm + ".zip") -NewName ($fileNm + ".docx")


#展開した後のフォルダが残ってしまうので、中身とガワを削除

Remove-Item ($filePth + "\" + $fileNm + "\*") -Recurse

Remove-Item ($filePth + "\" + $fileNm )


  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る