diff --git a/FAQ/CF_Offset/.NET/CF_Offset/CF_Offset.slnx b/FAQ/CF_Offset/.NET/CF_Offset/CF_Offset.slnx
new file mode 100644
index 00000000..1e250157
--- /dev/null
+++ b/FAQ/CF_Offset/.NET/CF_Offset/CF_Offset.slnx
@@ -0,0 +1,3 @@
+
+
+
diff --git a/FAQ/CF_Offset/.NET/CF_Offset/CF_Offset/CF_Offset.csproj b/FAQ/CF_Offset/.NET/CF_Offset/CF_Offset/CF_Offset.csproj
new file mode 100644
index 00000000..12d952d8
--- /dev/null
+++ b/FAQ/CF_Offset/.NET/CF_Offset/CF_Offset/CF_Offset.csproj
@@ -0,0 +1,20 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+ Always
+
+
+
+
diff --git a/FAQ/CF_Offset/.NET/CF_Offset/CF_Offset/Output/.gitkeep b/FAQ/CF_Offset/.NET/CF_Offset/CF_Offset/Output/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/FAQ/CF_Offset/.NET/CF_Offset/CF_Offset/Program.cs b/FAQ/CF_Offset/.NET/CF_Offset/CF_Offset/Program.cs
new file mode 100644
index 00000000..f9ab9d00
--- /dev/null
+++ b/FAQ/CF_Offset/.NET/CF_Offset/CF_Offset/Program.cs
@@ -0,0 +1,114 @@
+using Syncfusion.XlsIO;
+
+
+class Program
+{
+ static void Main(string[] args)
+ {
+ // Initialize Excel
+ ExcelEngine excelEngine = new ExcelEngine();
+ IApplication application = excelEngine.Excel;
+ application.DefaultVersion = ExcelVersion.Xlsx;
+ IWorkbook workbook = application.Workbooks.Create(1);
+ IWorksheet sheet = workbook.Worksheets[0];
+ sheet.Name = "CF Formula Offset";
+
+ // Headers
+ sheet["L22"].Text = "Value L"; sheet["M22"].Text = "Status M";
+ sheet["P22"].Text = "Value P"; sheet["Q22"].Text = "Status Q";
+ sheet["AR22"].Text = "Value AR";
+ sheet["L22:AR22"].CellStyle.Font.Bold = true;
+
+ // Sample data (rows 23-32)
+ int[] valuesL = { 150, -50, 200, 0, -100, 75, -25, 300, 0, 125 };
+ string[] statusM = { "ok", "n.m.", "n.m.", "pending", "n.m.", "ok", "n.m.", "complete", "n.m.", "ok" };
+ int[] valuesP = { 80, 120, -40, 95, -60, 200, 0, -15, 170, 85 };
+ string[] statusQ = { "n.m.", "ok", "n.m.", "n.m.", "ok", "n.m.", "pending", "n.m.", "ok", "n.m." };
+ int[] valuesAR = { 45, -30, 90, 0, -75, 110, 25, -10, 50, 135 };
+
+ for (int i = 0; i < 10; i++)
+ {
+ sheet[23 + i, 12].Number = valuesL[i]; // Column L (12)
+ sheet[23 + i, 13].Text = statusM[i]; // Column M (13)
+ sheet[23 + i, 16].Number = valuesP[i]; // Column P (16)
+ sheet[23 + i, 17].Text = statusQ[i]; // Column Q (17)
+ sheet[23 + i, 44].Number = valuesAR[i]; // Column AR (44)
+ }
+
+ // Apply conditional formatting rules to columns L, P, AR
+ string[] targetCols = { "L", "P", "AR" };
+ string[] adjacentCols = { "M", "Q", "AS" }; // Columns to check for Rule 2
+
+ for (int c = 0; c < targetCols.Length; c++)
+ {
+ string range = $"{targetCols[c]}23:{targetCols[c]}32";
+ IConditionalFormats formats = sheet[range].ConditionalFormats;
+
+ // Rule 1: Value > 0 → GREEN (Offset: 0,0)
+ IConditionalFormat rule1 = formats.AddCondition();
+ rule1.FormatType = ExcelCFType.Formula;
+ rule1.FirstFormula = $"={targetCols[c]}23>0";
+ rule1.BackColor = ExcelKnownColors.Light_green;
+
+ // Rule 2: Adjacent column = "n.m." → YELLOW (Offset: 0,1)
+ IConditionalFormat rule2 = formats.AddCondition();
+ rule2.FormatType = ExcelCFType.Formula;
+ rule2.FirstFormula = $"={adjacentCols[c]}23=\"n.m.\"";
+ rule2.BackColor = ExcelKnownColors.Light_yellow;
+
+ // Rule 3: Value < 0 → ORANGE (Offset: 0,0)
+ IConditionalFormat rule3 = formats.AddCondition();
+ rule3.FormatType = ExcelCFType.Formula;
+ rule3.FirstFormula = $"={targetCols[c]}23<0";
+ rule3.BackColor = ExcelKnownColors.Light_orange;
+ rule3.FontColor = ExcelKnownColors.Red;
+ }
+
+ // Calculate and display offset for specific cells
+ Console.WriteLine("\n=== OFFSET CALCULATIONS ===\n");
+ PrintOffset("L23", "L23"); // Rule 1: Same cell
+ PrintOffset("M23", "L23"); // Rule 2: One column right
+ PrintOffset("P25", "P25"); // Rule 1: Same cell
+ PrintOffset("Q26", "P26"); // Rule 2: One column right
+ PrintOffset("AS28", "AR28"); // Rule 2: One column right
+ PrintOffset("L30", "L25"); // Different row
+
+ Console.WriteLine("\n=== OFFSET FORMULA ===");
+ Console.WriteLine("Row Offset = Formula Row - Applied Row");
+ Console.WriteLine("Col Offset = Formula Col - Applied Col");
+
+ // Save file
+ workbook.SaveAs(Path.GetFullPath("Output/CF_FormulaOffset.xlsx"));
+ workbook.Close();
+ excelEngine.Dispose();
+
+ Console.WriteLine("\nFile created: CF_FormulaOffset.xlsx");
+ }
+
+ // Calculate and print offset between formula cell and applied cell
+ static void PrintOffset(string formulaCell, string appliedCell)
+ {
+ int formRow = int.Parse(new string(formulaCell.Where(char.IsDigit).ToArray()));
+ int applRow = int.Parse(new string(appliedCell.Where(char.IsDigit).ToArray()));
+
+ string formCol = new string(formulaCell.Where(char.IsLetter).ToArray());
+ string applCol = new string(appliedCell.Where(char.IsLetter).ToArray());
+
+ int formColNum = ColToNum(formCol);
+ int applColNum = ColToNum(applCol);
+
+ int rowOffset = formRow - applRow;
+ int colOffset = formColNum - applColNum;
+
+ Console.WriteLine($"Formula={formulaCell}, Applied={appliedCell}, Offset({rowOffset},{colOffset})");
+ }
+
+ // Convert column letter to number (A=1, B=2, AR=44, AS=45, etc.)
+ static int ColToNum(string col)
+ {
+ int result = 0;
+ for (int i = 0; i < col.Length; i++)
+ result = result * 26 + (col[i] - 'A' + 1);
+ return result;
+ }
+}