воскресенье, 1 марта 2015 г.

Сортировка в LibreOffice Calc

Это очень простая тема, которую большинство знает. И наверное, из-за того, что приходится часто говорить о простых вещах, большая часть статьи может показаться скучной. Но так как я не уверен в уровне читающего, а по практике знаю, что иногда спрашивают даже элементарные вещи (типа, где кнопка), я буду вести рассказ с самого начала. Я постарался изложить максимум известного мне материала по теме сортировки в LibreOffice Calc, и надеюсь что эта статья будет полезна не только начинающим.

Простая сортировка

Однажды в одной из групп поддержки был задан вопрос про удобную сортировку. Если честно, я немного не ожидал такого простого вопроса, но наверное, действительно, стоит начать как всегда с самого элементарного и двигаться по направлению к сложному. Так где же находится сортировка?

Кнопки и меню сортировки в LibreOffice Calc

По умолчанию, существуют кнопки для быстрой сортировки на панели, а также пункт меню в «Данные» → «Сортировка...» для более «изощрённой». В зависимости от темы значков, которую вы используете, кнопки могут отличаться по виду. Если вам не удаётся найти их, щёлкните по панели правой клавишей мыши и поищите их в контекстном меню в разделе «Показать кнопки». Для пункта меню «Сортировка...» можно назначить горячие клавиши, по аналогии того, как я описывал это в прошлой статье.

Принципы сортировки

Чтобы понимать, когда нам действительно нужно залезать в меню, а когда мы можем обойтись только кнопками на панели, давайте обсудим поведение сортировки по умолчанию. Хочу в самом начале заметить, что поведение может немного меняться от версии к версии. Связано это с тем что сообщество, в том числе и разработчики, имеет свои идеи по поводу этого вопроса. Я буду основывать своё описание на версии 4.3.6, хотя по сравнению 4.3.5 я особых изменений не заметил. Итак, приступим.
Первое, что нужно отметить. Быстрая сортировка происходит в столбцах. То есть информация сортируется по вертикали. Для того чтобы отсортировать диапазон в строках нужно использовать меню.
Второе, как бы это не было удивительно, первая строка считается заголовком таблицы. Да, для некоторых людей это непривычно. Но хорошим тоном является указание заголовков для данных. Исключением из этого правила будет, если в нашем диапазоне присутствуют только числа. При сортировке чисел первая строка (с числами) не будет считаться заголовком. Тоже самое будет, если у значения в заголовке присутствует только число. Давайте с примером:

Примеры диапазонов для сортировки

Как видите, хотя было сказано много слов, всё достаточно просто. Одно примечание к этому: римские цифры это буквы, не забывайте про это. :)
Третье, сортируемый диапазон окружен пустыми строками и столбцами. В примере выше, у меня в документе 6 отдельно сортируемых диапазонов. Как вы понимаете, это очень удобно, когда нам нужно иметь несколько небольших диапазонов рядом.
Ещё одна вещь, которую стоит отметить сразу, мы не можем сортировать диапазон, в котором есть объединённые ячейки. В примере выше, я отделил объединённые ячейки пустой строкой. Если этого не сделать, то мы будем получать предупреждение:

Сообщение при сортировки с объединёнными ячейками

Тот же эффект получится, если объединённые ячейки будут в столбцах.
Последнее, что стоит помнить, при быстрой сортировке используется алфавитно-цифровое соотношение. То есть дни недели, месяцы и другие списки сортировки будут отсортированы по алфавиту, а не по порядку.
Теперь когда нам известны правила для диапазона, можно приступить к самой сортировке. Начинать сортировку можно по-разному, самый простой способ — это поставить курсор в ячейку столбца, по которому мы будем сортировать. Не важно в какую ячейку ставить, в первую, в последнюю или где-то посередине. Тот столбец, в который вы поставили курсор, будет считаться ключевым. При быстрой сортировке диапазон сортируемых данных автоматически будет расширен до полного диапазона. Но сортировка будет происходить только в ключевом столбце. В столбцах, примыкающих к ключевому диапазону, сортировка происходить не будет. Согласен что это не очень удобно, но вот так пока. Главное, что при этой сортировке соотношение данных по строкам сохраняется. То есть из примера выше, если «Апрелю» соответствует «четверг», а «Марту» — «среда», то после сортировки это соответствие сохранится.
Другой способ — это выделить диапазон, который мы хотим отсортировать. И после нажатия кнопки сортировки на панели, если наш выделенный диапазон имеет смежные непустые ячейки, мы получим следующее предложение:

