一太郎→Word変換

大量の一太郎ファイルをWordに変換しなければならなくなった。 過去に一度やったのだが、そのときは「もうこんなことは二度とあるまい」と思ってメモも何も残さなかった。
二度あることは三度ある、というわけで今回はメモを残す。

前提として、作業を行うPCに一太郎とWordがインストールされている必要がある
手元にあった古い一太郎はdocにしか変換できなかったので、一太郎(jtd)→旧Word(doc)→Word(docx)という手順で変換する。

jtd → doc

一太郎を起動して Ctrl + ] で、「一太郎プロンプト」を起動する。以下のコマンドを入れてEnterで一括変換できる。

fl("C:\input_folder\*.jtd", "C:\output_folder\*.doc")

注意点

  • 階層になったフォルダを再帰的に変換することはできないので、変換したいファイルはフォルダの同階層にまとめて入れておく必要がある。
  • ファイル名に拡張子以外の「.(ピリオド)」があると変換が途中で止まる。
    「総会資料.20220101.jtd」みたいなファイルは変換できない。

↓エラーになるファイル名を探す自分用phpコード

$ls = glob('ichitaro/files/*');
foreach ($ls as $key => $value) {
    $noext = substr($value, 0, strrpos($value, '.'));
    if (strpos($noext, '.') !== false) {
        echo $value . PHP_EOL;
    }
}
一太郎の文書をWord形式に一括変換する方法~一太郎プロンプト | 元「なんでもエンジニ屋」のダメ日記
一太郎ファイルをWordへ一括変換を行う場合は、一太郎プロンプトを使うと便利です。
一太郎Web:一太郎プロンプト講座

doc → docx

そのものズバリなVBScriptが公開されていたので、ありがたく使わせてもらいました。

【Word】「.doc」を「.docx」に「互換モード」を無効にして一括変換する方法【Windows】
今回はWindowsで「.doc」を「.docx」に「互換モード」を無効にしつつ一括変換する方法のご紹介です。肉玉にゃんこVBScriptを使いますにゃ〜ダウンロードしてダブルクリックするだけで使えますにゃ〜「互換モード」をキープしたままで

↑のページからDLしたもの解凍し、中のVBScriptを、「.docx」形式に変換したい「.doc」ファイルがあるフォルダに入れてダブルクリックでOK。

一応、以下にもVBScriptを転載しておく。
14行目の頭の「'」を取ると、処理が終わったファイルを削除する動作になる

Option Explicit
Dim dc, f, gf, so, wd
Set so = CreateObject("Scripting.FileSystemObject")
Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName))
Set wd = CreateObject("Word.Application")
wd.Application.DisplayAlerts = False
wd.Visible = False
For Each f In gf.Files
If LCase(so.GetExtensionName(f.Name)) = "doc" Then
Set dc = wd.Documents.Open(gf & "\" & f.Name)
dc.SaveAs2 gf & "\" & so.GetBaseName(f.Name) & ".docx", 16, , , , , , , , , , , , , , , 65535
dc.Close
Set dc = Nothing
'so.DeleteFile gf & "\" & f.Name, True
End If
Next
wd.Quit
Set wd = Nothing
Set gf = Nothing
Set so = Nothing
MsgBox("Finished!")
Option Explicit
Dim dc, f, gf, so, wd
Set so = CreateObject("Scripting.FileSystemObject")
Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName))
Set wd = CreateObject("Word.Application")
wd.Application.DisplayAlerts = False
wd.Visible = False
For Each f In gf.Files
If LCase(so.GetExtensionName(f.Name)) = "doc" Then
Set dc = wd.Documents.Open(gf & "\" & f.Name)
dc.SaveAs2 gf & "\" & so.GetBaseName(f.Name) & ".docx", 16
dc.Close
Set dc = Nothing
'so.DeleteFile gf & "\" & f.Name, True
End If
Next
wd.Quit
Set wd = Nothing
Set gf = Nothing
Set so = Nothing
MsgBox("Finished!")

コメント