diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs index 0336aff..fb906e0 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs @@ -777,5 +777,26 @@ } public String Author { get; set; } + + public Boolean LockStructure { get; set; } + public XLWorkbook SetLockStructure(Boolean value) { LockStructure = value; return this; } + public Boolean LockWindows { get; set; } + public XLWorkbook SetLockWindows(Boolean value) { LockWindows = value; return this; } + + public void Protect() + { + Protect(true); + } + + public void Protect(Boolean lockStructure) + { + Protect(lockStructure, false); + } + + public void Protect(Boolean lockStructure, Boolean lockWindows) + { + LockStructure = lockStructure; + LockWindows = LockWindows; + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs index 2625812..cb93d1e 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs @@ -88,6 +88,15 @@ var wbProps = dSpreadsheet.WorkbookPart.Workbook.WorkbookProperties; Use1904DateSystem = wbProps != null && wbProps.Date1904 != null && wbProps.Date1904.Value; + var wbProtection = dSpreadsheet.WorkbookPart.Workbook.WorkbookProtection; + if (wbProtection != null) + { + if (wbProtection.LockStructure != null) + LockStructure = wbProtection.LockStructure.Value; + if (wbProtection.LockWindows != null) + LockWindows = wbProtection.LockWindows.Value; + } + var calculationProperties = dSpreadsheet.WorkbookPart.Workbook.CalculationProperties; if (calculationProperties != null) { diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index edcb957..21072b9 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -433,6 +433,20 @@ #endregion + if (LockStructure || LockWindows) + { + if (workbook.WorkbookProtection == null) + workbook.WorkbookProtection = new WorkbookProtection(); + + workbook.WorkbookProtection.LockStructure = LockStructure; + workbook.WorkbookProtection.LockWindows = LockWindows; + } + else + { + workbook.WorkbookProtection = null; + } + + if (workbook.BookViews == null) workbook.BookViews = new BookViews(); diff --git a/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs b/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs index f28b5dd..f99b0a2 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs @@ -17,10 +17,7 @@ { var wb = new XLWorkbook(); var ws = wb.AddWorksheet("Sheet"); - ws.FirstCell().SetValue(1) - .CellBelow().SetFormulaA1("IF(A1>0,Yes,No)") // Invalid - .CellBelow().SetFormulaA1("IF(A1>0,\"Yes\",\"No\")") // OK - .CellBelow().SetFormulaA1("IF(A1>0,TRUE,FALSE)"); // OK + wb.Protect(); wb.SaveAs(@"c:\temp\saved.xlsx"); Console.WriteLine("Done"); }