(2024-05-09 初稿)
先日からBashを使って、CSVファイルを操作してエクセルファイル(xlsx)を作成する等の記事をアップした。
-
LibreOfficeを使ってコマンドラインでCSVファイルをエクセルファイル(xlsx)ファイルに変換する - ひゃまだのblog
-
Bashで楽天証券からダウンロードした保有商品一覧ファイル(CSV)を加工してエクセルファイル(xlsx)にする - ひゃまだのblog
実際にやってみると、作成したエクセルファイルにほんの少しだけでも計算式や背景色、罫線等を追加したくなってきた。
この記事では、bashで無理やりエクセルファイルを編集する方法を記述する。
なお、調べた範囲ではBashで直接エクセルファイルを操作する方法は無いとのことなので、ここではbashのヒヤドキュメントを使ってpythonで操作するので、タイトルにあるとおりあくまでも邪道な方法である。
と言うことで、pythonで編集する方法の参考にしたサイトは以下の2つ。多謝。
この記事では、そもそも「pythonのファイルを作成する程までの編集はしない。」、「bashで他のコマンド等も利用していて、少しだけエクセルファイルを加工する。」等の場合のみ有効だと思われる。
それでは、早速スクリプトを示す。ちなみに、このスクリプトでは少しだけ汎用性を高めるために、pythonスクリプトをbashの関数として実装してみた。
なお、ここでは既に「example.xlsx」というエクセルファイルがあるものと仮定しているので、無い場合は作成してから実行して欲しい。
#!/usr/bin/bash # Modify Excel(xlsx) file py-func() { # Arguments Excelfile=$1 A1=$2 # Pythonスクリプトを一時ファイルに書き出す cat << EOF > temp.py import openpyxl # 配置 背景色 from openpyxl.styles import Alignment, PatternFill # 罫線 from openpyxl.styles.borders import Border, Side # Excelファイルのパス excel_file_path = "$Excelfile" # Excelファイルを開く wb = openpyxl.load_workbook(excel_file_path) # シートを選択(デフォルトでは最初のシートを選択) sheet = wb.active # 例: A1セルに値を設定する sheet['A1'] = "$A1" # 配置 sheet['A1'].alignment = Alignment(horizontal='center', vertical='center') # 背景色 sheet['A1'].fill = PatternFill(fgColor='ffff4d', bgColor='ffff4d', fill_type='solid') sheet['B1'] = 1 # 数値 sheet['B2'] = 2 sheet['B3'] = '=SUM(B1:b2)' # 計算式 # 線の種類 細実線 黒色 side = Side(style='thin', color='000000') # 外枠線 border = Border(top=side, bottom=side, left=side, right=side) sheet['D1'] = "文字列" # 文字列 sheet['D2'] = 5 sheet['D3'] = 6 sheet['D1'].border = border # 外枠線 sheet['D2'].border = border sheet['D3'].border = border # Excelファイルを保存 wb.save(excel_file_path) EOF # Pythonスクリプトを実行 python3 temp.py # 一時ファイルを削除 rm temp.py } py-func "example.xlsx" "test text"
上記スクリプトに実行権を与えて、実行すると以下のとおりのエクセルファイルができあがる。
多分、このスクリプトが他の方の役に立つことは無いと思うが、エクセルファイルの編集の参考になれば幸いである。