Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

21 Сентябрь 2017, 04:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3   Вниз
  Печать  
Автор Тема: Нумерация строк.  (Прочитано 2015 раз)
0 Пользователей и 1 Гость смотрят эту тему.
bsi
Новичок
*
Offline Offline

Сообщений: 41


« Ответ #30: 25 Февраль 2017, 07:43 »

Цитата:
Пробуйте такой минималистичный вариант, думаю не сильно плохой
Спасибо rami, вроде все работает. Для меня данный вариант очень подходит, не знаю как для marina, наверное тоже подойдёт, её условия же выполнены. Ещё раз всем огромное спасибо.
Записан
economist
Ветеран
*****
Offline Offline

Сообщений: 684


« Ответ #31: 25 Февраль 2017, 10:50 »

Партизаны не сдаются  Да уж...

Быстрая нарастающая (1,2,3...) автонумерация непустых строк одной единственной формулой (пустые не нумеруем). Формулу протягиваем хоть на миллион строк.

=ЕСЛИ(B8<>"";МАКС($A$7:A7)+1;"")

См. вложение.

Коллеги, я-ж не против макросов, а только ЗА. Но макросы - это для того, что бы делать что-то, что табличные процессоры не умеют, или делать тысячекратно. "Неубиваемыми" макросы-листнеры не назовешь. Ячейки с ошибкой, режимы дизайна, смена безопасности макросов, параллельный процесс, сложности с режимом общего доступа итд - все это может огорчить. На тысячах элементов - у StarBasic будет торможение, по сравнению с формулой. Поэтому, имхо, простые формулы и функции нужно регулярно напоминать, в контексте любых практических задач.

И да... время. Единственный бесценный фактор. Свои формулы я написал даже не открывая Calc, за 1-2 минуты. Лишь для крайней иллюстрации с ODS-вложением - пришлось его открыть. Чтобы написать вышеприведенный макрос - суммарно потрачен 1 человеко-час. Макрос отличный, пару моментов пригодится и мне в более сложных моментах. Но все равно это дольше.

« Последнее редактирование: 25 Февраль 2017, 11:12 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 180


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #32: 25 Февраль 2017, 11:06 »

Партизаны не сдаются Да уж...
Это не партизан, а мечтатель. Вот настоящий партизан:

А эта формула подойдёт под условия.
Записан

rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 180


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #33: 25 Февраль 2017, 11:20 »

Не подойдет... В условии первый номер в шестой строке
Ну, это мелочи, сдвинуть индексы в формуле, но основную работу делает. Если в принципе приемлема формула. Хотя желательно было это учесть.
« Последнее редактирование: 25 Февраль 2017, 11:23 от rami » Записан

economist
Ветеран
*****
Offline Offline

Сообщений: 684


« Ответ #34: 25 Февраль 2017, 11:21 »

JohnSUN - я ждал этого замечания. Удалить любую пустую строку пользователь может и сам. Равно как и добавить. И все будет работать. А также продолжить нумерацию на другом листе, внеся правку за секунды. В этом сила формул/функций, они проще.  
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 313


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #35: 25 Февраль 2017, 11:36 »

Если в принципе приемлема формула.
Если не единственным, то основным недостатком формульного решения будет невозможность автоматического определения области печати - пачка пустых листов после реальной таблицы, вызванная "не пустыми" ячейками. Да, область печати можно переопределить вручную. Но в случае программной перенумерации даже этого не потребуется.
Ну, и неоправданный рост размера файла за счет формул
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
economist
Ветеран
*****
Offline Offline

Сообщений: 684


« Ответ #36: 25 Февраль 2017, 11:41 »

Кстати, если решать именно макросом - то листнер не лучшее решение. Вот несколько соображений:

1) Задача нумеровать заполняемое в процессе ввода - надуманна. Ориентироваться в строках можно по номерам строк самого Calc. Видеть общее кол-во введенного - правильнее формулой =СЧЁТЗ(), размещенной выше шапки таблицы, в закрепленной области (всегда на виду).  А вот перед распечаткой/пересылкой документа  - она уже актуальна. Значит нумеровать нужно макросом по другим событиям.

2) На 10000 ячейках простановка номеров будет быстрее в 10 раз через массив (Array, Range).

3) На практике должно еще что-то автоматизироваться, поэтому подзадача нумерации не может быть решена оптимально (как отдельный процесс). "За кадром" условий задач остались действия пользователя по вставке/удалению строк, подзаголовков итд, которые также делают частное решение "недолго живущим".

PS можно долго оптимизировать решения по сабжу, устроить "Олимпиаду по BASIC", но мне кажется коллективному Форуму-разуму интересней более сложные задачи. Я за любой НИОКР-кипиш :-) Всем хорошего дня!
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
bsi
Новичок
*
Offline Offline

Сообщений: 41


« Ответ #37: 25 Февраль 2017, 12:42 »

Чтобы примирить ратующих за формулы и ратующих за макрос, есть вариант в Excel вставлять нумерацию формулами, но через макрос. Не знаю как это решаемо в OL, а в Excel код такой
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Автонумерация
Range("A6:A" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC2="""","""",MAX(R1C1:R[-1]C)+1)"
End Sub
Решает все условия, заданные marina. Файл Excel во вложении.

* Пример.rar (18.04 Кб - загружено 4 раз.)
« Последнее редактирование: 25 Февраль 2017, 13:02 от bsi » Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 180


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #38: 25 Февраль 2017, 13:28 »

Чтобы примирить ратующих за формулы и ратующих за макрос
Кто такие? Почему не знаю? Как я уже сказал, мне всё равно, как поставили задачу, так я её и решаю. Ничего не имею против любых подходящих методов решения.
есть вариант в Excel вставлять нумерацию формулами, но через макрос. Не знаю как это решаемо в OL, а в Excel код такой
Решаемо примерно так же. Но мне в принципе не нравится запись формул в ячейки макросами если это не продиктовано особыми обстоятельствами.
Записан

economist
Ветеран
*****
Offline Offline

Сообщений: 684


« Ответ #39: 25 Февраль 2017, 14:02 »

bsi - кстати, есть в Excel очень приятный вариант в макросах указывать формулы в "русском" виде, через FormulaLocal:

Код:
Range("A6:A" & Range("B" & Rows.Count).End(xlUp).Row).FormulaLocal = "=ЕСЛИ(B8<>"""";МАКС($A$7:A7)+1;"""")"
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Страниц: « 1 2 3   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!