Взять значение ячейки из одного документа и найти в другом

Автор sna4e, 28 января 2016, 14:10

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

sna4e

Доброго времени суток.
У меня все проблемы с пониманием что я делаю.
Мне нужно взять значение ячейки в одном документе, транслитерировать его и произвести поиск в другом документе.
С помощью диспетчера это сделать получается:
sub poisk_v_Teste
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
dim Doc as object
Dim Sheet as object
Doc = ThisComponent
Sheet = Doc.getSheets.getByIndex(0)
Cell =  Sheet.getCellByPosition(2,1)
a=Cell.getString()
FindString= TransToLat(a)
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
n=StarDesktop.Frames.Count
For i=0 To n-1
s=StarDesktop.Frames(i)
IF left(s.Title, 17) ="Сводный+файл+Ыч" Then'
Exit For
END IF
NEXT
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Sel"
args1(0).Value = false

dispatcher.executeDispatch(s, ".uno:GoToStart", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$1"

dispatcher.executeDispatch(s, ".uno:GoToCell", "", 0, args2())

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

dispatcher.executeDispatch(s, ".uno:ExecuteSearch", "", 0, args3())
END Sub

Но мне не нравится этот метод тем, что отчитывается если "искомое понятие не найдено". Как сделать тоже самое с помощью SerchDescriptor?
Вопрос в том, как задать диапозон поиска  в данной ситуации?
Пробовал задать лист через
Sheet = S.getSheets.getByIndex(0)
Но он ругается, что метод getSheets не подходит.

sna4e

Кажется, сам разобрался:
sub poisk_v_Teste
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
dim Doc as object
Dim Sheet as object
Doc = ThisComponent
Sheet = Doc.getSheets.getByIndex(0)
Cell =  Sheet.getCellByPosition(2,1)
a=Cell.getString()
FindString= TransToLat(a)
dim const_imya as string
const_imya ="K:/_Некоторый путь/"
Dim NextFile As String
NextFile =Dir(const_imya, 0)
While MID(NextFile, 1, 18) <> "Сводный+файл+"
NextFile =Dir
Wend
DocPath=const_imya+NextFile
Dim oComponents as Object
Dim Doc1 as Object
DIM Col as Variant
oComponents = StarDesktop.Components.CreateEnumeration
Doc1 = oComponents.NextElement
DO UNTIL UCase(DOC1.URL) = UCase(ConvertToURL(DocPath))
Doc1 = oComponents.NextElement
Loop
Sheet1 = Doc1.getSheets.getByIndex(0)
FindStr=Sheet1.createSearchDescriptor
FindStr.setSearchString(FindString)
FindStr.SearchWords= True
Col=Sheet1.FindFirst(FindStr)
oController=Doc1.getCurrentController()
oController.select(Col)
END Sub