OpenOffice помогите с макросом [SOLVED]
Доброе время суток!
Подскажите пож-та, нужен макрос для ooCalc, вроде VBA знаю, а что-то с OpenOffice Basic'ом разобраться не могу. Нужно обработать кучу материала, для этого сижу изучаю матчасть, нежели в тупую лопатить материал. (уже сутки работа стоит, а голова пухнет!)
Данный макрос предусматривает избавление от пустых строк в таблице.
Имеем таблицу заполненную с пробелами, проверяем, например, по столбцу "B" если ячейка пустая то удаляем всю строку и переходим к следующей.
Я вот сочинил следующее
sub primer 'здесь проверяем по ячейке "А"
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Dim i as Integer
Doc = ThisComponent.CurrentSelection
Sheet = Doc.getSpreadsheet(0)
For i = 0 to 105
Cell = Sheet.getCellByPosition(0, i)
If Cell.Value = "" Then
Sheet.getRows.removeByIndex(0, 1)
EndIf
Next i
Данный код вообще ничего не делает, если же заменим тело цикла на ниже приведённое, то ситуация обратная - удаляются все подряд строки
Cell = Sheet.getCellByPosition(0, i) Select Case Cell.Type Case com.sun.star.table.CellContentType.EMPTY Sheet.getRows.removeByIndex(0, 1) End Select
Буду признателен, если кто направит на хорошие ресурсы c документацией по макросам для OpenOffice.
(эти ресурсы известны - http://www.pitonyak.org, http://community.i-rs.ruб http://disemia.com/software/openoffice/, www.openoffice.org)
- Для комментирования войдите или зарегистрируйтесь

j=0Алгоритм
Алгоритм неправильный. Должно быть как-то так:
j=0 For i = 0 to 105 Cell = Sheet.getCellByPosition(0, j) If Cell.Value = "" Then Sheet.getRows.removeByIndex(0, j) else j++ EndIf Next iспасибо,
спасибо,
действительно алгоритм неправильный был, видимо в борьбе с объектами и методами, о логике позабыл. Но дело было не только в алгоритме.
Ниже привожу текст работающего макроса.
sub primer dim document as object dim dispatcher as object Dim Doc As Object Dim Sheet As Object Dim Cell As Object Dim i, j as Integer document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") Doc = ThisComponent.CurrentSelection Sheet = Doc.getSpreadsheet(0) j = 0 For i = 0 to 305 Cell = Sheet.getCellByPosition(0, j) If Cell.Type = com.sun.star.table.CellContentType.EMPTY Then Sheet.getRows.removeByIndex(j, 1) Else j = j + 1 EndIf Next i end sub