ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

Bashで無理やりエクセルファイル(xlsx)を編集する(邪道編)

(2024-05-09 初稿)

先日からBashを使って、CSVファイルを操作してエクセルファイル(xlsx)を作成する等の記事をアップした。

実際にやってみると、作成したエクセルファイルにほんの少しだけでも計算式や背景色、罫線等を追加したくなってきた。

この記事では、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"

上記スクリプトに実行権を与えて、実行すると以下のとおりのエクセルファイルができあがる。

できあがったエクセルファイル

多分、このスクリプトが他の方の役に立つことは無いと思うが、エクセルファイルの編集の参考になれば幸いである。

 

関連ページ