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

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

13 Ноябрь 2019, 18:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: автоматизация удаления ячеек определенного формата со сдвигом влево  (Прочитано 6302 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ser_J
Новичок
*
Offline Offline

Сообщений: 2


« Стартовое сообщение: 15 Январь 2014, 15:42 »

Доброго здравия, дорогие форумчане.
У меня, как и у многих просящих здесь, есть проблема.  В ОО новичок, а для работы нужно срочно сделать....
Получил в наследство документ состоящий из боле 4500 строк и большим количеством столбцов.  Необходимо подчистить таблицу, а именно автоматизировать удаление всех ячеек (кроме ячеек с датой) со сдвигом влево начиная с пятого столбца, чтобы получилась таблица без пустых ячеек и остались только ячейки с датой (на подобие последних пяти строк в прикрепленном файле).  
Заранее благодарю всех отозвавшихся.

[вложение удалено Администратором]
« Последнее редактирование: 15 Январь 2014, 16:18 от Ser_J » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #1: 15 Январь 2014, 16:59 »

Добро пожаловать на форум!
Ты имеешь в виду что-то вроде этого?
Код:
Sub DeleteNonDateCells
Dim oSheets As Variant
Dim oSheet As Variant
Dim oCellByPosition As Variant
Dim oCellRangeByPosition As Variant
Dim oCursor As Variant
Dim oDataArray As Variant
Dim i&, j&, cnt&
Dim aTmp As Variant
oSheets = ThisComponent.getSheets()
oSheet = oSheets.getByIndex(0)
oCellByPosition = oSheet.getCellByPosition(4, 2)
oCursor = oSheet.createCursorByRange(oCellByPosition)

oCursor.gotoEndOfUsedArea(True)
oCursor.clearContents(1021) ' Удалить всё кроме дат
oDataArray = oCursor.getDataArray()
For i = LBound(oDataArray) To UBound(oDataArray)
aTmp = oDataArray(i)
cnt = 0
For j = LBound(aTmp) To UBound(aTmp)
If IsNumeric(aTmp(j)) Then
aTmp(cnt) = aTmp(j)
cnt = cnt + 1
EndIf
Next j
For j = cnt To UBound(aTmp)
aTmp(j) = ""
Next j
oDataArray(i) = aTmp()
Next i
oCursor.setDataArray(oDataArray)
End Sub
Записан

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

Сообщений: 2


« Ответ #2: 15 Январь 2014, 18:27 »

Да!  Это оно.  Огромное спасибо мил.человек !!!
Работает!!! (правда в результате - сохраненные ячейки поменяли формат с даты на числовой), но это не проблема и руками можно подправить.
                                                                                                                                               Будешь в Минске угощу пивом Всё хорошо
Записан
celler
Форумчанин
***
Offline Offline

Сообщений: 191


« Ответ #3: 15 Январь 2014, 19:00 »

Кстати, если столбцов с датами всего четыре, как в примере, то можно всё проделать методом сортировки - выделить всю область с данными и отсортировать её по этим четырём столбцам с датами. Однако, поскольку в LO/OO возможно за раз сортировать только три столбца, то придётся повторить сортировку для оставшегося четвёртого столбца отдельно. Остаётся только удалить ненужные столбцы и строки и переместить отсортированные зоны влево. Если столбцов значительно больше, то можно всё проделать в Gnumeric,- он позволяет за один раз сортировать сколько угодно столбцов.
« Последнее редактирование: 16 Январь 2014, 19:10 от celler » Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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