Вставка стобцов/строк через один столбец/строку

Автор lufthansa, 18 июня 2018, 16:28

0 Пользователи и 1 гость просматривают эту тему.

lufthansa

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


В гугле нашла для экселя, какой-то kutools есть...

JohnSUN

Ой, брось - еще какой-то tool для такой ерунды использовать...
Sub InsColumns
Dim oSheet As Variant, oCursor As Variant, oColumns As Variant, nColumn As Long
' Активный лист
oSheet = ThisComponent.getCurrentController().getActiveSheet()
' Создадим курсор, чтобы определить занятое место на листе
oCursor = oSheet.createCursor()
oCursor.gotoEndOfUsedArea(True)
' Теперь курсор знает диапазон занятый пользовательскими данными.
' Все колонки этого диапазона
oColumns = oCursor.getColumns()
' Сколько колонок в этом диапазоне? Вместится ли столько же пустых колонок на лист
If oColumns.getCount() > (oSheet.getColumns().getCount() / 2) Then
Print "Слишком много колонок, некуда вставить новые"
Exit Sub
EndIf
' Вставим колонки:
For nColumn = oColumns.getCount()-1 To 1 Step -1
oColumns.insertByIndex(nColumn, 1)
Next nColumn
End Sub
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

lufthansa

Цитата: JohnSUN от 18 июня 2018, 16:50
Ой, брось - еще какой-то tool для такой ерунды использовать...
Sub InsColumns
Dim oSheet As Variant, oCursor As Variant, oColumns As Variant, nColumn As Long
' Активный лист
oSheet = ThisComponent.getCurrentController().getActiveSheet()
' Создадим курсор, чтобы определить занятое место на листе
oCursor = oSheet.createCursor()
oCursor.gotoEndOfUsedArea(True)
' Теперь курсор знает диапазон занятый пользовательскими данными.
' Все колонки этого диапазона
oColumns = oCursor.getColumns()
' Сколько колонок в этом диапазоне? Вместится ли столько же пустых колонок на лист
If oColumns.getCount() > (oSheet.getColumns().getCount() / 2) Then
Print "Слишком много колонок, некуда вставить новые"
Exit Sub
EndIf
' Вставим колонки:
For nColumn = oColumns.getCount()-1 To 1 Step -1
oColumns.insertByIndex(nColumn, 1)
Next nColumn
End Sub



дело в том, что я пока не по этим делам)) что с этим кодом делать?)

mikekaganski

Я понимаю, что решение "не соответствует духу и букве", но вот честно: назначил бы хоткей на операцию "Лист"->"Вставить столбцы"->"Слева" и прошёлся бы начиная с A1 хоткей-вправо-хоткей-вправо-... .

Для однократной задачи может оказаться быстрее, чем поиск расширения. И быстрее упрётесь в ограничение в 1024 столбца в Кальке ;-)

И да, как всегда, JohnSUN стреляет лучше! :-)
С уважением,
Михаил Каганский

kompilainenn

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

mikekaganski

С уважением,
Михаил Каганский

JohnSUN

Цитата: lufthansa от 18 июня 2018, 16:53
что с этим кодом делать?)
Есть куча пошаговых руководств - как и куда вставлять код макроса. Но лучше один раз увидеть, чем 10 раз прочитать
(Вот интересно, с какого раза поймешь намёки про ширину таблицы в Calc'е?)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

lufthansa

Цитата: JohnSUN от 18 июня 2018, 19:32
Цитата: lufthansa от 18 июня 2018, 16:53
что с этим кодом делать?)
Есть куча пошаговых руководств - как и куда вставлять код макроса. Но лучше один раз увидеть, чем 10 раз прочитать
(Вот интересно, с какого раза поймешь намёки про ширину таблицы в Calc'е?)


Бооги)) это вы для меня специально сделали??)) как мило) спасибо)
я тоже считаю, что лучше один раз увидеть и попробовать))

Про ширину я поняла с первого комментария, который на это указывал)) так что не очень интересно)) 

JohnSUN

OK, раз поняла, что проредить 738 колонок на одном листе не выйдет,  то как будем поступать?
Возможны варианты.
Если строк меньше 1024, то можно транспонировать таблицу (перевернуть по диагонали, поменять строки и колонки местами) и проредить строки.
Если по-любому не вмещаемся в лист по ширине, то тоже возможны варианты: проредить сколько есть места или перенести хвост таблицы на соседний лист (или на этот же лист, ниже последней строки)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

lufthansa

у меня по горизонтали ассортимент прайса, а по вертикали адреса.
Конечно адресов будет меньше. Особенно, когда разобью по менеджерам.. Поэтому тоже думаю поменять местами.
Да и вообще, нужно рассказать начальнику и уточнить задачу. Уверена, что ему будет неудобно.

новый вопрос, выпадающий список.
Вот как в 1с, иерархия. Возможно ли здесь так сделать, например, кондитерка, плюсик, открылся ассортимент, выбираю конфеты, плюсик, выбираю определенную конфету?

Объяснять я не умею, надеюсь понятно... Просто на каждый товар должно быть по два столбца (план/факт) для задач торговым представителям.


economist

Цитата: lufthansa от 19 июня 2018, 07:28Вот как в 1с, иерархия.

Это называется "Данные - Группа и структура", появилось в Excel и Calc даже раньше чем в 1С. Вы бы табличку с начальником согласовали и выложили пример сюда, так будет гораздо проще вам помочь.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

lufthansa


да нет же, в выпадающем списке. Группировать и разгруппировать наверно каждый знает)))  ???

Вы знаете, начальник сам толком не знает, что хочет))

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

lufthansa

сделала я файле (предыдущий ответ) уловное форматирование, что мне сделать, чтоб при последующем открытии файла я его видела?? Открываю и нет ничего( >:(

lufthansa

Все, выпадающие списки уже луплю.
Даже двухуровневый и с раскраской сделала (по предыдущим темам).