Excelファイルをテキストファイルに変換します。cliでdiffすることが目的です。
diff目的なのでテキストファイルからExcelの内容を復元できる必要はありません。CSVだとかにしてしまうと、1行が長くなってdiffしてもコマンドラインでの差分が非常に見づらいので、セルごとに1行にしたいです。
都合の良さそうなツールがすぐに見つからず、スクリプト書いたほうが早かったので書きました。
Pythonでopenpyxlというライブラリを使います。
$ pip install openpyxl
ソースコードはこれだけです。
import sys
import openpyxl
filepath = sys.argv[1]
sheetname = ""
if len(sys.argv) > 2:
sheetname = sys.argv[2]
wb = openpyxl.load_workbook(filepath)
for ws in wb:
if sheetname != "" and ws.title != sheetname:
continue
print(f"sheet:{ws.title}")
for row in ws:
print(" row")
for cell in row:
if cell.value == None:
print("")
else:
print(f" {cell.value}")
xls2txt.py
のような名前で保存しておけば、以下でExcelファイルに含まれる全シートの内容がテキストで出力されます。
※セルに入っている値または数式が出力されるのみですので、書式やコメントなどは考慮外です。
$ python xls2txt.py foo.xls
特定のシートのみを見たければシート名を指定します。
$ python xls2txt.py foo.xls Sheet1
diffを見るにはたとえば次のような感じです。
$ diff -U5 <(python xls2txt.py foo.xls Sheet1) <(python xls2txt.py bar.xls Sheet1) | less
diffでの差分を見やすくしたければこちらを参照。
diffコマンドをカラー表示にして見やすくする方法