Сортировка в таблице html неправильно сортирует числа

Сортировка - это расположение строк в таблице в определенном порядке. Чаще всего необходимо сортировать строки по данным одного или нескольких столбцов.

Сортировку можно производить как по возрастанию, так и по убыванию.

При сортировке по возрастанию используется следующий порядок. Сначала числа от наименьшего отрицательного до наибольшего положительного числа, затем различные знаки (+, -, !, и др.), затем английские буквы, затем русские буквы. При сортировке по убыванию порядок заменяется на обратный.

При сортировке строка заголовков столбцов обычно не сортируется вместе с остальными строками, но сортируемая таблица может и не иметь заголовков столбцов. Последняя строка включается в диапазон сортировки, поэтому нежелательно сортировать таблицы, содержащие итоговые строки.

Как правило, при сортировке упорядочиваются целиком строки, но можно сортировать и отдельные ячейки столбца.

Сортировку таблицы можно выполнять при работе во вкладке Главная или Макет .

Сортировка таблицы производится следующим образом:

Установите курсор в любую ячейку таблицы.

Нажмите кнопку Сортировка в группе Абзац вкладки Главная или в группе Данные вкладки Макет .

В окне Сортировка в открывающемся списке поля Сначала по выберите столбец, по данным которого будет выполняться сортировка таблицы. В списке поля Т ип можно выбрать тип данных, по которым сортируется таблица, но обычно Word это делает автоматически. Установите переключатель направления сортировки по возрастанию или по убыванию.

В окне Параметры сортировки установите флажок только столбцы

8.4. Вычисления в таблице

В таблицах Word можно выполнять несложные вычисления с использованием формул. Для этого:

Установите курсор в ячейку, в которой требуется получить результат вычисления.

Во вкладке Макет в группе Данные нажмите кнопку Формула . Если эта кнопка не отображается, щелкните по стрелке кнопки Данные и, после отображения кнопки, нажмите ее.

В окне Формула (рис. 8.6) в поле Формула введите формулу. Для выбора функции можно воспользоваться списком поля Вставить функцию . При желании в списке поля Формат числа можно выбрать числовой результат вычисления (числовой с разделителем разрядов, денежный, процентный).

Рис. 8.6. Создание формулы в ячейке

В некоторых случаях формула в окне Формула может быть записана автоматически. Например, если ячейка находится ниже ячеек с числами, будет записана формула = SUM (ABOVE) , что означает суммирование всех вышерасположенных ячеек. Если ячейка находится правее ячеек с числами, будет записана формула = SUM (LEFT) , что означает суммирование всех слева расположенных ячеек. Если требуется именно такое действие, можно применить эти формулы. В противном случае поле следует очистить и ввести формулу самостоятельно.

Формула вставляется в ячейку таблицы как специальное поле. При изменении значений в вычисляемых ячейках результат не будет автоматически изменяться. Для пересчета следует выделить ячейку и нажать клавишу F9.

8.5. Размещение таблицы в документе

Установка режима обтекания текстом.

Вставленная в документ таблица по умолчанию размещается без обтекания текстом с выравниванием по левому полю страницы.

Для выравнивания таблицы по краям страницы достаточно ее выделить и воспользоваться кнопками группы Абзац вкладки Главная . При таком выравнивании таблицы режим обтекания текстом не изменяется.

Изменить режим обтекания и положение таблицы можно следующим образом:

Наведите указатель мыши на маркер перемещения таблицы, расположенный около ее верхнего левого угла так, чтобы около него отобразилась четырехнаправленная стрелка.

Нажмите на левую кнопку мыши и перетащите маркер. В процессе перетаскивания граница таблицы будет отображаться пунктиром.

Можно точно настроить положение таблицы на странице документа. Для этого:

Установите курсор в любой ячейке таблицы.

Во вкладке Макет в группе Таблица нажмите кнопку Свойства .

Во вкладке Таблица окна Свойства таблицы в разделе Обтекание выберите режим В округ и нажмите кнопку Размещение .

В окне Размещение таблицы (рис. 8.7) в разделе По горизонтали в раскрывающемся списке относительно можно выбрать, относительно какого элемента страницы будет выравниваться таблица: колонки, поля или страницы, а в списке поля Положение можно выбрать расположение таблицы (Слева , Справа , От центра , Внутри , Снаружи ) или ввести с клавиатуры требуемое значение в сантиметрах. Аналогично можно указать размещение таблицы и по вертикали.

Рис. 8.7. Установка положения таблицы

Для отказа от режима обтекания таблицы текстом следует установить курсор в любой ячейке таблицы, во вкладке Макет в группе Таблица нажать кнопку Свойства , во вкладке Таблица окна Свойства таблицы в разделе Обтекание выбрать режим нет .

Перенос заголовков таблицы на следующую страницу.

При создании таблиц, размещаемых на нескольких страницах, необходимо, чтобы названия столбцов таблицы отображались и печатались на каждой странице документа. Для этого:

Установите курсор в первую строку таблицы или, если в качестве заголовков используется несколько первых строк, выделите их.

Во вкладке Макет в группе Данные нажмите кнопку Повторить строки заголовков .

Преобразование таблицы в текст.

