public SettingsManager() { WallbinViewSettings = new WallbinViewSettings(); WallbinButtonsSettings = new WallbinButtonsSettings(); CalendarViewSettings = new CalendarViewSettings(); ProgramScheduleSettings = new ProgramScheduleSettings(); EmailBinSettings = new EmailBinSettings(); LinkLaunchSettings = new LinkLaunchSettings(); KeyWordFilters = new KeyWordFileFilters(); }
public static void GenerateWeekSchedule( string templatePath, Day[][] days, string destinationFilePath, bool convertToPDF, bool landscape, ProgramScheduleSettings outputSettings) { if (!File.Exists(templatePath) || !ExcelHelper.Instance.Connect()) return; try { var destinationWorkBook = ExcelHelper.Instance.ExcelObject.Workbooks.Add(); for (var i = 1; i < 3; i++) try { destinationWorkBook.Worksheets[i].Delete(); } catch { break; } var worksheetIndex = 1; var sheduleGenrated = DateTime.Now; foreach (var weekDays in days) { var sourceWorkBook = ExcelHelper.Instance.ExcelObject.Workbooks.Open(templatePath); Worksheet workSheet = sourceWorkBook.Worksheets["Week"]; var title = string.Format("{0} - Weekly Program Schedule", weekDays.FirstOrDefault().Station.Name); var dateRange = string.Format("Week of {0}", weekDays.FirstOrDefault().Date.ToString("MMMM d, yyyy")); workSheet.PageSetup.CenterHeader = String.Format("&\"{0}{2}\"&{1}", outputSettings.HeaderFont.Name, outputSettings.HeaderFont.Size.ToString(), outputSettings.HeaderFont.Bold ? ",bold" : string.Empty) + title + (char)13 + dateRange; workSheet.PageSetup.CenterFooter = String.Format("&\"{0}{2}\"&{1}", outputSettings.FooterFont.Name, outputSettings.FooterFont.Size.ToString(), outputSettings.FooterFont.Bold ? ",bold" : string.Empty) + "Schedule Generated" + (char)13 + sheduleGenrated.ToString("MM/dd/yy h:mm tt"); var range = workSheet.Range["Data"]; range.Font.Name = outputSettings.BodyFont.Name; range.Font.Size = outputSettings.BodyFont.Size; range.Font.Bold = outputSettings.BodyFont.Bold; range.Font.Italic = outputSettings.BodyFont.Italic; if (outputSettings.UsePrimeTimeSpecialFontSize) { { var firstColumn = workSheet.Range["day1"].Column; var lastColumn = workSheet.Range["day6"].Column; var firstRow = workSheet.Range["day1"].Row + 1; var time = new DateTime(1, 1, 1, 5, 0, 0); while (!(time.Hour == outputSettings.WeekPrimeTimeStart.Hour && time.Minute == outputSettings.WeekPrimeTimeStart.Minute)) { time = time.AddMinutes(30); firstRow++; } var lastRow = firstRow; while (!(time.Hour == outputSettings.WeekPrimeTimeEnd.Hour && time.Minute == outputSettings.WeekPrimeTimeEnd.Minute)) { time = time.AddMinutes(30); lastRow++; } range = workSheet.Range[GetColumnLetterByIndex(firstColumn) + firstRow + ":" + GetColumnLetterByIndex(lastColumn) + lastRow]; range.Font.Name = outputSettings.BodyFont.Name; range.Font.Size = outputSettings.PrimeTimeSpecialFontSize; range.Font.Bold = outputSettings.BodyFont.Bold; range.Font.Italic = outputSettings.BodyFont.Italic; } { var firstColumn = workSheet.Range["day7"].Column; var lastColumn = workSheet.Range["day7"].Column; var firstRow = workSheet.Range["day7"].Row + 1; var time = new DateTime(1, 1, 1, 5, 0, 0); while (!(time.Hour == outputSettings.SundayPrimeTimeStart.Hour && time.Minute == outputSettings.SundayPrimeTimeStart.Minute)) { time = time.AddMinutes(30); firstRow++; } var lastRow = firstRow; while (!(time.Hour == outputSettings.SundayPrimeTimeEnd.Hour && time.Minute == outputSettings.SundayPrimeTimeEnd.Minute)) { time = time.AddMinutes(30); lastRow++; } range = workSheet.Range[GetColumnLetterByIndex(firstColumn) + firstRow + ":" + GetColumnLetterByIndex(lastColumn) + lastRow]; range.Font.Name = outputSettings.BodyFont.Name; range.Font.Size = outputSettings.PrimeTimeSpecialFontSize; range.Font.Bold = outputSettings.BodyFont.Bold; range.Font.Italic = outputSettings.BodyFont.Italic; } } var values = new object[48, 7]; for (var j = 0; j < 48; j++) for (var i = 0; i < 7; i++) values[j, i] = weekDays[i].ProgramActivities[j].Program; workSheet.Range["Data"].Value2 = values; for (var i = 0; i < 7; i++) { range = workSheet.Range["day" + (i + 1)]; range.Formula = weekDays[i].Date.ToString(landscape ? "dddd M/d" : "ddd M/d"); var columnIndex = range.Column; var rowIndex = range.Row + 1; var programName = string.Empty; var firstRow = 0; for (var r = 0; r < 48; r++) { object value = workSheet.Range[GetColumnLetterByIndex(columnIndex) + (rowIndex + r)].Value; var currentProgramName = value != null ? value.ToString() : string.Empty; if (currentProgramName.Equals(programName)) continue; if (!string.IsNullOrEmpty(programName)) workSheet.Range[GetColumnLetterByIndex(columnIndex) + firstRow + ":" + GetColumnLetterByIndex(columnIndex) + (rowIndex + r - 1)].Merge(); firstRow = rowIndex + r; programName = currentProgramName; } } for (var i = 0; i < 7; i++) { range = workSheet.Range["day" + (i + 1)]; var columnIndex = range.Column; var r = 0; object value; do { value = null; var rowIndex = 0; var rowRange = range.Offset[r]; try { value = rowRange.Formula; rowIndex = rowRange.Row; } catch { } if (value != null) { var programName = string.Empty; var firstColumn = 0; for (var j = i; j < 7; j++) { object nextValue = null; try { nextValue = rowRange.Offset[ColumnOffset: j].Value; } catch { } var currentProgramName = nextValue != null ? nextValue.ToString() : string.Empty; if (currentProgramName.Equals(programName)) continue; if (!string.IsNullOrEmpty(programName)) workSheet.Range[GetColumnLetterByIndex(firstColumn) + rowIndex + ":" + GetColumnLetterByIndex(columnIndex + j - 1) + rowIndex].Merge(); firstColumn = columnIndex + j; programName = currentProgramName; } } r++; } while (value != null && r <= 48); } var dataRange = workSheet.Range["Data"]; dataRange.Rows.AutoFit(); //set correct page breaks var fisrtColumnNumber = workSheet.Range["day1"].Column; var lastColumnNumber = workSheet.Range["day7"].Column; var pageBreaks = workSheet.HPageBreaks; for (var i = 1; i <= pageBreaks.Count; i++) { var currentBreakRow = pageBreaks[i].Location.Row; var newBreakRow = currentBreakRow; var beforeRange = pageBreaks[i].Location; for (var j = fisrtColumnNumber; j <= lastColumnNumber; j++) { Range cellRange = workSheet.Cells[currentBreakRow, j]; if (!cellRange.MergeCells) continue; if (beforeRange.Row > cellRange.MergeArea.Row) { beforeRange = cellRange.MergeArea; newBreakRow = beforeRange.Row; } } if (newBreakRow != currentBreakRow) workSheet.HPageBreaks.Add(beforeRange); } workSheet.Copy(After: destinationWorkBook.Worksheets[worksheetIndex]); worksheetIndex++; workSheet = destinationWorkBook.Worksheets[worksheetIndex]; workSheet.Name = weekDays.FirstOrDefault().Date.ToString("MMddyy") + "-" + weekDays.LastOrDefault().Date.ToString("MMddyy"); sourceWorkBook.Close(); } destinationWorkBook.Worksheets[1].Delete(); if (convertToPDF) destinationWorkBook.ExportAsFixedFormat(Filename: destinationFilePath, Type: XlFixedFormatType.xlTypePDF); else destinationWorkBook.SaveAs(destinationFilePath, XlFileFormat.xlWorkbookNormal); destinationWorkBook.Close(); } catch { } finally { ExcelHelper.Instance.Disconnect(); } }