From f329b47fc30f80cd3dff1ed6fe24e2c9cf6b49bb Mon Sep 17 00:00:00 2001 From: wenchichenginl <127867307+wenchichenginl@users.noreply.github.com> Date: Wed, 6 Mar 2024 14:12:10 -0700 Subject: [PATCH 1/6] First trial for commit. Two test folders are added. --- .../.gitattributes | 9 +++ .../01_version_control_tests.xlsx | Bin 0 -> 15621 bytes .../Diff_Results.txt | 5 ++ .../Excel_diff.py | 57 ++++++++++++++++ .../ReadMe.txt | 38 +++++++++++ .../02_example_file_for_testing.xlsx | Bin 0 -> 15633 bytes .../Excel_regression_testing.py | 63 ++++++++++++++++++ .../Gold_02_example_file_for_testing.xlsx | Bin 0 -> 15655 bytes .../ReadMe.txt | 16 +++++ .../tests | 8 +++ 10 files changed, 196 insertions(+) create mode 100644 tests/reg_self_tests/D_01_Excel_Version_Control_Tool/.gitattributes create mode 100644 tests/reg_self_tests/D_01_Excel_Version_Control_Tool/01_version_control_tests.xlsx create mode 100644 tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Diff_Results.txt create mode 100644 tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Excel_diff.py create mode 100644 tests/reg_self_tests/D_01_Excel_Version_Control_Tool/ReadMe.txt create mode 100644 tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/02_example_file_for_testing.xlsx create mode 100644 tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/Excel_regression_testing.py create mode 100644 tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/Gold_02_example_file_for_testing.xlsx create mode 100644 tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/ReadMe.txt create mode 100644 tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/tests diff --git a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/.gitattributes b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/.gitattributes new file mode 100644 index 0000000000..8a1191605a --- /dev/null +++ b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/.gitattributes @@ -0,0 +1,9 @@ +*.xla diff=exceldiff +*.xlam diff=exceldiff +*.xls diff=exceldiff +*.xlsb diff=exceldiff +*.xlsm diff=exceldiff +*.xlsx diff=exceldiff +*.xlt diff=exceldiff +*.xltm diff=exceldiff +*.xltx diff=exceldiff \ No newline at end of file diff --git a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/01_version_control_tests.xlsx b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/01_version_control_tests.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9444b78232989b457fa3a379e4405cc5605cf28e GIT binary patch literal 15621 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 literal 0 HcmV?d00001 diff --git a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Diff_Results.txt b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Diff_Results.txt new file mode 100644 index 0000000000..9065d67af2 --- /dev/null +++ b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Diff_Results.txt @@ -0,0 +1,5 @@ +[Tabelle1] +Diff_values(row, column, new value, old value, new formula, old formula):(1, 1, None, 1234.0, '', '1234') +Read time: 3.7437427043914795 +Loop Checking Time:0.3932614326477051 +Save time: 0.25067567825317383 diff --git a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Excel_diff.py b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Excel_diff.py new file mode 100644 index 0000000000..6f73c155d0 --- /dev/null +++ b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Excel_diff.py @@ -0,0 +1,57 @@ +import os +import json +import sys +import xlwings as xw +import time +from pathlib import Path # Core Python Module + +def compare_json(file1, file2): + # Your comparison logic here + ## Compare the excel sheets cell by cell + start=time.time() + intial_version= Path.cwd()/file1 + updated_version=Path.cwd()/file2 + with xw.App(visible=False) as app: + initial_wb_2=app.books.open(intial_version) + initial_wb_2.save("new_"+file1) + initial_wb_2.close() + intial_version_2=Path.cwd()/("new_"+file1) + num_sheet=len(app.books.open(updated_version).sheet_names) + f = open("Diff_Results.txt", mode="wt",encoding="utf-8") + read=time.time() + for i in range (num_sheet): + initial_wb=app.books.open(intial_version_2) + initial_ws=initial_wb.sheets(i+1) + updated_wb=app.books.open(updated_version) + updated_ws=updated_wb.sheets(i+1) + f.write("["+str(initial_wb.sheet_names[i])+"]") + f.write("\n") + # print (updated_ws.used_range) + for cell in updated_ws.used_range: + OV= initial_ws.range((cell.row,cell.column)).value + OF= initial_ws.range((cell.row,cell.column)).formula + if cell.formula!= OF or cell.value!= OV: + # Print the differences in a format you prefer + f.write("Diff_values(row, column, new value, old value, new formula, old formula):") + f.write(str((cell.row, cell.column,cell.value, OV, cell.formula,OF))) + f.write("\n") + + start_check=time.time() + end=time.time() + os.remove ("new_"+file1) + f.write("Read time: ") + f.write(str(read-start)) + f.write("\n") + f.write("Loop Checking Time:") + f.write(str(start_check-read)) + f.write("\n") + f.write("Save time: ") + f.write(str(end-start_check)) + f.write("\n") + f.close() + print ("Read",read-start) + print ("Loop",start_check-read) + print ("Save",end-start_check) +if __name__ == "__main__": + #print (sys.argv[1], sys.argv[2]) + compare_json(sys.argv[1], sys.argv[2]) \ No newline at end of file diff --git a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/ReadMe.txt b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/ReadMe.txt new file mode 100644 index 0000000000..eaa1afe516 --- /dev/null +++ b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/ReadMe.txt @@ -0,0 +1,38 @@ + • Prerequisite: + ○ The user would need to create a git repository for the excel files that need to be version-controlled. + • Objectives: + ○ This tool is developed to help the users control the versions of the excel files. The differences of the existing version and the previous version would be documented so that the user can decide whether to modify the content and resume and previous version at any time. + • Steps for generating a git repository + ○ Create a folder and name the folder. For example, "D_01_Excel_Version_Control_Tool" + ○ Put the excel file (in the format of either .xlsx, .xlsb, .xla, .xlam, .xlsm, .xlt, .xltm, .xltx) that needs to be version-controlled under "D_01_Excel_Version_Control_Tool" + ○ Create a git repository under "D_01_Excel_Version_Control_Tool" folder by typing "git init" in the git bash environment + ○ Copy the ".gitattributes" under the "D_01_Excel_Version_Control_Tool" + ○ Add the following text in the "config" file under ".git" folder + [diff "exceldiff"] + command = Python [your path to the excel_diff codes]/Excel_diff.py + ○ Track the file using "git add excel_file_name" to perform version control of the excel file + • Steps for version-control + ○ You must close the excel files before executing the "git diff" + ○ There are two ways for the version control. The first is to compare the excel files in the same branch [1] while the other condition is to compare the excel files in the different branches [2]. Please follow the instructions bellow to diff the two excel files: + § [1] In the same branch + □ First track the file ("git add filename") + □ Git Commit the tracking ("git commit -m "notes…."") + □ Make changes and save the excel book + □ Run "git status" to make sure some changes has been made + □ Run "git diff" and wait until it finished + □ Check the "Diff_Results.txt" in the same folder + § [2] In the different branches + □ Create a new branch using "git branch new" + □ Switch to the "new" branch from "master" branch + □ Open an excel to make changes. Then save and close the file. + □ Use "git add "file name"" to accept the changes of the file + □ Commit the changes using "git commit -m "adding text over here" + □ Use "git diff master…HEAD" (meaning to compare the file in the new branch to the file in the master branch) + □ Option to merge to the master branch + ® Git checkout master + ® Git merge new + ® *note that after following this, the git diff will be empty. + ○ The outputs of the comparisons of the "git diff" will show the difference between the two different versions of the excel if you made some changes. You will need to review the changes row by row and see if you agree. If yes, you would need to type "git add excel_file_name". Then, type "git commit -m "text to commit"". The committed text would be saved in the log file under git repository. + ○ If you do not agree with the changes, you would need to type "git restore excel_file_name" to remove the changes and back to the original version. + + diff --git a/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/02_example_file_for_testing.xlsx b/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/02_example_file_for_testing.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a8b15e11691e3edcc9897b92f069a7131854f7f3 GIT binary patch literal 15633 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 literal 0 HcmV?d00001 diff --git a/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/Excel_regression_testing.py b/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/Excel_regression_testing.py new file mode 100644 index 0000000000..376f82f8c4 --- /dev/null +++ b/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/Excel_regression_testing.py @@ -0,0 +1,63 @@ +# The Interface between Python and Excel +## Warning: Please close the tool before running this code +import os +import json +import numpy as np +import xlwings as xw +import time +import sys +import argparse +from pathlib import Path # Core Python MOdule +import pandas as pd + +# Read the file name of the excel from the tests file +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="pass the excel file name to python script") + # Inputs from the user + parser.add_argument("xlsb_python", help="xlsb_python") + args = parser.parse_args() + file_name=args.xlsb_python + wr=xw.Book(r'./'+ file_name) + wr2=xw.Book(r'./Gold_'+ file_name) + +# Read the inputs and outputs from the gold file +sht_inp2=wr2.sheets['Inputs'] +input_old=pd.DataFrame(sht_inp2.range('Inputs_table').value,columns=['Parameter', 'Unit', 'value']) +#print (np.array(input_old.iloc[:,2])) +sht_out2=wr2.sheets['Outputs'] +output_old=pd.DataFrame(sht_out2.range('Outputs_table').value,columns=['Parameter', 'Unit', 'value']) + +# Write the inputs to the existing file +sht_inp=wr.sheets['Inputs'] +# store the inputs to be resoted +input_restore=sht_inp.range('Inputs_table').value +input_new=pd.DataFrame(sht_inp.range('Inputs_table').value, columns=['Parameter', 'Unit', 'value']) +sht_inp.range('Inputs_table').value=sht_inp2.range('Inputs_table').value +sht_out=wr.sheets['Outputs'] +output_new=pd.DataFrame(sht_out.range('Outputs_table').value,columns=['Parameter', 'Unit', 'value']) +# Pass for T while Failure for F +T=0 +F=0 +for i in range (len(output_new.iloc[:,2])): + #(check if error is less than 0.1% for each output) + if abs(output_new.iloc[i,2]-output_old.iloc[i,2])/output_old.iloc[i,2]<0.001: + T=T+1 + print ('Test passed for calculating'+str(output_new.iloc[i,0])) + else: + F=F+1 + print ('Test failed for calculating'+str(output_new.iloc[i,0])) + +sht_inp.range('Inputs_table').value=input_restore + +if F==0: + wr.save() + wr.close() + wr2.close() + xw.App().quit() + sys.exit(0) +else: + wr.save() + wr.close() + wr2.close() + xw.App().quit() + sys.exit(1) diff --git a/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/Gold_02_example_file_for_testing.xlsx b/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/Gold_02_example_file_for_testing.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2501e81c232825b2a163c906cc7e1b36c9d15273 GIT binary patch literal 15655 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 T=08F=WPmM@+{oql Date: Mon, 11 Mar 2024 16:31:06 -0600 Subject: [PATCH 2/6] Cleanup whitespace. --- .../D_01_Excel_Version_Control_Tool/Excel_diff.py | 6 +++--- .../Excel_regression_testing.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Excel_diff.py b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Excel_diff.py index 6f73c155d0..5781f55f7f 100644 --- a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Excel_diff.py +++ b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Excel_diff.py @@ -30,12 +30,12 @@ def compare_json(file1, file2): for cell in updated_ws.used_range: OV= initial_ws.range((cell.row,cell.column)).value OF= initial_ws.range((cell.row,cell.column)).formula - if cell.formula!= OF or cell.value!= OV: + if cell.formula!= OF or cell.value!= OV: # Print the differences in a format you prefer f.write("Diff_values(row, column, new value, old value, new formula, old formula):") f.write(str((cell.row, cell.column,cell.value, OV, cell.formula,OF))) f.write("\n") - + start_check=time.time() end=time.time() os.remove ("new_"+file1) @@ -54,4 +54,4 @@ def compare_json(file1, file2): print ("Save",end-start_check) if __name__ == "__main__": #print (sys.argv[1], sys.argv[2]) - compare_json(sys.argv[1], sys.argv[2]) \ No newline at end of file + compare_json(sys.argv[1], sys.argv[2]) diff --git a/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/Excel_regression_testing.py b/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/Excel_regression_testing.py index 376f82f8c4..f34a79b4b8 100644 --- a/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/Excel_regression_testing.py +++ b/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/Excel_regression_testing.py @@ -1,4 +1,4 @@ -# The Interface between Python and Excel +# The Interface between Python and Excel ## Warning: Please close the tool before running this code import os import json From da9525594cbfdeefa57dad44612e17bb0d66712c Mon Sep 17 00:00:00 2001 From: wenchichenginl <127867307+wenchichenginl@users.noreply.github.com> Date: Tue, 12 Mar 2024 09:27:33 -0600 Subject: [PATCH 3/6] add required_libraries='xlwings' in the test file --- .../D_02_Excel_Python_Regression_Testing_Tool/tests | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/tests b/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/tests index d66d9b98e1..344a8f549a 100644 --- a/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/tests +++ b/tests/reg_self_tests/D_02_Excel_Python_Regression_Testing_Tool/tests @@ -1,6 +1,7 @@ [Tests] [./D_02_Excel_Python_Regression_Testing_Tool] - type = RavenPython + required_libraries='xlwings' + type = RavenPython input = 'Excel_regression_testing.py 02_example_file_for_testing.xlsx' [../] [] From 913b1720a2040fa456e2a9ddea64ac0df6130df8 Mon Sep 17 00:00:00 2001 From: wenchichenginl <127867307+wenchichenginl@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:12:26 -0600 Subject: [PATCH 4/6] Updates for the Excel Version Control Tool 1. Change the location of the python file (Excel_diff.py) to the ./Scripts 2.Copy the necessary path to the ".gitattributes" and "config" file and remove the .gitattributes under "D_01_Excel_Version_Control_Tool" 3. Tested the version control tool under raven git repository. 4. Change the format of the Excel_diff.py to meet the requirements --- .gitattributes | 10 +++ Diff_Results.txt | 13 ++++ scripts/Excel_diff.py | 65 ++++++++++++++++++ .../.gitattributes | 9 --- .../01_version_control_tests.xlsx | Bin 15621 -> 15604 bytes .../Diff_Results.txt | 18 +++-- .../Excel_diff.py | 57 --------------- .../ReadMe.txt | 23 ++----- 8 files changed, 107 insertions(+), 88 deletions(-) create mode 100644 Diff_Results.txt create mode 100644 scripts/Excel_diff.py delete mode 100644 tests/reg_self_tests/D_01_Excel_Version_Control_Tool/.gitattributes delete mode 100644 tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Excel_diff.py diff --git a/.gitattributes b/.gitattributes index 28f246231b..999a31b769 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,3 +2,13 @@ include/contrib/* linguist-vendored src/contrib/* linguist-vendored crow/contrib/* linguist-vendored framework/contrib/* linguist-vendored + +*.xla diff=exceldiff +*.xlam diff=exceldiff +*.xls diff=exceldiff +*.xlsb diff=exceldiff +*.xlsm diff=exceldiff +*.xlsx diff=exceldiff +*.xlt diff=exceldiff +*.xltm diff=exceldiff +*.xltx diff=exceldiff diff --git a/Diff_Results.txt b/Diff_Results.txt new file mode 100644 index 0000000000..b2e6154564 --- /dev/null +++ b/Diff_Results.txt @@ -0,0 +1,13 @@ +[Inputs] +Diff_values(row, column, new value, old value, new formula, old formula):(2, 3, Decimal('400000000'), Decimal('100000000'), '400000000', '100000000') +[Simluation_Tool_Example] +Diff_values(row, column, new value, old value, new formula, old formula):(2, 2, 400000000.0, 100000000.0, '=Inputs!C2', '=Inputs!C2') +Diff_values(row, column, new value, old value, new formula, old formula):(2, 5, Decimal('-400000000'), Decimal('-100000000'), '=C2-B2', '=C2-B2') +Diff_values(row, column, new value, old value, new formula, old formula):(23, 2, Decimal('2230416199.7481'), Decimal('1930416199.7481'), '=B2+NPV(Inputs!$C$8,B3:B22)', '=B2+NPV(Inputs!$C$8,B3:B22)') +Diff_values(row, column, new value, old value, new formula, old formula):(24, 2, Decimal('1.6615'), Decimal('1.438'), '=B23/D23', '=B23/D23') +[Outputs] +Diff_values(row, column, new value, old value, new formula, old formula):(3, 3, Decimal('2230416199.7481'), Decimal('1930416199.7481'), '=Simluation_Tool_Example!B23', '=Simluation_Tool_Example!B23') +Diff_values(row, column, new value, old value, new formula, old formula):(4, 3, Decimal('1.6615'), Decimal('1.438'), '=Simluation_Tool_Example!B24', '=Simluation_Tool_Example!B24') +Read time: 4.3417253494262695 +Loop Checking Time:1.5703620910644531 +Save time: 0.2653176784515381 diff --git a/scripts/Excel_diff.py b/scripts/Excel_diff.py new file mode 100644 index 0000000000..16eda96504 --- /dev/null +++ b/scripts/Excel_diff.py @@ -0,0 +1,65 @@ +import os +import json +import sys +import xlwings as xw +import time +from pathlib import Path # Core Python Module + +def compare_json(file1, file2): + """ + Compares two excel files sheet-by-sheet and row-by-row. + @ In, file1, the initial version of the excel file + @ In, file2, the updated version of the excel file + @ Out, (Read, Loop, Save) time for running the diff + @ Out, a text file would be generated through this process + """ + ## Compare the excel sheets cell by cell + start=time.time() + intial_version= Path.cwd()/file1 + updated_version=Path.cwd()/file2 + file_dir= os.path.dirname(file1) + file_name=os.path.basename(file1) + with xw.App(visible=False) as app: + initial_wb_2=app.books.open(intial_version) + initial_wb_2.save(file_dir+"/new_"+file_name) + initial_wb_2.close() + intial_version_2=Path.cwd()/(file_dir+"/new_"+file_name) + num_sheet=len(app.books.open(updated_version).sheet_names) + f = open(file_dir+"/Diff_Results.txt", mode="wt",encoding="utf-8") + read=time.time() + for i in range (num_sheet): + initial_wb=app.books.open(intial_version_2) + initial_ws=initial_wb.sheets(i+1) + updated_wb=app.books.open(updated_version) + updated_ws=updated_wb.sheets(i+1) + f.write("["+str(initial_wb.sheet_names[i])+"]") + f.write("\n") + # print (updated_ws.used_range) + for cell in updated_ws.used_range: + OV= initial_ws.range((cell.row,cell.column)).value + OF= initial_ws.range((cell.row,cell.column)).formula + if cell.formula!= OF or cell.value!= OV: + # Print the differences in a format you prefer + f.write("Diff_values(row, column, new value, old value, new formula, old formula):") + f.write(str((cell.row, cell.column,cell.value, OV, cell.formula,OF))) + f.write("\n") + start_check=time.time() + end=time.time() + os.remove (file_dir+"/new_"+file_name) + f.write("Read time: ") + f.write(str(read-start)) + f.write("\n") + f.write("Loop Checking Time:") + f.write(str(start_check-read)) + f.write("\n") + f.write("Save time: ") + f.write(str(end-start_check)) + f.write("\n") + f.close() + print ("Read",read-start) + print ("Loop",start_check-read) + print ("Save",end-start_check) + +if __name__ == "__main__": + #print (sys.argv[1], sys.argv[2]) + compare_json(sys.argv[1], sys.argv[2]) diff --git a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/.gitattributes b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/.gitattributes deleted file mode 100644 index 8a1191605a..0000000000 --- a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/.gitattributes +++ /dev/null @@ -1,9 +0,0 @@ -*.xla diff=exceldiff -*.xlam diff=exceldiff -*.xls diff=exceldiff -*.xlsb diff=exceldiff -*.xlsm diff=exceldiff -*.xlsx diff=exceldiff -*.xlt diff=exceldiff -*.xltm diff=exceldiff -*.xltx diff=exceldiff \ No newline at end of file diff --git a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/01_version_control_tests.xlsx b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/01_version_control_tests.xlsx index 9444b78232989b457fa3a379e4405cc5605cf28e..6337b53ae9667a589fc1b999fe103525aa9f6511 100644 GIT binary patch delta 6708 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 diff --git a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Diff_Results.txt b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Diff_Results.txt index 9065d67af2..cf1f168fd1 100644 --- a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Diff_Results.txt +++ b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Diff_Results.txt @@ -1,5 +1,13 @@ -[Tabelle1] -Diff_values(row, column, new value, old value, new formula, old formula):(1, 1, None, 1234.0, '', '1234') -Read time: 3.7437427043914795 -Loop Checking Time:0.3932614326477051 -Save time: 0.25067567825317383 +[Inputs] +Diff_values(row, column, new value, old value, new formula, old formula):(2, 3, Decimal('400000000'), Decimal('100000000'), '400000000', '100000000') +[Simluation_Tool_Example] +Diff_values(row, column, new value, old value, new formula, old formula):(2, 2, 400000000.0, 100000000.0, '=Inputs!C2', '=Inputs!C2') +Diff_values(row, column, new value, old value, new formula, old formula):(2, 5, Decimal('-400000000'), Decimal('-100000000'), '=C2-B2', '=C2-B2') +Diff_values(row, column, new value, old value, new formula, old formula):(23, 2, Decimal('2230416199.7481'), Decimal('1930416199.7481'), '=B2+NPV(Inputs!$C$8,B3:B22)', '=B2+NPV(Inputs!$C$8,B3:B22)') +Diff_values(row, column, new value, old value, new formula, old formula):(24, 2, Decimal('1.6615'), Decimal('1.438'), '=B23/D23', '=B23/D23') +[Outputs] +Diff_values(row, column, new value, old value, new formula, old formula):(3, 3, Decimal('2230416199.7481'), Decimal('1930416199.7481'), '=Simluation_Tool_Example!B23', '=Simluation_Tool_Example!B23') +Diff_values(row, column, new value, old value, new formula, old formula):(4, 3, Decimal('1.6615'), Decimal('1.438'), '=Simluation_Tool_Example!B24', '=Simluation_Tool_Example!B24') +Read time: 4.793208599090576 +Loop Checking Time:1.8191144466400146 +Save time: 0.2797675132751465 diff --git a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Excel_diff.py b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Excel_diff.py deleted file mode 100644 index 5781f55f7f..0000000000 --- a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/Excel_diff.py +++ /dev/null @@ -1,57 +0,0 @@ -import os -import json -import sys -import xlwings as xw -import time -from pathlib import Path # Core Python Module - -def compare_json(file1, file2): - # Your comparison logic here - ## Compare the excel sheets cell by cell - start=time.time() - intial_version= Path.cwd()/file1 - updated_version=Path.cwd()/file2 - with xw.App(visible=False) as app: - initial_wb_2=app.books.open(intial_version) - initial_wb_2.save("new_"+file1) - initial_wb_2.close() - intial_version_2=Path.cwd()/("new_"+file1) - num_sheet=len(app.books.open(updated_version).sheet_names) - f = open("Diff_Results.txt", mode="wt",encoding="utf-8") - read=time.time() - for i in range (num_sheet): - initial_wb=app.books.open(intial_version_2) - initial_ws=initial_wb.sheets(i+1) - updated_wb=app.books.open(updated_version) - updated_ws=updated_wb.sheets(i+1) - f.write("["+str(initial_wb.sheet_names[i])+"]") - f.write("\n") - # print (updated_ws.used_range) - for cell in updated_ws.used_range: - OV= initial_ws.range((cell.row,cell.column)).value - OF= initial_ws.range((cell.row,cell.column)).formula - if cell.formula!= OF or cell.value!= OV: - # Print the differences in a format you prefer - f.write("Diff_values(row, column, new value, old value, new formula, old formula):") - f.write(str((cell.row, cell.column,cell.value, OV, cell.formula,OF))) - f.write("\n") - - start_check=time.time() - end=time.time() - os.remove ("new_"+file1) - f.write("Read time: ") - f.write(str(read-start)) - f.write("\n") - f.write("Loop Checking Time:") - f.write(str(start_check-read)) - f.write("\n") - f.write("Save time: ") - f.write(str(end-start_check)) - f.write("\n") - f.close() - print ("Read",read-start) - print ("Loop",start_check-read) - print ("Save",end-start_check) -if __name__ == "__main__": - #print (sys.argv[1], sys.argv[2]) - compare_json(sys.argv[1], sys.argv[2]) diff --git a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/ReadMe.txt b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/ReadMe.txt index eaa1afe516..d5a4105e42 100644 --- a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/ReadMe.txt +++ b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/ReadMe.txt @@ -1,25 +1,16 @@ • Prerequisite: - ○ The user would need to create a git repository for the excel files that need to be version-controlled. + ○ The user would need to install raven and put the excel file (in the format of either .xlsx, .xlsb, .xla, .xlam, .xlsm, .xlt, .xltm, .xltx) that need to be version-controlled under \projects\raven\tests\reg_self_tests\D_01_Excel_Version_Control_Tool. + ○ Save and commit and changes for the tool. • Objectives: ○ This tool is developed to help the users control the versions of the excel files. The differences of the existing version and the previous version would be documented so that the user can decide whether to modify the content and resume and previous version at any time. - • Steps for generating a git repository - ○ Create a folder and name the folder. For example, "D_01_Excel_Version_Control_Tool" - ○ Put the excel file (in the format of either .xlsx, .xlsb, .xla, .xlam, .xlsm, .xlt, .xltm, .xltx) that needs to be version-controlled under "D_01_Excel_Version_Control_Tool" - ○ Create a git repository under "D_01_Excel_Version_Control_Tool" folder by typing "git init" in the git bash environment - ○ Copy the ".gitattributes" under the "D_01_Excel_Version_Control_Tool" - ○ Add the following text in the "config" file under ".git" folder - [diff "exceldiff"] - command = Python [your path to the excel_diff codes]/Excel_diff.py ○ Track the file using "git add excel_file_name" to perform version control of the excel file • Steps for version-control - ○ You must close the excel files before executing the "git diff" + ○ You must close the excel file before executing the "git diff" ○ There are two ways for the version control. The first is to compare the excel files in the same branch [1] while the other condition is to compare the excel files in the different branches [2]. Please follow the instructions bellow to diff the two excel files: § [1] In the same branch - □ First track the file ("git add filename") - □ Git Commit the tracking ("git commit -m "notes…."") □ Make changes and save the excel book □ Run "git status" to make sure some changes has been made - □ Run "git diff" and wait until it finished + □ Run "git diff " and wait until it finished □ Check the "Diff_Results.txt" in the same folder § [2] In the different branches □ Create a new branch using "git branch new" @@ -32,7 +23,5 @@ ® Git checkout master ® Git merge new ® *note that after following this, the git diff will be empty. - ○ The outputs of the comparisons of the "git diff" will show the difference between the two different versions of the excel if you made some changes. You will need to review the changes row by row and see if you agree. If yes, you would need to type "git add excel_file_name". Then, type "git commit -m "text to commit"". The committed text would be saved in the log file under git repository. - ○ If you do not agree with the changes, you would need to type "git restore excel_file_name" to remove the changes and back to the original version. - - + ○ The outputs (Diff_Results.txt) of the comparisons of the "git diff" will show the difference between the two different versions of the excel if you made some changes. You will need to review the changes row by row and see if you agree. If yes, you would need to type "git add excel_file_name". Then, type "git commit -m "text to commit"". The committed text would be saved in the log file under git repository. +If you do not agree with the changes, you would need to type "git restore excel_file_name" to remove the changes and back to the original version. \ No newline at end of file From 6f2eae9246b156d52f564c4380fc541f1d7eb06e Mon Sep 17 00:00:00 2001 From: wenchichenginl <127867307+wenchichenginl@users.noreply.github.com> Date: Mon, 18 Mar 2024 15:25:03 -0600 Subject: [PATCH 5/6] Incorporate comments from Paul on 3/15/2024 Address all the comments from Paul for "A few more minor changes". All the codes are tested before committing it through git. --- scripts/Excel_diff.py | 87 +++++++++--------- .../01_version_control_tests.xlsx | Bin 15604 -> 15609 bytes .../{Diff_Results.txt => DiffResults.txt} | 17 ++-- .../02_example_file_for_testing.xlsx | Bin 15633 -> 15635 bytes .../Excel_regression_testing.py | 60 ++++++------ 5 files changed, 77 insertions(+), 87 deletions(-) rename tests/reg_self_tests/D_01_Excel_Version_Control_Tool/{Diff_Results.txt => DiffResults.txt} (56%) diff --git a/scripts/Excel_diff.py b/scripts/Excel_diff.py index 16eda96504..b5212b814b 100644 --- a/scripts/Excel_diff.py +++ b/scripts/Excel_diff.py @@ -5,61 +5,60 @@ import time from pathlib import Path # Core Python Module -def compare_json(file1, file2): +def compareExcelfiles(file1, file2): """ Compares two excel files sheet-by-sheet and row-by-row. - @ In, file1, the initial version of the excel file - @ In, file2, the updated version of the excel file - @ Out, (Read, Loop, Save) time for running the diff - @ Out, a text file would be generated through this process + @ In, file1, str, filename of the initial excel file + @ In, file2, str, filename of the updated excel file + @ Out, None """ ## Compare the excel sheets cell by cell - start=time.time() - intial_version= Path.cwd()/file1 - updated_version=Path.cwd()/file2 - file_dir= os.path.dirname(file1) - file_name=os.path.basename(file1) + # the time checks can be enable by the developers + #start=time.time() + intialVersion= Path.cwd()/file1 + updatedVersion=Path.cwd()/file2 + fileDir= os.path.dirname(file1) + fileName=os.path.basename(file1) with xw.App(visible=False) as app: - initial_wb_2=app.books.open(intial_version) - initial_wb_2.save(file_dir+"/new_"+file_name) - initial_wb_2.close() - intial_version_2=Path.cwd()/(file_dir+"/new_"+file_name) - num_sheet=len(app.books.open(updated_version).sheet_names) - f = open(file_dir+"/Diff_Results.txt", mode="wt",encoding="utf-8") - read=time.time() - for i in range (num_sheet): - initial_wb=app.books.open(intial_version_2) - initial_ws=initial_wb.sheets(i+1) - updated_wb=app.books.open(updated_version) - updated_ws=updated_wb.sheets(i+1) - f.write("["+str(initial_wb.sheet_names[i])+"]") + initialWb2=app.books.open(intialVersion) + initialWb2.save(fileDir+"/new_"+fileName) + initialWb2.close() + intialVersion2=Path.cwd()/(fileDir+"/new_"+fileName) + numSheet=len(app.books.open(updatedVersion).sheet_names) + f = open(fileDir+"/DiffResults.txt", mode="wt",encoding="utf-8") + #read=time.time() + for i in range (numSheet): + initialWb=app.books.open(intialVersion2) + initialWs=initialWb.sheets(i+1) + updatedWb=app.books.open(updatedVersion) + updatedWs=updatedWb.sheets(i+1) + f.write("["+str(initialWb.sheet_names[i])+"]") f.write("\n") # print (updated_ws.used_range) - for cell in updated_ws.used_range: - OV= initial_ws.range((cell.row,cell.column)).value - OF= initial_ws.range((cell.row,cell.column)).formula + for cell in updatedWs.used_range: + OV= initialWs.range((cell.row,cell.column)).value + OF= initialWs.range((cell.row,cell.column)).formula if cell.formula!= OF or cell.value!= OV: # Print the differences in a format you prefer f.write("Diff_values(row, column, new value, old value, new formula, old formula):") f.write(str((cell.row, cell.column,cell.value, OV, cell.formula,OF))) f.write("\n") - start_check=time.time() - end=time.time() - os.remove (file_dir+"/new_"+file_name) - f.write("Read time: ") - f.write(str(read-start)) - f.write("\n") - f.write("Loop Checking Time:") - f.write(str(start_check-read)) - f.write("\n") - f.write("Save time: ") - f.write(str(end-start_check)) - f.write("\n") + #startCheck=time.time() + #end=time.time() + # f.write("Read time: ") + # f.write(str(read-start)) + # f.write("\n") + # f.write("Loop Checking Time:") + # f.write(str(startCheck-read)) + # f.write("\n") + # f.write("Save time: ") + # f.write(str(end-startCheck)) + # f.write("\n") f.close() - print ("Read",read-start) - print ("Loop",start_check-read) - print ("Save",end-start_check) - + # print ("Read",read-start) + # print ("Loop",startCheck-read) + # print ("Save",end-startCheck) + os.remove (fileDir+"/new_"+fileName) if __name__ == "__main__": - #print (sys.argv[1], sys.argv[2]) - compare_json(sys.argv[1], sys.argv[2]) + #print (sys.argv[1], sys.argv[2]) + compareExcelfiles(sys.argv[1], sys.argv[2]) diff --git a/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/01_version_control_tests.xlsx b/tests/reg_self_tests/D_01_Excel_Version_Control_Tool/01_version_control_tests.xlsx index 6337b53ae9667a589fc1b999fe103525aa9f6511..219fb0ab6ad2b496d944b5392dbd3c89fbab422b 100644 GIT binary patch delta 3182 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 T->Tdos6(!+@RFn`{)PSz#V*20 delta 4618 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 dF#!OIf6u=g@uNy* Date: Mon, 18 Mar 2024 15:48:52 -0600 Subject: [PATCH 6/6] Remove the if logic in the excel.diff file. Forgot to save the python file. This is the updated version after incorporating all the changes. --- scripts/Excel_diff.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/Excel_diff.py b/scripts/Excel_diff.py index b5212b814b..e62bfc86b8 100644 --- a/scripts/Excel_diff.py +++ b/scripts/Excel_diff.py @@ -59,6 +59,4 @@ def compareExcelfiles(file1, file2): # print ("Loop",startCheck-read) # print ("Save",end-startCheck) os.remove (fileDir+"/new_"+fileName) -if __name__ == "__main__": - #print (sys.argv[1], sys.argv[2]) - compareExcelfiles(sys.argv[1], sys.argv[2]) +compareExcelfiles(sys.argv[1], sys.argv[2])