カテゴリー
Linuxでシェルコマンドからエクセルファイル(XSLX)を新規作成する方法〜「libreoffice」と「ssconvert」
※ 当ページには【広告/PR】を含む場合があります。
2023/06/30
Linuxに「LibreOffice」がインストールされている人向け〜「libreoffice」コマンドを使う
$ libreoffice --version
LibreOffice 7.0.4.2 00(Build:2)
「libreoffice」
csv
xlsx
$ cat <<EOF > example.csv
名前,性別,年齢,住所
ピヨ田 モブ雄,男,35,地球
ベモ山 デン実,女,43,火星
EOF
$ libreoffice --headless --convert-to xlsx --infilter=xlsx:44,34,76 example.csv
$ xlsx2csv example.xlsx
#👇出力
名前,性別,年齢,住所
ピヨ田 モブ雄,男,35,地球
ベモ山 デン実,女,43,火星
UTF-8
libreoffice
--infilter
libreoffice
--infilter
カンマ区切りを「,」
テキスト区切りを「"」
入力の文字エンコーディングを「UTF-8」
python/pipが使えるオフィスツール開発者向け〜「unoconvert」コマンドを使う
$ pip install unoserver
#もしくは
$ python -m pip install unoserver
$ unoconvert -h
Traceback (most recent call last):
File "/*****/versions/3.8.6/lib/python3.8/site-packages/unoserver/converter.py", line 2, in <module>
import uno
ModuleNotFoundError: No module named 'uno'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/*****/versions/3.8.6/bin/unoconvert", line 5, in <module>
from unoserver.converter import main
File "/*****/versions/3.8.6/lib/python3.8/site-packages/unoserver/converter.py", line 4, in <module>
raise ImportError(
ImportError: Could not find the 'uno' library. This package must be installed with a Python installation that has a 'uno' library. This typically means you should install it with the same Python executable as your Libreoffice installation uses.
「Libreofficeがインストールされていないpythonでは動かない」
uno.py
$ wget -O find_uno.py https://gist.githubusercontent.com/regebro/036da022dc7d5241a0ee97efdf1458eb/raw/find_uno.py
$ python find_uno.py
Trying python found at /usr/bin/python3... Success!
Found 1 Pythons with Libreoffice libraries:
/usr/bin/python3
/usr/bin/python3
/usr/bin/python3
「pyenv」
unoconvert
unoconvert
libreoffice
「LibreOffice」をわざわざインストールしたくない人向け〜Gnumericの「ssconvert」を使う
libreoffice
$ sudo apt install gnumeric
$ ssconvert --version
ssconvert バージョン '1.12.48'
データ格納パス := '/usr/share/gnumeric/1.12.48'
ライブラリ格納パス := '/usr/lib/gnumeric/1.12.48'
$ ssconvert example.csv example.xlsx
$ xlsx2csv example.xlsx
名前,性別,年齢,住所
ピヨ田 モブ雄,男,35,地球
ベモ山 デン実,女,43,火星
$ ssconvert <(echo "") example2.xlsx
$ xlsx2csv example2.xlsx
#👇出力(何もない)
$ ssconvert <(cat <<EOF
名前,性別,年齢,住所
ピヨ田 モブ雄,男,35,地球
ベモ山 デン実,女,43,火星
EOF
) example3.xlsx
$ xlsx2csv example3.xlsx
#👇出力
名前,性別,年齢,住所
ピヨ田 モブ雄,男,35,地球
ベモ山 デン実,女,43,火星
まとめ
+ LibreOfficeがインストールされていればそのまま「libreoffice」コマンドが使える
+ LibreOfficeがなくても「ssconvert」でXLSXへ変換できる
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー