private void GenerateSheet(Excel.Worksheet sheet, string sheetName)
        {
            sheet.Name         = sheetName;
            sheet.Cells.Locked = false;
            var columns = definition.Worksheets[EnumUtils.EnumValue <ConfigurationFile.WorkSheets>(sheetName)].Columns;

            foreach (var column in columns)
            {
                if (EnumUtils.IsOptional(column.TargetField))
                {
                    sheet.Cells[1, column.Position]      = "(Optional)";
                    sheet.Columns[column.Position].Style = "Optional";
                }
                else
                {
                    sheet.Cells[1, column.Position] = "(Required)";
                }
                sheet.Cells[1, column.Position].Style = "HeadingDetail";

                sheet.Cells[2, column.Position]       = column.Heading;
                sheet.Cells[2, column.Position].Style = "HeadingTitle";

                var defaultValue = EnumUtils.GetDefault(column.TargetField);
                if (defaultValue != null)
                {
                    sheet.Cells[3, column.Position] = $"(Default: {defaultValue.ToString()})";
                }
                sheet.Cells[3, column.Position].Style = "HeadingDetail";

                var options = EnumUtils.GetOptions(column.TargetField);
                if (options.Count() > 0)
                {
                    var cell = (Excel.Range)sheet.Columns[column.Position];
                    cell.Validation.Add(
                        Excel.XlDVType.xlValidateList,
                        Excel.XlDVAlertStyle.xlValidAlertStop,
                        Excel.XlFormatConditionOperator.xlBetween,
                        string.Join(", ", options));
                }
            }
            sheet.Columns.AutoFit();

            sheet.Protect(Missing.Value, Missing.Value, Missing.Value,
                          Missing.Value, Missing.Value, Missing.Value, true,
                          Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                          Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                          Missing.Value);

            // Freeze the header rows.
            sheet.Activate();
            sheet.Application.ActiveWindow.SplitRow    = 3;
            sheet.Application.ActiveWindow.FreezePanes = true;
        }