diff --git a/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder.slnx b/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder.slnx new file mode 100644 index 00000000..b090eafe --- /dev/null +++ b/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder.slnx @@ -0,0 +1,3 @@ + + + diff --git a/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder/Conditional_Format_Reorder.csproj b/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder/Conditional_Format_Reorder.csproj new file mode 100644 index 00000000..9911aad6 --- /dev/null +++ b/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder/Conditional_Format_Reorder.csproj @@ -0,0 +1,23 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + Always + + + Always + + + + diff --git a/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder/Data/InputTemplate.xlsx b/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder/Data/InputTemplate.xlsx new file mode 100644 index 00000000..e6bf9078 Binary files /dev/null and b/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder/Data/InputTemplate.xlsx differ diff --git a/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder/Output/.gitkeep b/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder/Output/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder/Program.cs b/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder/Program.cs new file mode 100644 index 00000000..ded2c035 --- /dev/null +++ b/FAQ/Conditional_Format_Reorder/.NET/Conditional_Format_Reorder/Conditional_Format_Reorder/Program.cs @@ -0,0 +1,62 @@ +using Syncfusion.XlsIO; + +using Syncfusion.XlsIO.Implementation; +using System.Reflection; + +class Program +{ + static void Main(string[] args) + { + using (ExcelEngine excelEngine = new ExcelEngine()) + { + //Instantiate the Excel application object + IApplication application = excelEngine.Excel; + + //Assigns default application version + application.DefaultVersion = ExcelVersion.Xlsx; + + //A new workbook is created equivalent to creating a new workbook in Excel + //Create a workbook with 1 worksheet + IWorkbook workbook = application.Workbooks.Open(Path.GetFullPath(@"Data/InputTemplate.xlsx")); + + //Access first worksheet from the workbook + IWorksheet worksheet = workbook.Worksheets[0]; + + IConditionalFormats conditionalFormats = worksheet["B3"].ConditionalFormats; + List conditionalformats = GetSortedConditionalFormats(conditionalFormats); + + for (int i = 0; i < conditionalformats.Count; i++) + { + IConditionalFormat format = conditionalformats[i]; + Console.WriteLine(format.FirstFormula); + } + + //Saving the workbook + workbook.SaveAs(Path.GetFullPath(@"Output/Output.xlsx")); + } + } + static List GetSortedConditionalFormats(IConditionalFormats conditionalFormats) + { + List result = new List(); + + //Reflection + MethodInfo getConditionMethod = typeof(ConditionalFormatWrapper).GetMethod("GetCondition", BindingFlags.Instance | BindingFlags.NonPublic); + PropertyInfo priorityProp = typeof(ConditionalFormatImpl).GetProperty("Priority", BindingFlags.Instance | BindingFlags.NonPublic); + + for (int i = 0; i < conditionalFormats.Count; i++) + { + IConditionalFormat format = conditionalFormats[i]; + ConditionalFormatImpl impl = format as ConditionalFormatImpl; + + if (impl == null && format is ConditionalFormatWrapper wrapper) + { + impl = getConditionMethod.Invoke(wrapper, null) as ConditionalFormatImpl; + } + if (impl != null) + { + result.Add(impl); + } + } + return result.OrderBy(f => (int)priorityProp.GetValue(f)).ToList(); + } +} \ No newline at end of file