Поместится ли текст в ячейке? (с примерами использования: авторазмер шрифта, перенос строк)
На просторах интернета я встречал различные решения, но все они носили «вероятностный» характер и строились на определении среднего размера символа (или максимального размера), вычислением длины строки, количеством строк, используя всяческие эмпирические коэффициенты, и всё равно не могли гарантировать, что текст поместится в ячейку.
Единственное решение, близкое к задаче, которое я нашел: Автоматический подбор размера шрифта в объекте РисунокТабличногоДокумента. Но оно для размещения текста в РисунокТабличногоДокумента, а не в область как в данной статье. Оно требует предварительной подготовки, но ничего проще именно для РисункаТабличногоДокумента на данный момент мне неизвестно (попытку упрощения см ниже).
Дальнейший поиск в интернете подтвердил существование как самой проблемы, так и наличие сложностей с её решением. Стоит признать, обсуждения сводились, как это часто бывает, к тому, что автор вопроса просит о никому не нужном функционале. И вообще, автор такого вопроса в ходе осуждения приобретал статус борца с ветрянными мельницами.
Сам я эту проблему зачастую обходил теми или иными путями. И это всех удовлетворяло: и меня, и заказчиков. Видимо, из-за того, что встречается она редко:
1. В ценниках. Наименование товара обычно центрируют по высоте, и при очень длинном наименовании его начало и конец имеют риск не поместиться в отведенное ему место (а в ценниках обычно отключают автовысоту). Из этого положения два выхода:
а) Выбирать тот или иной шаблон ценника. Не реализовано в примерах.
б) Подгонять размер текста под ценник. Реализовано в примерах:
2. И когда наименование нужно написать на несколько строк:
мне же больше по душе выводить его так (с автоматическим переносом слов):
Намучавшись за два вечера, пришел, надеюсь, к простому решению:
4. Если высота ячейки изменилась в большую сторону — значит, текст не помещается.
Высоту ячейки в мм будем измерять с помощью вставки в ячейку Рисунка и измерением его размеров.
Функция для определения вместится ли текст в ячейку:
Для возможности использования этого метода необходимо соблюдать следующие условия:
2. Заполнение области = Текст, а не Параметр или Шаблон. В принципе, можно использовать и то и другое, но код становиться мудрёней. Во всяком случае, я ничего простого не придумал. И так как жизнь это усложняет не сильно не стал заморачиваться из-за этого.
3. Размещение текста = Перенос. Вот это нужно обязательно! Размещение текста програмно поставить можно, но эффект от изменения, насколько я понял, появляется только после отображения табличного документа с этой ячейкой.
4. Область из одной строки. Т.е. объединять ячейки по вертикали нельзя (в тех которых должен проверяться текст). Исправлено в процессе публикации: создается копия табличного документа с областью и уже меняются её свойства, а не самого табличного документа.
1. Пример с подбором размера шрифта с использованием функций из статьи.
2. Оптимизированный по быстродействию пример подбора размера шрифта с небольшой модификацией кода (но подбор размера шрифта — не оптимальный. Ниже есть некая попытка его вычилить а не уменьшать каждый раз на 1).
4. Подбор размера шрифта в элементе «Рисунок табличного документа».
Рисунок табличного документа (Надпись):
Скажу сразу, на больших текстах, работает ужасно долго.
Так вот, с рисунком табличного документа (далее «надписью») пришлось повозиться. Всё дело в том, что при установленом свойстве «Авторазмер» сами размеры подгоняются под текст только после их отображения. Здесь вариантов два:
1. либо ждать какое время и затем смотреть размеры, например так: ПодключитьОбработчикОжидания(«ИзмеритьРазмеры», 0.1, Истина)
2. либо «заставить» эту заразу отображаться принудительно.
Первый — рабочий. Однако код с ним получается сложный. И на каждую иттерацию — минимум по 0.1 секунды. В итоге это очень долго. Но работает (вроверял на поле таблчного документа).
А вот второй. С помощью применения маленькой хитрости — всё шикарно работает. А хитрость в том, что есть у ТабличногоДокумента метод Показать(). Хорош он тем, что как раз после его исполнения, размеры надписи уже становятся реальными, подогнанными под размер текста. Но плох он тем, что окрывает окно, которое программно или не закроешь, или я просто не знаю как.
Думал, я думал. А точнее, экперементировал, я экспериментировал. И вот до чего дошел:
Код приводить в человеческий вид мне лень. Если что, то есть файл в примерах.
[expert_bq id=»1570″]Если у вас много ячеек, содержащих числа, хранящиеся в виде текста, существует несколько способов преобразования текста в числа. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] Для преобразования текста в числа вы можете использовать Преобразовать в число вариант, Текст в столбцы особенность или Специальная паста. Мы обсудим каждый из этих методов в нашей статье о извлечении чисел и текста в Excel.Сколько ячеек в Excel: сколько стобцов и строк
- ЛЕВСИМВ(Строка; Количество_символов) – выводит заданное количество символов с левого края. Например, =ЛЕВСИМВ(А1;10) выведет 10 первых символов строки в ячейке А1 . Функция имеет 2 обязательных аргумента – Строка-источник и количество выводимых символов;
Подробно тут — регулярные выражения в Excel и примеры регулярных выражений. А ниже на картинке — примеры формул, которые позволят извлечь первые N символов, в том числе букв или цифр по отдельности, из любой ячейки.
[expert_bq id=»1570″]Совет Ширину столбцов можно также измерять, перетаскивая разделитель столбца по листу и просматривая при этом всплывающие подсказки. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq]
Для этого нужно открыть «Файл»-«Параметры»-«Дополнительно». В разделе «Параметры правки» следует временно убрать галочку «Использовать системные разделители». А в поле «Разделитель целой и дробной части» следует удалить запятую и ввести точку.
Извлечь первые N символов ячейки Excel! SEMTools для Excel
- На вкладке «Конструктор» в группе «Настройка страницы» нажмите кнопку запуска диалогового окна «Настройка страницы».
- Перейдите на вкладку «Свойства страницы». В списке единиц измерения выберите нужные единицы и нажмите кнопку «ОК».
В случае если текст «наползает» на границы ячейки, возможно, неправильно выставлены поля ячейки, а точнее ширина полей равна нулю. Чтобы установить поля ячейки или изменить их нужно пройти во вкладку «ячейка», «параметры» и изменить здесь этот показатель.
[expert_bq id=»1570″]Конечно, такое происходит не часто, но все же встречается, особенно когда приходится редактировать уже готовые созданные кем-то ранее таблицы. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq]
Здесь уже не только малая высота строк, но и по ширине текст, как бы наползает на границы ячейки (второй столбец) или вообще прячется за них (третий столбец). Кроме того видим, что высота третей строки слишком велика. Конечно, такое происходит не часто, но все же встречается, особенно когда приходится редактировать уже готовые созданные кем-то ранее таблицы.
Excel найти часть текста в ячейке – ПК портал
- разбивка по столбцам не сохраняет исходный столбец
- это единоразовая процедура, в отличие от формул, которые пересчитываются при обновлении данных
- удобный момент — одна процедура создает сразу несколько столбцов
- направление разбивки — только вправо
- если справа есть данные, они могут быть перезаписаны, если не отменить операцию и не создать пустой столбец/столбцы.
Использование функции DATE может показаться такой же трудоемкой, как перепечатывание текста, как даты. Но вполне вероятно, что один и тот же формат использовался в вашей книге, если над ним работал один человек.