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

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

15 Май 2021, 08:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Сообщений: 6


« Стартовое сообщение: 31 Март 2021, 15:58 »

речь про таблицу во Writer
я нашёл в ячейке таблицы нужную мне закладку

Anchor = Doc.Bookmarks.getByName("MY").getAnchor()

далее я знаю ячейку и таблицу этой закладки

Cell = Anchor.Cell
Table = Anchor.TextTable

мне надо удалить строку в этой таблице где содержится эта ячейка, как это сделать?!
   
« Последнее редактирование: 31 Март 2021, 16:29 от kms » Записан
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #1: 31 Март 2021, 16:12 »

Продолжайте исследование: у ячейки Cell есть свойство CellName.  Улыбка
Записан

Владимир.
kms
Участник
**
Offline Offline

Сообщений: 6


« Ответ #2: 31 Март 2021, 16:20 »

я в курсе про CellName, но я же не могу по CellName удалить строку таблицы, или мне что, парсить имя ячейки и выковыривать из имени номер строки?! я думаю есть какойто более валидный метод
Записан
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #3: 31 Март 2021, 16:29 »

парсить имя ячейки и выковыривать из имени номер строки
До сих пор так и делал...
Записан

Владимир.
kms
Участник
**
Offline Offline

Сообщений: 6


« Ответ #4: 31 Март 2021, 16:31 »

парсить имя ячейки и выковыривать из имени номер строки
До сих пор так и делал...
ну согласись это какойто костыльный способ, неужели нет какогото метода для получения строки текущей ячейки
Записан
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #5: 31 Март 2021, 16:33 »

Подождем спецов по Writer...
Записан

Владимир.
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #6: 31 Март 2021, 18:02 »

В Writer’е никогда не работал… почти.

Макрос получает строку по имени пустой ячейки и удаляет всю строку:
https://ask.libreoffice.org/en/question/243251/writer-macro-to-delete-empty-rows-in-tables/
Адаптируйте код под себя.
Приведу другой «костыльный» способ для сравнения, похожий  на этот. В диалогах контрол combobox, в отличие от списка и аналогичного элемента управления MS Forms, почему-то не имеет свойства ListIndex, и чтобы удалить пунктик, значение которого мы знаем, и оно выбрано, надо организовать цикл с перебором значений, чтобы вычислить, а не получить индекс пункта. Добавят – будем делать по другому… in one go
« Последнее редактирование: 31 Март 2021, 18:46 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
kms
Участник
**
Offline Offline

Сообщений: 6


« Ответ #7: 31 Март 2021, 19:05 »

В Writer’е никогда не работал… почти.

Макрос получает строку по имени пустой ячейки и удаляет всю строку:
https://ask.libreoffice.org/en/question/243251/writer-macro-to-delete-empty-rows-in-tables/
Адаптируйте код под себя.
Приведу другой «костыльный» способ для сравнения, похожий  на этот. В диалогах контрол combobox, в отличие от списка и аналогичного элемента управления MS Forms, почему-то не имеет свойства ListIndex, и чтобы удалить пунктик, значение которого мы знаем, и оно выбрано, надо организовать цикл с перебором значений, чтобы вычислить, а не получить индекс пункта. Добавят – будем делать по другому… in one go

ну как бы не совсем он тут получает строку по имени пустой ячейки, он просто перебирает строки по индексу, и смотрит есть ли пустые ячейки в нём. тоесть только перебором и сравнением имён ячеек с моей можно выявить?!

ну и второй вопрос, костыльный, как тут принято выуживать из строки (имени ячейки) номер цифру? чтоб получить номер строки, есть какой пример? оба способа костыльны, но второй хотябы без перебора
Записан
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #8: 31 Март 2021, 19:37 »

Аккуратно выделить из имени ячейки номер столбца и строки можно так. Нужно при этом учитывать, что для разделенных (Split) ячеек имя ячейки содержит знак точки (см. описание метода getCellByName). Кроме того, для указания номера столбца в CellName Writer использует 52-ричную систему счисления ( Смеющийся ).

Код:
' Вычисляет номера столбца и строки (от 0) по имени ячейки текстовой таблицы (CellName).
' Возвращает массив из 2 элементов (Long): номер столбца и номер строки.
' Для разделенной ячейки (имя содержит знак точки) возвращает значения для исходной ячейки (до разделения).
' При некорректном аргументе возвращает массив из двух -1.
Function TextTable_ColumnRowByCellName(ByVal cellName As String)
  Dim i As Long, j as Long, column As Long, row As Long, c As String
  column=-1 : row=-1 : TextTable_ColumnRowByCellName=Array(column, row)
  i=Instr(1, cellName, ".")
  If i=1 Then Exit Function
  If i>1 Then cellName=Left(cellName, i-1)
  i=1 : column=0
  Do While i<Len(cellName)
    c=Mid(cellName, i, 1)
    If c>="A" And c<="Z" Then
      column=column * 52 + Asc(c) - Asc("A") + 1
    ElseIf c>="a" And c<="z" Then
      column=column * 52 + Asc(c) - Asc("a") + 27
    Else
      Exit Do
    End If
    i=i+1
  Loop     
  If IsNumeric(Mid(cellName, i)) Then row=Clng(Mid(cellName, i))
  If column>0 And row>0 Then TextTable_ColumnRowByCellName=Array(column-1, row-1)
End Function

' Вычисляет номер столбца (от 0) по имени ячейки текстовой таблицы (CellName).
' Для разделенной ячейки (имя содержит знак точки) возвращает значение для исходной ячейки (до разделения).
' При некорректном аргументе возвращает -1.
Function TextTable_ColumnByCellName(ByVal cellName As String)
  TextTable_ColumnByCellName=TextTable_ColumnRowByCellName(cellName)(0)
End Function

' Вычисляет номер строки (от 0) по имени ячейки текстовой таблицы (CellName).
' Для разделенной ячейки (имя содержит знак точки) возвращает значение для исходной ячейки (до разделения).
' При некорректном аргументе возвращает -1.
Function TextTable_RowByCellName(ByVal cellName As String)
  TextTable_RowByCellName=TextTable_ColumnRowByCellName(cellName)(1)
End Function

Sub testTextTable
  Dim s As String
  s="AA111"
  Msgbox Join(TextTable_ColumnRowByCellName(s))
  Msgbox TextTable_ColumnByCellName(s)
  Msgbox TextTable_RowByCellName(s)
End Sub
Записан

Владимир.
kms
Участник
**
Offline Offline

Сообщений: 6


« Ответ #9: 31 Март 2021, 22:30 »

оказывается есть такая функция как Right например, которая обрезает строку с определённого символа. В моём простом случае этого в принципе достаточно, на простых таблицах можно обрезать с первого символа. А где все эти функции описаны? например Right, я и не знал о её существовании
Записан
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #10: 31 Март 2021, 22:43 »

Например, здесь...
Прикрепленный файл чуть устарел. Например, нет функции Replace().

* LibOBasic-5-ExecLib-Flat-A4-EN-v101.pdf (177.95 Кб - загружено 4 раз.)
« Последнее редактирование: 31 Март 2021, 22:51 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
kms
Участник
**
Offline Offline

Сообщений: 6


« Ответ #11: 31 Март 2021, 23:36 »

а есть функция получения всех символов конца строки начиная со второго например? я не нашёл
PS всё, разобрался - Mid
« Последнее редактирование: 31 Март 2021, 23:59 от kms » Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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