Сообщение с предложением расширить диапазон в LibreOffice Calc

На скриншоте видно, что я выделил диапазон С4:С9 («День недели»). LibreOffice Calc автоматически определил, что рядом с выделенным диапазоном присутствуют непустые ячейки и обвёл предполагаемую область синей рамкой. В диалоговом окне же я могу согласится с предлагаемым диапазоном, нажав кнопку «Расширить выделение»; отказаться от предлагаемого расширения, нажав «Текущее выделение», если я уверен, что хочу отсортировать только один столбец; и отметить вообще сортировку, если я потерял к ней интерес на данном шаге. Предупредительность Calc вызвана тем, что мы можем выделить только часть диапазона по разным причинам (например, заполняли его только что) и, например, из-за усталости или спешки забыли об этом.

Окно Сортировки

Чаще всего в LibreOffice Calc нам достаточно быстрой сортировки. Но людей, которые привыкли работать со сложными таблицами, могут не удовлетворить её возможности. Поэтому давайте рассмотрим «медленную», но более настраиваемую сортировку. Как вы, наверное, уже поняли, мы должны будем воспользоваться меню «Данные» → «Сортировка...».
Окно «Сортировка» имеет две вкладки: первая из них называется «Условия сортировки» и служит для указания порядка сортировки, второе называется «Параметры» и предназначено для указания параметров отличных от тех, что установлены по умолчанию. Обе вкладки интуитивно понятны, поэтому я не буду слишком подробно комментировать всё, остановлюсь лишь на моментах, которые могут ускользать.
Давайте начнём описание со второй вкладки - «Параметры». Это позволит проще воспринять первую. Вот её скриншот:

Скриншот окна для настройи параметров сортировки в LibreOffice Calc

