20. 情報共有 小ネタ  
この記事は、「LibreOffice Advent Calendar 2014」のために書かれました。

LibreOfficeのファイルは、実はzipファイルです。
zipファイルを展開すると、XMLテキストファイルが取り出せます。
だから、こんなこともできます。

【LibreOfficeを立ち上げずに、文書の文字列置換】
(絶対すでに誰かやってるという定番ネタ)

さっそく作りましょー。

【方針】
1.Linuxで、Bashで作成してみようかな。
2.実行方法は、$ libo_Henkan.sh source_str dest_str in_file out_file     みたいに。
  パラメータは、
   source_str :「変更前文字列」
   dest_str :「変更後文字列」
   in_file :「元ファイル名」
   out_file :「作成先ファイル名」
  の順にします。
  libo_Henkan.sh は、chmod コマンド等を使い実行可能ファイルにしておきます。

【作ってみよう】
------------------------------------------
#!/bin/bash

# 使い方の説明
if [ $# -ne 4 ]; then # パラメータの個数チェック
  echo "Usage :" 1>&2
  echo "$ libo_Henkan.sh source_str dest_str in_file out_file" 1>&2
  exit 1
fi

# 一時ディレクトリを作成
mkdir ./tmp_kiechauyo
unzip $3 -d ./tmp_kiechauyo/

# この階層のファイルを全て変換(ディレクトリの中までは入ってません)
for FILE in ./tmp_kiechauyo/*
do
    echo ${FILE} # ファイル名を出力
    # 文字列置換処理
    perl -p -i.bak -e "s/$1/$2/g" ${FILE}
    rm ${FILE}.bak
done

# 後処理(zip圧縮してリネーム)
cd tmp_kiechauyo
zip afile -r .
cd ..
mv tmp_kiechauyo/afile.zip $4
rm -rf ./tmp_kiechauyo/
------------------------------------------

【テストしてみよう】
./libo_Henkan.sh "IPA P明朝" "VL ゴシック" source.odt dest.odt

source.odt(使用前)



dest.odt(使用後)


このように、入力されている文字列と同時に、フォントも変わっていることが
お分かり頂けますでしょうか。OSを変更した時など、指定のフォントに変換したい時などに
使えるかも知れません。

パラメータの個数が違う場合は、使い方が表示されます。
$ ./libo_Henkan.sh
Usage :
$ libo_Henkan.sh source_str dest_str in_file out_file


LibreOfficeのファイルの拡張子を.zipに変えて、ファイルを展開して調べると
意外にシンプルで、いろいろと工夫できそうです。見にくかったらタグ間に改行を
入れたりしても良いです。
これは、文書もそうですし、LibreOfficeの拡張機能ファイルも同様です。
私はExtensionをネットで拾ってきて、自作の拡張機能の参考にしています。

何しろテキストファイル(XMLファイル)として読むことが出来るので、
子供の頃にラジオや時計を分解しては壊していた私のような人間には
大変に興味をそそられるものがございます。
ちなみに時計は、小学生の時に組み立て直したけど、2度と動かなくなりました。
PCのデータはバックアップが取れるから安心だね!

というわけで、皆様も奥の深いオープンな世界を是非ご堪能下さい。

田中 秀宗(TANAKA Hidemune)
2014/12/05


前へ次へ