コード例 #1
0
 /// <summary>
 /// Добавить формат для условного форматирования ячеек.
 /// Возвращает индекс добавленного формата.
 /// </summary>
 /// <param name="formatsList">Объект содержащий форматы данного типа</param>
 /// <param name="format">Новый формат</param>
 /// <returns>Индекс добавленного формата</returns>
 public static uint AddDFormat(this DifferentialFormats formatsList, DifferentialFormat format)
 {
     formatsList.Append(format);
     if (formatsList.Count != null)
     {
         formatsList.Count.Value++;
     }
     return((uint)format.Index());
 }
        /// <summary>
        /// Добавить условное форматирование
        /// </summary>
        /// <param name="worksheet">Лист в который добавляется форматирование</param>
        /// <param name="formattingExpression">Выражение которое определяет ячейки для форматирования</param>
        /// <param name="style">Стиль условного форматирования</param>
        /// <param name="targetCellAddresses">Области ячеек для которых будет задействовано данное условие</param>
        public static void AddFormattingRule(this Worksheet worksheet, string formattingExpression, DifferentialFormat style, params string[] targetCellAddresses)
        {
            if (targetCellAddresses == null || targetCellAddresses.Count() == 0)
            {
                targetCellAddresses = new string[] { "1:1048576" };
            }

            var styleSheet = worksheet.GetWorkbookPart().GetStylesheet();

            if (styleSheet.DifferentialFormats == null)
            {
                styleSheet.DifferentialFormats = new DifferentialFormats()
                {
                    Count = 0
                };
            }
            var dfList = styleSheet.DifferentialFormats;

            dfList.AddDFormat(style);
            var formattingRule = Fabric.MakeFormattingRule(formattingExpression);

            formattingRule.FormatId = (uint)style.Index();

            IEnumerable <StringValue> stringValues = targetCellAddresses.Select(rng => new StringValue(rng));
            var sqref          = new ListValue <StringValue>(stringValues);
            var condFormatting = new ConditionalFormatting(formattingRule)
            {
                SequenceOfReferences = sqref
            };

            worksheet.Insert(condFormatting).AfterOneOf(
                typeof(MergeCells)
                , typeof(CustomSheetView)
                , typeof(DataConsolidate)
                , typeof(SortState)
                , typeof(AutoFilter)
                , typeof(Scenarios)
                , typeof(ProtectedRanges)
                , typeof(SheetProtection)
                , typeof(SheetCalculationProperties)
                , typeof(SheetData)
                );
        }