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

Автор Ser_J, 15 января 2014, 16:42

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

Ser_J

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

[вложение удалено Администратором]

JohnSUN

Добро пожаловать на форум!
Ты имеешь в виду что-то вроде этого?
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

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

celler

Кстати, если столбцов с датами всего четыре, как в примере, то можно всё проделать методом сортировки - выделить всю область с данными и отсортировать её по этим четырём столбцам с датами. Однако, поскольку в LO/OO возможно за раз сортировать только три столбца, то придётся повторить сортировку для оставшегося четвёртого столбца отдельно. Остаётся только удалить ненужные столбцы и строки и переместить отсортированные зоны влево. Если столбцов значительно больше, то можно всё проделать в Gnumeric,- он позволяет за один раз сортировать сколько угодно столбцов.