Pythonコード
以下のコードを「DiffExcel.py」として保存。
from asyncio.windows_events import NULL
import sys
from numpy import diff
import pandas as pd
import csv
#メイン関数
def main():
#引数の確認
args = sys.argv
if(len(args) < 4):
print("引数:期待値のパス,対象のパス,比較結果の保存先")
return False
#保存パスの取得
path_expect = args[1]
path_result = args[2]
path_diff = args[3]
#エクセルファイルの差分抽出
diff_excel = DiffExcel(path_expect, path_result, path_diff)
if diff_excel:
print("一致")
else:
print("不一致")
return True
#エクセルファイルの差分抽出
#期待値のパス,対象のパス,比較結果の保存先
def DiffExcel(path_expect, path_result, path_diff):
#結果
diff_result = True
diff_list = list()
#excelシートの読み込み
excel_expect = pd.read_excel(path_expect, sheet_name=None, header=None, index_col=None)
excel_result = pd.read_excel(path_result, sheet_name=None, header=None, index_col=None)
#worksheetsの名前比較
if excel_expect.keys() != excel_result.keys():
OutputCsv(path_diff, "Key_False")
return False
#excelシートの比較
for key in excel_expect:
excel_expect[key] = excel_expect[key].fillna(0)
excel_result[key] = excel_result[key].fillna(0)
#データサイズの比較
if excel_expect[key].shape != excel_result[key].shape:
OutputCsv(path_diff, "Shape_False")
return False
#不一致箇所の探索
compare_result = excel_expect[key] != excel_result[key]
row, col = compare_result.shape
for i in range(row):
for j in range(col):
if compare_result.iat[i, j] == True:
diff_result = False
diff_list.append([key, i, j, excel_expect[key].iat[i,j], excel_result[key].iat[i,j]])
#出力用CSVファイル作成
OutputCsv(path_diff, diff_result, diff_list)
return diff_result
#出力用CSVファイル作成
def OutputCsv(path_diff, diff_result, diff_list = NULL):
#書き込み設定でファイルオープン
csv_diff = open(path_diff, 'w')
csv_diff_writer = csv.writer(csv_diff, lineterminator="\n")
#結果の書き込み
csv_diff_writer.writerow(["worksheet", "row", "col", "expect", "result", diff_result])
if diff_list != NULL:
csv_diff_writer.writerows(diff_list)
csv_diff.close()
if __name__ == "__main__":
main()
動作確認
次のような期待値ファイルと比較対象ファイルを用意。




次のコマンドを入力する。
python .\DiffExcel.py 期待値ファイルのパス 比較対象ファイルのパス 比較結果ファイルのパス
python .\DiffExcel.py ~\sample1.xlsx ~\sample2.xlsx ~\result.csv
実行結果は次の通り。
不一致

最後に
2つのExcelファイルが一致しているかそうでないかを判別する必要があり、人力でやるにはめんどくさいのでpythonで適当に作ってみました。
参考程度になれば。
コメント