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で適当に作ってみました。
参考程度になれば。
コメント