diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumn.cs index 0c52b71..688b86d 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumn.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumn.cs @@ -81,6 +81,9 @@ /// The row to end calculating the column width. IXLColumn AdjustToContents(Int32 startRow, Int32 endRow); + IXLColumn AdjustToContents(Double minWidth, Double maxWidth); + IXLColumn AdjustToContents(Int32 startRow, Double minWidth, Double maxWidth); + IXLColumn AdjustToContents(Int32 startRow, Int32 endRow, Double minWidth, Double maxWidth); /// /// Hides this column. diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumns.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumns.cs index a92ed74..1ec568b 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumns.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/IXLColumns.cs @@ -36,6 +36,10 @@ /// The row to end calculating the column width. IXLColumns AdjustToContents(Int32 startRow, Int32 endRow); + IXLColumns AdjustToContents(Double minWidth, Double maxWidth); + IXLColumns AdjustToContents(Int32 startRow, Double minWidth, Double maxWidth); + IXLColumns AdjustToContents(Int32 startRow, Int32 endRow, Double minWidth, Double maxWidth); + /// /// Hides all columns. /// diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs index bb2e4b3..1c2afbc 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs @@ -295,8 +295,8 @@ } public IXLColumn AdjustToContents(Int32 startRow, Int32 endRow) { - Double maxWidth = 0; - foreach (var c in CellsUsed().Where(cell=>cell.Address.RowNumber >= startRow && cell.Address.RowNumber <= endRow)) + Double colMaxWidth = 0; + foreach (var c in CellsUsed().Where(cell => cell.Address.RowNumber >= startRow && cell.Address.RowNumber <= endRow)) { Boolean isMerged = false; var cellAsRange = c.AsRange(); @@ -311,19 +311,59 @@ if (!isMerged) { var thisWidth = ((XLFont)c.Style.Font).GetWidth(c.GetFormattedString()); - if (thisWidth > maxWidth) - maxWidth = thisWidth; + if (thisWidth > colMaxWidth) + colMaxWidth = thisWidth; } } - if (maxWidth == 0) - maxWidth = Worksheet.ColumnWidth; + if (colMaxWidth == 0) + colMaxWidth = Worksheet.ColumnWidth; - Width = maxWidth; + Width = colMaxWidth; return this; } + public IXLColumn AdjustToContents(Double minWidth, Double maxWidth) + { + return AdjustToContents(1, XLWorksheet.MaxNumberOfRows, minWidth, maxWidth); + } + public IXLColumn AdjustToContents(Int32 startRow, Double minWidth, Double maxWidth) + { + return AdjustToContents(startRow, XLWorksheet.MaxNumberOfRows, minWidth, maxWidth); + } + public IXLColumn AdjustToContents(Int32 startRow, Int32 endRow, Double minWidth, Double maxWidth) + { + Double colMaxWidth = minWidth; + foreach (var c in CellsUsed().Where(cell => cell.Address.RowNumber >= startRow && cell.Address.RowNumber <= endRow)) + { + Boolean isMerged = false; + var cellAsRange = c.AsRange(); + foreach (var m in (Worksheet as XLWorksheet).Internals.MergedRanges) + { + if (cellAsRange.Intersects(m)) + { + isMerged = true; + break; + } + } + if (!isMerged) + { + var thisWidth = ((XLFont)c.Style.Font).GetWidth(c.GetFormattedString()); + if (thisWidth >= maxWidth) + { + colMaxWidth = maxWidth; + break; + } + else if (thisWidth > colMaxWidth) + colMaxWidth = thisWidth; + } + } + + Width = colMaxWidth; + return this; + } + public void Hide() { IsHidden = true; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumns.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumns.cs index 48ee06a..c1e35e1 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumns.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumns.cs @@ -147,6 +147,22 @@ return this; } + public IXLColumns AdjustToContents(Double minWidth, Double maxWidth) + { + columns.ForEach(c => c.AdjustToContents(minWidth, maxWidth)); + return this; + } + public IXLColumns AdjustToContents(Int32 startRow, Double minWidth, Double maxWidth) + { + columns.ForEach(c => c.AdjustToContents(startRow, minWidth, maxWidth)); + return this; + } + public IXLColumns AdjustToContents(Int32 startRow, Int32 endRow, Double minWidth, Double maxWidth) + { + columns.ForEach(c => c.AdjustToContents(startRow, endRow, minWidth, maxWidth)); + return this; + } + public void Hide() { columns.ForEach(c => c.Hide()); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs index 2111609..bf3cf56 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/IXLWorksheet.cs @@ -6,7 +6,7 @@ namespace ClosedXML.Excel { public enum XLWorksheetVisibility { Visible, Hidden, VeryHidden } - public interface IXLWorksheet: IXLRangeBase + public interface IXLWorksheet : IXLRangeBase { XLWorkbook Workbook { get; } @@ -292,17 +292,23 @@ //IXLCharts Charts { get; } Boolean ShowFormulas { get; set; } - Boolean ShowGridLines { get; set; } - Boolean ShowOutlineSymbols { get; set; } - Boolean ShowRowColHeaders { get; set; } - Boolean ShowRuler { get; set; } - Boolean ShowWhiteSpace { get; set; } - Boolean ShowZeros { get; set; } - } + + IXLWorksheet SetShowFormulas(); IXLWorksheet SetShowFormulas(Boolean value); + IXLWorksheet SetShowGridLines(); IXLWorksheet SetShowGridLines(Boolean value); + IXLWorksheet SetShowOutlineSymbols(); IXLWorksheet SetShowOutlineSymbols(Boolean value); + IXLWorksheet SetShowRowColHeaders(); IXLWorksheet SetShowRowColHeaders(Boolean value); + IXLWorksheet SetShowRuler(); IXLWorksheet SetShowRuler(Boolean value); + IXLWorksheet SetShowWhiteSpace(); IXLWorksheet SetShowWhiteSpace(Boolean value); + IXLWorksheet SetShowZeros(); IXLWorksheet SetShowZeros(Boolean value); + + + IXLColor TabColor { get; set; } + IXLWorksheet SetTabColor(IXLColor color); + } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRow.cs index d2cb7fe..196dec1 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRow.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRow.cs @@ -53,6 +53,11 @@ /// The column to end calculating the row height. IXLRow AdjustToContents(Int32 startColumn, Int32 endColumn); + + IXLRow AdjustToContents(Double minHeight, Double maxHeight); + IXLRow AdjustToContents(Int32 startColumn, Double minHeight, Double maxHeight); + IXLRow AdjustToContents(Int32 startColumn, Int32 endColumn, Double minHeight, Double maxHeight); + /// Hides this row. void Hide(); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRows.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRows.cs index 0f591d7..313c5df 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRows.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/IXLRows.cs @@ -36,6 +36,10 @@ /// The column to end calculating the row height. IXLRows AdjustToContents(Int32 startColumn, Int32 endColumn); + IXLRows AdjustToContents(Double minHeight, Double maxHeight); + IXLRows AdjustToContents(Int32 startColumn, Double minHeight, Double maxHeight); + IXLRows AdjustToContents(Int32 startColumn, Int32 endColumn, Double minHeight, Double maxHeight); + /// /// Hides all rows. /// diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs index 4b6bb7c..9d1ec5d 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs @@ -224,6 +224,46 @@ return this; } + public IXLRow AdjustToContents(Double minHeight, Double maxHeight) + { + return AdjustToContents(1, XLWorksheet.MaxNumberOfColumns, minHeight, maxHeight); + } + public IXLRow AdjustToContents(Int32 startColumn, Double minHeight, Double maxHeight) + { + return AdjustToContents(startColumn, XLWorksheet.MaxNumberOfColumns, minHeight, maxHeight); + } + public IXLRow AdjustToContents(Int32 startColumn, Int32 endColumn, Double minHeight, Double maxHeight) + { + Double rowMaxHeight = 0; + foreach (var c in CellsUsed().Where(cell => cell.Address.ColumnNumber >= startColumn && cell.Address.ColumnNumber <= endColumn)) + { + Boolean isMerged = false; + var cellAsRange = c.AsRange(); + foreach (var m in (Worksheet as XLWorksheet).Internals.MergedRanges) + { + if (cellAsRange.Intersects(m)) + { + isMerged = true; + break; + } + } + if (!isMerged) + { + var thisHeight = ((XLFont)c.Style.Font).GetHeight(); + if (thisHeight >= maxHeight) + { + rowMaxHeight = maxHeight; + break; + } + else if (thisHeight > rowMaxHeight) + rowMaxHeight = thisHeight; + } + } + + Height = rowMaxHeight; + return this; + } + public void Hide() { IsHidden = true; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRows.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRows.cs index 6e9458d..8359e42 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRows.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRows.cs @@ -147,6 +147,24 @@ rows.ForEach(r => r.AdjustToContents(startColumn, endColumn)); return this; } + + public IXLRows AdjustToContents(Double minHeight, Double maxHeight) + { + rows.ForEach(r => r.AdjustToContents(minHeight, maxHeight)); + return this; + } + public IXLRows AdjustToContents(Int32 startColumn, Double minHeight, Double maxHeight) + { + rows.ForEach(r => r.AdjustToContents(startColumn, minHeight, maxHeight)); + return this; + } + public IXLRows AdjustToContents(Int32 startColumn, Int32 endColumn, Double minHeight, Double maxHeight) + { + rows.ForEach(r => r.AdjustToContents(startColumn, endColumn, minHeight, maxHeight)); + return this; + } + + public void Hide() { rows.ForEach(r => r.Hide()); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs index 7148445..dfb11c4 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs @@ -589,6 +589,9 @@ if (sheetProperties.Count() > 0) { var sheetProperty = (SheetProperties)sheetProperties.First(); + if (sheetProperty.TabColor != null) + ws.TabColor = GetColor(sheetProperty.TabColor); + if (sheetProperty.OutlineProperties != null) { if (sheetProperty.OutlineProperties.SummaryBelow != null) diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index 5a69318..9976e24 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -1501,6 +1501,22 @@ return color; } + private TabColor GetTabColor(IXLColor xlColor) + { + TabColor color = new TabColor(); + if (xlColor.ColorType == XLColorType.Color) + color.Rgb = xlColor.Color.ToHex(); + else if (xlColor.ColorType == XLColorType.Indexed) + color.Indexed = (UInt32)xlColor.Indexed; + else + { + color.Theme = (UInt32)xlColor.ThemeColor; + if (xlColor.ThemeTint != 1) + color.Tint = xlColor.ThemeTint; + } + return color; + } + private bool FontsAreEqual(Font f, IXLFont xlFont) { var nf = new XLFont(); @@ -1595,6 +1611,12 @@ if (worksheetPart.Worksheet.SheetProperties == null) worksheetPart.Worksheet.SheetProperties = new SheetProperties() { CodeName = xlWorksheet.Name.RemoveSpecialCharacters() }; + if (xlWorksheet.TabColor.HasValue) + worksheetPart.Worksheet.SheetProperties.TabColor = GetTabColor(xlWorksheet.TabColor); + else + worksheetPart.Worksheet.SheetProperties.TabColor = null; + + cm.SetElement(XLWSContentManager.XLWSContents.SheetProperties, worksheetPart.Worksheet.SheetProperties); if (worksheetPart.Worksheet.SheetProperties.OutlineProperties == null) @@ -2102,19 +2124,19 @@ sheetProtection.Sheet = protection.Protected; if (!StringExtensions.IsNullOrWhiteSpace(protection.PasswordHash)) sheetProtection.Password = protection.PasswordHash; - sheetProtection.FormatCells = protection.FormatCells; - sheetProtection.FormatColumns = protection.FormatColumns; - sheetProtection.FormatRows = protection.FormatRows; - sheetProtection.InsertColumns = protection.InsertColumns; - sheetProtection.InsertHyperlinks = protection.InsertHyperlinks; - sheetProtection.InsertRows = protection.InsertRows; - sheetProtection.DeleteColumns = protection.DeleteColumns; - sheetProtection.DeleteRows = protection.DeleteRows; - sheetProtection.AutoFilter = protection.AutoFilter; - sheetProtection.PivotTables = protection.PivotTables; - sheetProtection.Sort = protection.Sort; - sheetProtection.SelectLockedCells = !protection.SelectLockedCells; - sheetProtection.SelectUnlockedCells = !protection.SelectUnlockedCells; + sheetProtection.FormatCells = GetBooleanValue(!protection.FormatCells, true); + sheetProtection.FormatColumns = GetBooleanValue(!protection.FormatColumns, true); + sheetProtection.FormatRows = GetBooleanValue(!protection.FormatRows, true); + sheetProtection.InsertColumns = GetBooleanValue(!protection.InsertColumns, true); + sheetProtection.InsertHyperlinks = GetBooleanValue(!protection.InsertHyperlinks, true); + sheetProtection.InsertRows = GetBooleanValue(!protection.InsertRows, true); + sheetProtection.DeleteColumns = GetBooleanValue(!protection.DeleteColumns, true); + sheetProtection.DeleteRows = GetBooleanValue(!protection.DeleteRows, true); + sheetProtection.AutoFilter = GetBooleanValue(!protection.AutoFilter, true); + sheetProtection.PivotTables = GetBooleanValue(!protection.PivotTables, true); + sheetProtection.Sort = GetBooleanValue(!protection.Sort, true); + sheetProtection.SelectLockedCells = GetBooleanValue(!protection.SelectLockedCells, false); + sheetProtection.SelectUnlockedCells = GetBooleanValue(!protection.SelectUnlockedCells, false); } else { @@ -2495,6 +2517,14 @@ #endregion } + private BooleanValue GetBooleanValue(bool value, bool defaultValue) + { + if (value == defaultValue) + return null; + else + return new BooleanValue(value); + } + private void CollapseColumns(Columns columns, Dictionary sheetColumns) { UInt32 lastMax = 1; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs index 0793066..8df8cd0 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs @@ -54,6 +54,7 @@ ShowRuler = workbook.ShowRuler; ShowWhiteSpace = workbook.ShowWhiteSpace; ShowZeros = workbook.ShowZeros; + TabColor = new XLColor(); } void XLWorksheet_RangeShiftedColumns(XLRange range, int columnsShifted) @@ -829,5 +830,20 @@ public Boolean ShowWhiteSpace { get; set; } public Boolean ShowZeros { get; set; } + public IXLWorksheet SetShowFormulas() { ShowFormulas = true; return this; } public IXLWorksheet SetShowFormulas(Boolean value) { ShowFormulas = value; return this; } + public IXLWorksheet SetShowGridLines() { ShowGridLines = true; return this; } public IXLWorksheet SetShowGridLines(Boolean value) { ShowGridLines = value; return this; } + public IXLWorksheet SetShowOutlineSymbols() { ShowOutlineSymbols = true; return this; } public IXLWorksheet SetShowOutlineSymbols(Boolean value) { ShowOutlineSymbols = value; return this; } + public IXLWorksheet SetShowRowColHeaders() { ShowRowColHeaders = true; return this; } public IXLWorksheet SetShowRowColHeaders(Boolean value) { ShowRowColHeaders = value; return this; } + public IXLWorksheet SetShowRuler() { ShowRuler = true; return this; } public IXLWorksheet SetShowRuler(Boolean value) { ShowRuler = value; return this; } + public IXLWorksheet SetShowWhiteSpace() { ShowWhiteSpace = true; return this; } public IXLWorksheet SetShowWhiteSpace(Boolean value) { ShowWhiteSpace = value; return this; } + public IXLWorksheet SetShowZeros() { ShowZeros = true; return this; } public IXLWorksheet SetShowZeros(Boolean value) { ShowZeros = value; return this; } + + + public IXLColor TabColor { get; set; } + public IXLWorksheet SetTabColor(IXLColor color) + { + TabColor = color; + return this; + } } } diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/ClosedXML_Examples.csproj b/ClosedXML/ClosedXML/ClosedXML_Examples/ClosedXML_Examples.csproj index 39bfc5b..86f73af 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/ClosedXML_Examples.csproj +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/ClosedXML_Examples.csproj @@ -93,6 +93,7 @@ + diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Creating/CreateFiles.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Creating/CreateFiles.cs index 732351c..6488243 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Creating/CreateFiles.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Creating/CreateFiles.cs @@ -77,6 +77,7 @@ new SortExample().Create(@"C:\Excel Files\Created\SortExample.xlsx"); new AddingDataSet().Create(@"C:\Excel Files\Created\AddingDataSet.xlsx"); new AddingDataTableAsWorksheet().Create(@"C:\Excel Files\Created\AddingDataTableAsWorksheet.xlsx"); + new TabColors().Create(@"C:\Excel Files\Created\TabColors.xlsx"); } } } diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/ShowCase.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/ShowCase.cs index da5faea..ebf2e5c 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/ShowCase.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/ShowCase.cs @@ -69,7 +69,7 @@ .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center); //Merge title cells - rngTable.Row(1).Merge(); // We could've also used: rngTable.Range("A1:E1").Merge() + rngTable.FirstRow().Merge(); // We could've also used: rngTable.Range("A1:E1").Merge() or rngTable.Row(1).Merge() //Formatting headers var rngHeaders = rngTable.Range("A2:E2"); // The address is relative to rngTable (NOT the worksheet) diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/TabColors.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/TabColors.cs new file mode 100644 index 0000000..586f1a6 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/TabColors.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using ClosedXML.Excel; + +using System.Drawing; + +namespace ClosedXML_Examples.Misc +{ + public class TabColors + { + #region Variables + + // Public + + // Private + + + #endregion + + #region Properties + + // Public + + // Private + + // Override + + + #endregion + + #region Events + + // Public + + // Private + + // Override + + + #endregion + + #region Methods + + // Public + public void Create(String filePath) + { + var wb = new XLWorkbook(); + + var wsRed = wb.Worksheets.Add("Red").SetTabColor(XLColor.Red); + + var wsAccent3 = wb.Worksheets.Add("Accent3").SetTabColor(XLColor.FromTheme(XLThemeColor.Accent3)); + + var wsIndexed = wb.Worksheets.Add("Indexed"); + wsIndexed.TabColor = XLColor.FromIndex(24); + + var wsArgb = wb.Worksheets.Add("Argb"); + wsArgb.TabColor = XLColor.FromArgb(23, 23, 23); + + wb.SaveAs(filePath); + } + + // Private + + // Override + + + #endregion + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs b/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs index 60c7487..9beedfa 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs @@ -16,7 +16,7 @@ { //var fileName = "DataValidation"; var fileName = "Sandbox"; - //var fileName = "Issue_6609"; + //var fileName = "Issue_6706"; //var wb = new XLWorkbook(String.Format(@"c:\Excel Files\ForTesting\{0}.xlsx", fileName)); var wb = new XLWorkbook(); //var ws = wb.Worksheets.Add("Sheet1"); @@ -31,10 +31,10 @@ var ws = wb.Worksheets.Add("Sheet1"); - ws.Name = "Sheet X"; - var wsX = wb.Worksheet("Sheet X"); - wsX.Cell(1, 1).Value = "Hello"; - + ws.Cell(1,1).Value = "X"; + ws.Protect() + .SetInsertRows() + .SetSelectLockedCells(false); wb.SaveAs(String.Format(@"c:\Excel Files\ForTesting\{0}_Saved.xlsx", fileName)); //Console.ReadKey(); }