Guest User

Untitled

a guest
Mar 29th, 2023
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.89 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Windows.Forms;
  6. //using Microsoft.Extensions.Logging;
  7. using OfficeOpenXml;
  8.  
  9. namespace EssentialAccessibility
  10. {
  11. public class EASync
  12. {
  13. private static DataTable sourceDataTable = new DataTable();
  14. private static DataTable targetDataTable = new DataTable();
  15.  
  16. internal static DataTable syncedDataTable = new DataTable(); //data table with synced data
  17. internal static DataTable mergedDataTable = new DataTable(); //data table used to add data to DGV
  18.  
  19. protected static void InitDataTable()
  20. {
  21. sourceDataTable.Columns.Add("Finding ID", typeof(string));
  22. sourceDataTable.Columns.Add("Status", typeof(string));
  23.  
  24. targetDataTable.Columns.Add("Finding ID", typeof(string));
  25. targetDataTable.Columns.Add("Status", typeof(string));
  26.  
  27. syncedDataTable.Columns.Add("Finding ID", typeof(string));
  28. syncedDataTable.Columns.Add("Status", typeof(string));
  29. }
  30.  
  31. public static void ReadAndSyncData(string aSourceFile, string aTargetFile, ProgressBar aProgressBar)
  32. {
  33. InitDataTable();
  34.  
  35. //READ FILES
  36. ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
  37. using (ExcelPackage sourcePackage = new ExcelPackage(new FileInfo(aSourceFile)))
  38. using (ExcelPackage targetPackage = new ExcelPackage(new FileInfo(aTargetFile)))
  39. {
  40. ExcelWorksheet sourceWorksheet = sourcePackage.Workbook.Worksheets[0];
  41. ExcelWorksheet targetWorksheet = targetPackage.Workbook.Worksheets[Properties.Settings.Default.targetWorksheetName];
  42.  
  43. //find column indexes for source file;
  44. int sourceFindingIDColumnIndex = sourceWorksheet.Cells["1:1"]
  45. .First(cell => cell.Value
  46. ?.ToString() == Properties.Settings.Default.sourceFindingIDCol)
  47. ?.Start
  48. .Column ?? -1;
  49.  
  50. int sourceStatusColumnIndex = sourceWorksheet.Cells["1:1"]
  51. .First(cell => cell.Value
  52. ?.ToString() == Properties.Settings.Default.sourceStatusCol)
  53. ?.Start
  54. .Column ?? -1;
  55.  
  56. // Find column indexes for target file
  57. int targetSummaryColumnIndex = targetWorksheet.Cells["1:1"]
  58. .First(cell => cell.Value
  59. ?.ToString() == Properties.Settings.Default.targetFindingIDCol)
  60. ?.Start
  61. .Column ?? -1;
  62.  
  63. int targetStatusColumnIndex = targetWorksheet.Cells["1:1"]
  64. .First(cell => cell.Value
  65. ?.ToString() == Properties.Settings.Default.targetStatusCol)
  66. ?.Start
  67. .Column ?? -1;
  68.  
  69. //load data from source and target files;
  70. for (int rowIndex = 2; rowIndex <= sourceWorksheet.Dimension.End.Row; rowIndex++)
  71. {
  72. string findingID = sourceWorksheet.Cells[rowIndex, sourceFindingIDColumnIndex].Value?.ToString();
  73. string status = sourceWorksheet.Cells[rowIndex, sourceStatusColumnIndex].Value?.ToString();
  74.  
  75. if (!string.IsNullOrEmpty(findingID) && !string.IsNullOrEmpty(status))
  76. {
  77. DataRow row = sourceDataTable.NewRow();
  78. row["Finding ID"] = findingID;
  79. row["Status"] = status;
  80. sourceDataTable.Rows.Add(row);
  81. }
  82. }
  83.  
  84. for (int rowIndex = 2; rowIndex <= targetWorksheet.Dimension.End.Row; rowIndex++)
  85. {
  86. string FindingID = targetWorksheet.Cells[rowIndex, targetSummaryColumnIndex].Value?.ToString();
  87. string targetStatus = targetWorksheet.Cells[rowIndex, targetStatusColumnIndex].Value?.ToString();
  88.  
  89. if (!string.IsNullOrEmpty(FindingID) && !string.IsNullOrEmpty(targetStatus))
  90. {
  91. DataRow row = targetDataTable.NewRow();
  92. row["Finding ID"] = FindingID;
  93. row["Status"] = targetStatus;
  94. targetDataTable.Rows.Add(row);
  95. }
  96. }
  97.  
  98. //save initial target worksheet as a backup -
  99. string backupFilePath = Path.Combine(Path.GetDirectoryName(aTargetFile),
  100. Path.GetFileNameWithoutExtension(aTargetFile)
  101. + "_backup"
  102. + Path.GetExtension(aTargetFile));
  103.  
  104. //File.Copy(aTargetFile, backupFilePath, true);
  105. //targetPackage.SaveAs(new FileInfo(backupFilePath));
  106.  
  107. sourcePackage.Dispose();
  108.  
  109. //SYNC FILES;
  110. //find status column in the worksheet
  111. int statusColumnNum = targetWorksheet.Cells
  112. .First(col => col.Value?.ToString().Trim()
  113. .Equals(Properties.Settings.Default.targetStatusCol, StringComparison.OrdinalIgnoreCase) ?? false)
  114. ?.Start?.Column
  115. ?? throw new ArgumentException($"Status column not found in {aTargetFile}");
  116.  
  117. for (int i = 0; i < sourceDataTable.Rows.Count; i++)
  118. {
  119. string findingId = sourceDataTable.Rows[i].Field<string>("Finding ID");
  120. string updatedStatus = sourceDataTable.Rows[i].Field<string>("Status");
  121.  
  122. //sync excel file;
  123. int targetRowNum = targetWorksheet.Cells
  124. .First(col => col.Value?.ToString().Trim()
  125. .Equals(findingId) ?? false)
  126. .Start.Row;
  127.  
  128. ExcelRange statusCell = targetWorksheet.Cells[targetRowNum, statusColumnNum];
  129.  
  130. if (!statusCell.Value.Equals(updatedStatus))
  131. {
  132. targetWorksheet.Cells[targetRowNum, statusColumnNum].Value = updatedStatus;
  133. }
  134.  
  135. var targetRows = from DataRow targetRow in targetDataTable.Rows
  136. where targetRow.Field<string>("Finding ID") == findingId
  137. select targetRow;
  138.  
  139. // Iterate over the matching rows and update their Status value
  140. foreach (DataRow targetRow in targetRows)
  141. {
  142. targetRow.SetField("Status", updatedStatus);
  143.  
  144. DataRow updatedRow = syncedDataTable.NewRow();
  145. updatedRow["Finding ID"] = findingId;
  146. updatedRow["Status"] = updatedStatus;
  147. syncedDataTable.Rows.Add(updatedRow);
  148.  
  149. //add data from source, target and updated data to DGV in Form
  150. DataRow mergedRow = mergedDataTable.NewRow();
  151. mergedRow["Finding ID"] = findingId;
  152. mergedRow["eA State"] = sourceDataTable.Rows[i].Field<string>("Status");
  153. mergedRow["old PS A11Y State"] = targetDataTable.Rows[i].Field<string>("Status");
  154. mergedRow["new PS A11Y State"] = updatedStatus;
  155. mergedDataTable.Rows.Add(mergedRow);
  156. }
  157.  
  158. aProgressBar.Value = (int)((double)(i + 1) / sourceDataTable.Rows.Count * 100);
  159. }
  160.  
  161. targetPackage.Save();
  162.  
  163. }
  164. }
  165. }
  166.  
  167. }
  168.  
Advertisement
Add Comment
Please, Sign In to add comment