«Учитывать регистр» – как вы понимаете, при установке этого флажка Прописные и строчные буквы будут считаться разными, поэтому при сортировке сначала одинаковые слова будут со строчной буквы, а за тем с прописной. По умолчанию этот флажок не стоит.
«Диапазон содержит метки столбцов» – этот флажок по умолчанию установлен, когда LibreOffice Calc может определить, что у диапазона таблицы могут быть заголовки. Принципы определения заголовков я рассказывал выше, в разделе про быструю сортировку. Естественно, если этот флажок стоит, Calc считает, что заголовки есть, если не стоит, то сортируется весь диапазон. Кстати, если в разделе «Направление» (внизу окна) выставить переключатель в положение «Слева направо», то этот пункт будет звучать как «Диапазон содержит метки строк», но действовать он будет аналогично. Когда мы сортируем диапазон с заголовками, содержащими только числа, нужно не забывать ставить флажок, или если у нас нет заголовков, то проверить, не забыли ли мы его снять.
«Включая форматы» – обычно, когда мы сортируем таблицу, мы бы хотели, чтобы формат ячейки (например её цвет) перемещался вместе со значениями которые мы сортируем. По умолчанию этот флажок всегда стоит, и при быстрой сортировке форматы ячеек перемещаются как и задумано. Но нам нужно это не всегда. Кстати, чтобы сортировались объединённые ячейки, этот флажок нужно снять, тогда сообщения с предупреждением не будет. Но, я хотел бы предупредить, что объединённые ячейки при этом сортируются, мягко говоря, очень странно. Программа воспринимает их как одну заполненную ячейку и несколько пустых (в зависимости от того сколько объединено). При сортировке, например по возрастанию, все пустые ячейки уходят вниз, а все заполненные вверх. Но в верхней объединённой ячейке всё равно будет показано только одно значение. Чтобы увидеть остальные значения в ней, нужно её разбить. Я помню такое поведение ещё с версии 3.6. И если честно, не вижу в такой сортировке особого смысла, поэтому рекомендую избавляться от объединения ячеек при необходимости сортировки данных.
«Включить естественную сортировку» – естественная сортировка — это сортировка, привычная глазу человека. Например, если у нас есть значения №1, №2, … , №19, №20, то после обычной сортировки мы получим результат №1, №10, №11, …, №2, №20. С точки зрения сортировки это действительно верно, потому что происходит сравнение символов, но для человеческого взгляда это не правильно. Чтобы такие значения сортировались «правильно» и придумана такая возможность.
«Копировать результат в:» – позволяет скопировать результат сортировки в другой диапазон. Можно задать только верхний левый угол диапазона, при этом если диапазон на этом же листе документа, то можно просто указать адрес ячейки, а если на другом, то нужно указывать имя уже существующего листа и через точку адрес ячейки. Как вы видите, минус в том, что нет диалога для выбора диапазона, всё нужно ручками.
«Порядок сортировки, определённый пользователем» – позволяет сортировать значения по определённому порядку. Например, названия месяцев и дней недели по умолчанию будут отсортированы по алфавиту, но это не удобно для восприятия. Поэтому можно использовать эту функцию, чтобы отсортировать их по порядку. По умолчанию списки сортировки имеют только сокращённые и полные названия месяцев и дней недели, но их можно настроить. О настройке этих списков речь пойдёт ниже, а пока я продолжу рассказ про это замечательное диалоговое окно.
Список «Язык» позволяет выбрать язык для сортировки. А в поле «Параметры», мы можем (на самом деле нет) выбрать параметры, свойственные для элементов языка. Например, для немецкого языка мы можем выбрать параметр «телефонная книга», который позволяет учитывать умляуты (это точечки над буквами в германских языках). Почему же не можем? Телефонная книга в немецком языке — это единственный выбор, который мы можем сделать в этом списке, больше я не нашёл вариантов вообще. В других языках поле заблокировано и содержит только одно значение «Алфавитно-цифровой». Ну как вы понимаете, выбор сделать можно, но делать его из русскоговорящих вряд ли кто будет.
В разделе «Направление» можно выбрать направление сортировки. Обычно все наши таблицы имеют вертикальную направленность, но не всегда. Именно для таких случаев, когда нам нужно сортировать значения в строках, и предназначен этот пункт. Думаю с переключателями вы разберётесь сами.

Скриншот окна для настройи условий сортировки в LibreOffice Calc

Вкладка «Условия сортировки» достаточно проста, но всё же давайте немного на ней задержимся. Так же как и при быстрой сортировке, LibreOffice Calc пытается найти заголовки таблицы, поэтому если он может предположить, что в таблице есть заголовки, или если мы поставили флажок «Диапазон содержит метки столбцов» на вкладке «Параметры», то в списке «Условия сортировки» будут указываться значения заголовков. В случае, когда заголовков по мнению программы нет, будут указываться адреса столбцов или строк (например, «Столбец B» или «Строка 20»).
На одних из курсов по Excel я был сильно удивлён, что не все понимают, как проходит сортировка по условиям для многих столбцов. Поэтому, для тех, кто в этом не разбирается, я хотел бы сделать небольшое пояснение. Допустим, мы сортируем по двум условиям. Тогда, в начале будет отсортирован столбец, указанный в первом условии. А потом, внутри диапазонов, в которых в первом столбце значения одинаковы, будут отсортированы значения в столбце, указанном во втором условии. При этом не важно, какие именно это столбцы и по порядку ли они стоят в таблице. В итоге, сортируя по нескольким условиям, «корректно» отсортирован будет только столбец, указанный в первом условии, все остальные сортируются относительного него. Если мы используем третье условие, то столбец, указанные в нём, будет сортироваться относительно второго, и т. д. Для строк всё будет аналогично.
При указании первых трех условий сортировки, появляется возможность указать еще. Я дошел до 26 условий, и думаю, что могу заявить с долей уверенности, что почти в 100% случаев, условий для сортировки будет достаточно. Другая, менее приятная вещь, это то, что при задании условия для сортировки, диапазон для этого условия не пропадает из списка, что приводит к некоторой путанице. Порядок сортировки будет определяться по первому из повторно заданных значений, так что будьте внимательнее, когда у вас их много.

