Реализация switch...case конструкции в формуле SharePoint и Excel

При обработке заказов, хранящихся в списке SharePoint, использовались статусы 'Новый', 'В работе', 'Выполнен', 'Прекращен'. Требовалось создать сортировку, при которой сначала выводились бы заказы со статусом 'Новый', потом 'В работе', 'Выполнен' и 'Прекращен'. Сортировка по алфавиту не подходила.

Реализацию планировал сделать без использования серверного кода, благо вариантов для реализации видел несколько. Но остановился на том, который был мне проще.

Для создания сортировки решил создать поле, в котором статус имел бы впереди некий индекс, по которому осуществлялась бы сортировка, например, '1. Новый', '2. В работе', '3. Выполнен', '4. Прекращен', чтобы по этому полю и сделать сортировку.

Для этого нужно создать в списке столбец типы "Вычисляемый по другим столбцам" и написать формулу. Идеально для решения подходит вариант, в котором можно было бы написать условия, по аналогии с оператором switch ... case. Ниже пример кода на Javascript.

switch (expr) {
  case 'Новый':
    console.log('1. Новый');
    break;
  case 'В работе':
    console.log('2. В работе');
    break;
  case 'Выполнен':
  case 'Выполнен почти':
    console.log('3. Выполнен');
    break;
  case 'Прекращен':
    console.log('4. Прекращен');
    break;
  default:
    console.log('Неподдерживаемое значение' + expr + '.');
}

console.log("Статус заказа: " + expr);

 

Но только формулы SharePoint, они же как минимум на 90% формулы из MS Excel, не имеют такого оператора switch ... case. Чаще всего в Excel я использую формулу "СЦЕПИТЬ", для генерации SQL запросов. Но тут пришлось подумать про использование условий.

Формула ЕСЛИ в Excel для русской локации имеет такой формат:

ЕСЛИ(выражение истинно; то сделать это; иначе сделать это)

Т.е. для реализации конструкции switch ... case нужно написать каскад вложенных операторов ЕСЛИ.
Ниже запись формуля для SharePoint. 'Статус' - это название столбца.

 

=ЕСЛИ((Статус="Новый");"1. Новый"; 
        ЕСЛИ((Статус="В работе");"2. В работе"; 
                ЕСЛИ(НЕ(ЕОШ((НАЙТИ("Выполнен";Статус))));"3. Выполнен"; 
                        ЕСЛИ((Статус="Прекращен");"4. Прекращен"; 
                                ) 
                        ) 
                ) 
        ) 

 

А вот так будет запись для Excel:

=ЕСЛИ((А1="Новый");"1. Новый"; 
        ЕСЛИ((А1="В работе");"2. В работе"; 
                ЕСЛИ(НЕ(ЕОШ((НАЙТИ("Выполнен";А1))));"3. Выполнен"; 
                        ЕСЛИ((А1="Прекращен");"4. Прекращен"; 
                                ) 
                        ) 
                ) 
        )

 
Для записи подобных формул лично я пользуюсь редактором Notepad++, после чего копирую текст в буффер и вставляю в окно формул в Excel или SharePoint.

 


Комментариев нет »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment






MarkiMarta.ru. Записки отца-программиста" с 2009 г.
Категория информационной продукции 18+
Яндекс.Метрика