Как записать макросом поиск пробела в ячейке?

Автор OOKapitan, 28 марта 2019, 17:50

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

bigor

из твоего кода

Sub UF
Dim i&, r&
oDoc=Thiscomponent
oSheet = oDoc.Sheets(0)

For r=3 to oSheet.getColumns().getByIndex(5).queryEmptyCells().getByIndex(oSheet.getColumns().getByIndex(5).queryEmptyCells().getCount()-1).getRangeAddress().StartRow
If VAL(LEFT(oSheet.getCellByPosition(5, r).String,20))>=6 Then
  oSheet.getCellRangeByPosition(1,r,5, r).SetPropertyValue("CellBackColor", 65280)
End If
oSheet.getCellByPosition(6, r).setString(VAL(LEFT(oSheet.getCellByPosition(5, r).String,20)))
Next r
End Sub
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

#31
Цитата: Bigor от 29 марта 2019, 14:33If VAL(LEFT(oSheet.getCellByPosition(5, r).String,20))>=6 Then
Что значит цифра 20? Почему именно так? Проясните, пожалуйста.
Цитата: Bigor от 29 марта 2019, 14:33oSheet.getCellByPosition(6, r).setString(VAL(LEFT(oSheet.getCellByPosition(5, r).String,20)))
Что-то не понимаю, для чего эта строка после End If. Объясните, пожалуйста.

bigor

Цитата: OOKapitan от 29 марта 2019, 14:36Что значит цифра 20? Почему именно так? Проясните, пожалуйста.

ты через строчку посты читаешь или только заголовки?  mikekaganski целую простыню написал
ЦитироватьПодсказка: вычитать единицу не надо было. А вообще-то Val принимает и строку типа "12345 вышел зайчик погулять" и сам превратит её в 12345, безо всякой подготовки.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

bigor

Цитата: OOKapitan от 29 марта 2019, 14:36oSheet.getCellByPosition(6, r).setString(VAL(LEFT(oSheet.getCellByPosition(5, r).String,20)))
Что-то не понимаю, для чего эта строка после End If. Объясните, пожалуйста.
то, что ты просил
ЦитироватьМне нужно из ячеек столбца F вывести цифры слева до первого пробела
только через print устанешь кнопки жать, вывел в столбец G
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 29 марта 2019, 14:39Что значит цифра 20? Почему именно так? Проясните, пожалуйста.
?

bigor

я решил что больше 20 знаков у тебя перед пробелом не будет :) в общем это максимально возможное количество знаков перед пробелом
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 29 марта 2019, 15:05в общем это максимально возможное количество знаков перед пробелом
Хм. Скажите, пожалуйста, а как макрос понимает, что надо брать знаки перед пробелом? Ведь Left же просто берёт необходимое количество знаков слева.
А вообще количество знаков перед пробелом можно увидеть в ячейках столбца F в моём-файле-примере.

rami

Пробуйте такой макрос:
Sub Main
oSheet = ThisComponent.Sheets(0)    'первый лист
oRange = oSheet.getCellRangeByName("F4:F119").DataArray  'диапазон
For r=0 to UBound(oRange)    'пребор диапазона
color = IIF(val(oRange(r)(0))>=6, &H00ff00, &Hff0000)   'выбор цвета
oSheet.getCellRangeByPosition(1, r+3, 5, r+3).CellBackColor=color  'закраска
Next
End Sub

bigor

Left() берет все символы слева (у меня 20), val()  из этой строки выделяет только число до пробела. Можно вообще обойтись без left() но на столь радикальный шаг я не решился :)

ЦитироватьА вообще-то Val принимает и строку типа "12345 вышел зайчик погулять" и сам превратит её в 12345, безо всякой подготовки.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

#39
Цитата: Bigor от 29 марта 2019, 15:21val()  из этой строки выделяет только число до пробела
А если мне нужны цифры между вторым и третьим пробелом в ячейке (см. ячейки в столбце F), - как тогда будет выглядеть запись?

OOKapitan

Цитата: rami от 29 марта 2019, 15:19oRange = oSheet.getCellRangeByName("F4:F119").DataArray  'диапазон
Таблица может пополняться - так что последней может стать уже не 119 строка.
Цитата: rami от 29 марта 2019, 15:19UBound(oRange)
Сколько читал литературы - так до конца и не понимаю, что значит UBound. Проясните, пожалуйста.

rami

#41
Ну, сколько ещё цитировать эту фразу???
Цитата: mikekaganski от 29 марта 2019, 13:41А вообще-то Val принимает и строку типа "12345 вышел зайчик погулять" и сам превратит её в 12345, безо всякой подготовки.
Ведь можно же написать так:
Sub Main1
Print val("12345 вышел зайчик погулять")
End Sub

и убедиться, что работает, так устроена эта функция.

bigor

Цитата: OOKapitan от 29 марта 2019, 15:26Сколько читал литеры - так до конца и не понимаю, что значит UBound. Проясните, пожалуйста.

я скоро всего Питоньяка процитирую :)
ЦитироватьUbound(array)  Возвращает верхнюю границу массива, переданного в качестве аргумента.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

rami

Цитата: OOKapitan от 29 марта 2019, 15:26Сколько читал литературы - так до конца и не понимаю, что значит UBound. Проясните, пожалуйста.
Литературу читать не нужно, читайте справку LibreOffice или Apache OpenOffice, в ней всё есть. Я не стесняюсь читать Справку и вам не следует стесняться.

mikekaganski

Цитата: OOKapitan от 29 марта 2019, 15:22
А если мне нужны цифры между вторым и третьим пробелом в ячейке (см. ячейки в столбце F), - как тогда будет выглядеть запись?
Конкретно на случай если нужно разбить строку на части между определённым символом - есть функция Split.

А если Вам нужно понять, как правильно проверять значения перед передачей в функцию - то как-то так:
nVal = 0
nSpacePos = InStr(oSheet.getCellByPosition (5, r).String," ")
If (nSpacePos > 0) Then nVal = Val(Left(oSheet.getCellByPosition (5, r).String, nSpacePos-1))
С уважением,
Михаил Каганский