Настройка списков сортировки

Выше я обещал рассказать про списки сортировки подробнее. Ну что же, пришло время. Списки сортировки — это простое перечисление элементов, которое позволяет сортировать значения по определённому порядку. Обратимся к примеру. Как я говорил выше, римские цифры сортируются как латинские буквы, то есть при сортировке диапазона значений от I до X, после IV будет IX, а не V, как это можно было бы ожидать. Исправить такое поведение можно как раз списком сортировки. Пройдите в главном меню «Сервис» → «Параметры», выберите раздел «LibreOffice Calc» → «Списки сортировки».

Скриншот окна для настройи списков сортировки в LibreOffice Calc

Нажмите кнопку «Создать» и в поле «Элементы» введите нужные значения (для этого примера римские цифры от I до X). Вводить их можно через запятую (без пробела, потому что пробелы не вырезаются и остаются частью значения) или каждый элемент с новой строки (используйте Enter). После этого нажмите кнопку «Добавить». Если вы передумали создавать новый список, можно нажать «Отмена». Редактировать список нельзя, и это самое обидное в этом функционале. Если вы сделали ошибку при создании списка или хотите его изменить, нужно будет удалить его и создать заново. Когда списки небольшие, в этом нет ничего страшного. А если большие? Можно сделать список прямо на листе одним диапазоном, затем выделить его и пройти в это диалоговое окно. Внизу диалогового окна есть поле «Копировать список из:», в этом поле содержится адрес выделенного диапазона. Нажмите кнопку «Копировать», и новый список будет создан автоматически.
Если мы рассматриваем римские цифры, то конечно сортироваться правильно они будут не все, но только те, что в пределах того диапазона значений, которые вы укажете. Я знаю, что это не очень удобно, но может стать интересным инструментом. Другим способом использовать этот функционал может быть список торговых точек, менеджеров, названий бригад, если вам важна последовательность их при сортировке.
Ещё одним способом использования этого списка может быть сортировка по нескольким столбцам. Например у нас два столбца. В одном из них названия месяцев, в другом — дни недели. Если вы попробуете отсортировать по списку оба столбца, то поймёте, что это можно сделать только по очереди. Можно конечно написать макрос, но можно воспользоваться списками сортировки. Создайте новый список с названиями месяцев и дней недели (все названия в одном списке, в начале, скажем, месяцы, потом дни). После этого в «Условиях сортировки» укажите ключевые столбцы, выберите на вкладке «Параметры» в списке порядка сортировки этот список. И можно радоваться прекрасно отсортированной таблице.
Ещё один маленький секрет, который вам может пригодиться. Списки сортировки участвуют в Автозаполнении. Вы скорее всего в курсе, что если в ячейку ввести число, а затем выделив её, схватить за маленький квадратик справа внизу выделенной ячейки и потянуть, то смежные ячейки, в направлении куда вы тянете, будут заполняться автоматически. То же самое будет происходить с днями недели и месяцами, и с любым списком, который вы создадите. Исключением будет, если в разных списках есть одинаковые элементы, в этом случае будет использоваться первый список. Как это можно применить? Это уже зависит от вашей фантазии.

Дополнительная литература и источники