Найти и заменить(макрос)

Автор Alder, 11 июня 2015, 10:59

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

Alder

Ещё раз Добрый день.

В документе требуется удалить начальные символы в выделенных ячейках.
Мой мозг догадался как удалить часть символов.
Но как удалить все символы до этого?
Добавлял регулярные выражения (/w)
Но макрос не хочет искать.


sub delete
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")

rem ----------------------------------------------------------------------
dim args1(17) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.Backward"
args1(4).Value = false
args1(5).Name = "SearchItem.Pattern"
args1(5).Value = false
args1(6).Name = "SearchItem.Content"
args1(6).Value = false
args1(7).Name = "SearchItem.AsianOptions"
args1(7).Value = false
args1(8).Name = "SearchItem.AlgorithmType"
args1(8).Value = 0
args1(9).Name = "SearchItem.SearchFlags"
args1(9).Value = 0
args1(10).Name = "SearchItem.SearchString"
args1(10).Value = "от "
args1(11).Name = "SearchItem.ReplaceString"
args1(11).Value = " "
args1(12).Name = "SearchItem.Locale"
args1(12).Value = 255
args1(13).Name = "SearchItem.ChangedChars"
args1(13).Value = 6
args1(14).Name = "SearchItem.DeletedChars"
args1(14).Value = 0
args1(15).Name = "SearchItem.InsertedChars"
args1(15).Value = 0
args1(16).Name = "SearchItem.TransliterateFlags"
args1(16).Value = 1280
args1(17).Name = "SearchItem.Command"
args1(17).Value = 1

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(17) as new com.sun.star.beans.PropertyValue
args2(0).Name = "SearchItem.StyleFamily"
args2(0).Value = 2
args2(1).Name = "SearchItem.CellType"
args2(1).Value = 0
args2(2).Name = "SearchItem.RowDirection"
args2(2).Value = true
args2(3).Name = "SearchItem.AllTables"
args2(3).Value = false
args2(4).Name = "SearchItem.Backward"
args2(4).Value = false
args2(5).Name = "SearchItem.Pattern"
args2(5).Value = false
args2(6).Name = "SearchItem.Content"
args2(6).Value = false
args2(7).Name = "SearchItem.AsianOptions"
args2(7).Value = false
args2(8).Name = "SearchItem.AlgorithmType"
args2(8).Value = 0
args2(9).Name = "SearchItem.SearchFlags"
args2(9).Value = 0
args2(10).Name = "SearchItem.SearchString"
args2(10).Value = "от "
args2(11).Name = "SearchItem.ReplaceString"
args2(11).Value = " "
args2(12).Name = "SearchItem.Locale"
args2(12).Value = 255
args2(13).Name = "SearchItem.ChangedChars"
args2(13).Value = 6
args2(14).Name = "SearchItem.DeletedChars"
args2(14).Value = 0
args2(15).Name = "SearchItem.InsertedChars"
args2(15).Value = 0
args2(16).Name = "SearchItem.TransliterateFlags"
args2(16).Value = 1280
args2(17).Name = "SearchItem.Command"
args2(17).Value = 3

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args2())

end sub


Пример текста:
Надо оставить дату и условное обозначение.
Поступление товаров и услуг N911FG4651GE79999951 от 10.03.2015 S3721
Перемещение товаров N911FG4751GH79999951 от 12.04.2015 S3722
Поступление товаров и услуг N911FG4751GE79999951 от 17.04.2015 S3723
Корректировка записей регистров N911HG4751QW79999951 от 30.04.2015 S3724

rami

Цитата: Alder от 11 июня 2015, 08:59Пример текста:
Надо оставить дату и условное обозначение.
Поступление товаров и услуг N911FG4651GE79999951 от 10.03.2015 S3721
Перемещение товаров N911FG4751GH79999951 от 12.04.2015 S3722
Поступление товаров и услуг N911FG4751GE79999951 от 17.04.2015 S3723
Корректировка записей регистров N911HG4751QW79999951 от 30.04.2015 S3724
С датой всё ясно, а "условное обозначение" — это что? Выделите в примере что нужно оставить. А заодно напишите какие "особые приметы" есть в "условных обозначениях" , например: "условное обозначение" — всегда начинается с буквы "S" (или любой другой) и заканчивается четырьмя цифрами или "условное обозначение" —всегда начинается с буквы"N" , затем всегда идут три цифры и две буквы и любое количество других знаков. Без знания уникальных "особых примет" невозможно составить регулярное выражение.

Alder

Это символы идущие после даты, но цифры или буквы всегда по разному. В примере это S3721-S3724.
Мне надо удалить весь текст идущий перед датой.

rami

Цитата: Alder от 11 июня 2015, 09:52Это символы идущие после даты, но цифры или буквы всегда по разному. В примере это S3721-S3724.
Мне надо удалить весь текст идущий перед датой.
Если без макроса, то найти: (.* )(..\...\.....) и заменить на: $2

Alder

К сожалению мне нужно применить это в макросе.
А у меня нет ни какого представления как применять регулярное выражения в макросах.

На худой конец можно удалить всё оставив дату.

rami

Цитата: Alder от 11 июня 2015, 10:16К сожалению мне нужно применить это в макросе.
А у меня нет ни какого представления как применять регулярное выражения в макросах.

На худой конец можно удалить всё оставив дату.
А вот и макрос подоспел ;D
Sub poiskzamena   'найти и заменить
Dim ReplaceDescriptor As Object
Sheet=ThisComponent.CurrentController.ActiveSheet
ReplaceDescriptor=Sheet.createReplaceDescriptor()
ReplaceDescriptor.SearchRegularExpression=1
ReplaceDescriptor.SearchString = ".*(..\...\.....).*"  'найти только дату
'ReplaceDescriptor.SearchString = ".*(..\...\.....)"  'найти дату и всё что за ней
ReplaceDescriptor.ReplaceString ="$1"   'заменить на то, что найдено
Sheet.ReplaceAll(ReplaceDescriptor)
End Sub

Alder