diff --git a/src/Simplexcel.TestApp/Program.cs b/src/Simplexcel.TestApp/Program.cs
index e48ff8e..4394717 100644
--- a/src/Simplexcel.TestApp/Program.cs
+++ b/src/Simplexcel.TestApp/Program.cs
@@ -136,7 +136,7 @@ static void Main()
populatedSheet.Populate(EnumeratePopulateTestData(), cacheTypeColumns: true);
wb.Add(populatedSheet);
- var frozenTopRowSheet = new Worksheet("Frozen Top Row");
+ var frozenTopRowSheet = new Worksheet("Frozen Top Row") { AutoFilter = true };
frozenTopRowSheet.Cells[0, 0] = "Header 1";
frozenTopRowSheet.Cells[0, 1] = "Header 2";
frozenTopRowSheet.Cells[0, 2] = "Header 3";
diff --git a/src/Simplexcel/Worksheet.cs b/src/Simplexcel/Worksheet.cs
index 7dde311..02aa420 100644
--- a/src/Simplexcel/Worksheet.cs
+++ b/src/Simplexcel/Worksheet.cs
@@ -94,6 +94,14 @@ public ColumnWidthCollection ColumnWidths
///
public LargeNumberHandlingMode LargeNumberHandlingMode { get; set; }
+ ///
+ /// Whether to enable the AutoFilter feature on the first non-empty row.
+ ///
+ /// Defaults to .
+ ///
+ /// See Use AutoFilter to filter your data
+ public bool AutoFilter { get; set; }
+
///
/// Get the cell with the given cell reference, e.g. Get the cell "A1". May return NULL.
///
diff --git a/src/Simplexcel/XlsxInternal/XlsxWriter.cs b/src/Simplexcel/XlsxInternal/XlsxWriter.cs
index cf6a9b6..54643d6 100644
--- a/src/Simplexcel/XlsxInternal/XlsxWriter.cs
+++ b/src/Simplexcel/XlsxInternal/XlsxWriter.cs
@@ -473,8 +473,10 @@ private static Relationship CreateSheetFile(Worksheet sheet, int sheetIndex, Rel
}
var sheetData = new XElement(Namespaces.workbook + "sheetData");
+ XlsxRow firstRow = null;
foreach (var row in rows.OrderBy(rk => rk.Key))
{
+ firstRow ??= row.Value;
var re = new XElement(Namespaces.workbook + "row", new XAttribute("r", row.Value.RowIndex));
foreach (var cell in row.Value.Cells)
{
@@ -498,6 +500,15 @@ private static Relationship CreateSheetFile(Worksheet sheet, int sheetIndex, Rel
}
doc.Root.Add(sheetData);
+ var firstRowCells = firstRow?.Cells;
+ if (sheet.AutoFilter && firstRowCells?.Count > 0)
+ {
+ var firstRef = firstRowCells.First().Reference;
+ var lastRef = firstRowCells.Last().Reference;
+ var autoFilter = new XElement(Namespaces.workbook + "autoFilter", new XAttribute("ref", $"{firstRef}:{lastRef}"));
+ doc.Root.Add(autoFilter);
+ }
+
sheetRels = null;
var hyperlinks = sheet.Cells.Where(c => c.Value != null && !string.IsNullOrEmpty(c.Value.Hyperlink)).ToList();
if (hyperlinks.Count > 0)