Всю таблицу или ее фрагмент можно преобразовать в текст. Для этого:

Установите курсор в любую ячейку таблицы или выделите преобразуемый диапазон

Во вкладке Макет в группе Данные нажмите кнопку Преобразовать в текст .

В окне Преобразование в текст укажите символ, который будет разделять фрагменты текста, сформированные из отдельных ячеек таблицы. Это может быть один из типовых символов (знак абзаца, знак табуляции или точка с запятой) или любой символ по вашему усмотрению, например, точка, пробел, запятая и т. п. В этом случае установите переключатель другой, поставьте курсор в рядом расположенное поле и с клавиатуры введите символ разделителя. Если таблица содержит вложенные таблицы, их также можно преобразовать в текст (флажок вложенные таблицы).

Рис. 11.20. Преобразование таблицы в текст

Выбранный разделитель разделяет данные ячеек одной строки; независимо от выбранного разделителя разделителем строк таблицы является знак абзаца.

Месяц у меня вылеживалась эта дура на 10 листов. Нашла, подправила. Пусть будет...

Попробую описать реализацию своего класса для динамической сортировки строк таблицы в JavaScript. "Ни пуха" мне...

План таков: Постановка задачи

Максимально универсальная функция должна:

  • Легко подключаться, не зависеть от дизайна, никакого JS-кода не должно быть в объявлении таблицы.
  • Корректно работать для строковых и числовых значений.
  • Корректно обрабатывать теги внутри ячеек таблицы.
  • Автоматически менять вид заголовка столбца в зависимости от направления сортировки.
  • Корректно работать во всех распространенных браузерах. В моем понимании это IE, Opera и FF. В других теоретически тоже должно работать.
Выбор алгоритма сортировки

Из множества алгоритмов сортировки здесь выбираем самый простой. Суть такова: находим наименьший (или наибольший - в зависимости от порядка сортировки) элемент массива, меняем его местами с первым элементом. Далее находим второй наименьший (или наибольший), и меняем его со вторым. Ну и так далее.

Для наглядности привожу классическую реализацию алгоритма сортировки массива по возрастанию:

var arr = new Array(4, 5, 1, 3, 2); for (var i=0; i str2) return false; } if(len1 < len2) return true; return false; } function quickSort(l, h, type) { var low = l; var high = h; var rt = eval("txt[ " + Math.round((l + h) / 2) + " ]"); var middle = new fillArray(rt.years, rt.books, rt.authors); do { while(isLow(eval("txt[ " + low + " ]"), middle, type)) low++; while(isLow(middle, eval("txt[ " + high + " ]"), type)) high--; if(low значение), где ключ отвечает за номер строки. Но лично мне проще использовать двумерный массив, чтобы не запутаться между ключами и значениями.

На примере моей таблицы:

А первые значения массива указывают, в каком порядке будут идти строки отсортированной таблицы.

Кстати, данный метод аналогичен сортировке в MySQL с использованием вре́менных таблиц.

Во временный массив желательно класть подготовленные значения, которые быстро и легко сравнивать. Лишнее (тэги и css) надо отбросить, отформатированные числа перевести в обычные числа (20 000 → 20000), а строки можно превратить в некие эквиваленты. Например, в моём случае единственный текстовый столбик содержит только два слова: свободен и бронь . У них разная длина, а значит, во временный массив можно записать только длину слов — этого хватит для корректного сравнения.

var z=$(this).children("td").eq(i_s).html().split(" ").join(""); //убираем пробелы
if(isFinite(z)) {z=parseInt(z);} else {z=z.length;} //число остаётся числом, а у строк оставляем только длину

В яваскрипте есть готовый алгоритм сортировки, использующий функцию сравнения двух элементов:

function sName(a,b) { //задаём функцию сравнения
if(a < b) {return (-1)*s_vozr;}
else if(a > b) {return s_vozr;}
else {return 0;}
}

multi.sort(sName); //сортируем массив multi, указав функцию sName

Функция sName(a,b) возвращает −1, 0 или 1. Если умножить возвращаемое значение на −1, то это изменит направление сортировки (по возрастанию или по убыванию). Таким образом, при помощи параметра s_vozr можно управлять направлением сортировки (если повторно кликнули по столбцу, параметр s_vozr меняет знак).

Перестановка строк таблицы

Теперь надо как-то удалить старую таблицу и показать новую, отсортированную. Тесты я не проводил (буду благодарен за ссылки в комментариях), но почти уверен, что экономичнее перемещать небольшие кусочки данных (то есть строки), чем парсить заново всю таблицу. Если это и не оптимизировано сейчас, то в будущем перемещение элементов должно занимать меньше времени, чем удаление старых и обработка новых элементов; а в нашем случае речь идёт о вставке довольно большой таблицы.

Как переделать старую таблицу в новую, используя перемещение строк? Пройдёмся в цикле по нашему вре́менному массиву, перемещая нужные строчки таблицы в её конец.

От того, куда перемещать строки — в конец или в начало — очевидно, зависит получаемое направление сортировки. Но эффективнее их сдвигать именно в конец. А если нужно изменить направление сортировки, то лучше пройтись по массиву в обратную сторону (или изначально сформировать обратный массив).