Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MS SQL + MS Word OLE  [new]
Garafutdin
Member

Откуда: Москва
Сообщений: 139
Добрый день коллеги!

Не получается решить одну задачу:
MS SQL SERVER создает документ MS Word
Вставляет строки

Потом необходимо сделать замену вставленных строк <<Find&Replace>>

Пишу следующий код:
Exec @RetCode = sp_OAMethod @WordObject, 'Documents.Add', @Document OUTPUT
--EXEC @RetCode = sp_OAMethod @WordObject, 'Documents.open', @Document OUT, 'C:\Temp\SQLServer1.docx'
select @RetCode
Exec @RetCode = sp_OAMethod @WordObject,'Selection.TypeText("GGGGGGGGG TTTTTTTTTTTTTTTTTTTTTTT1        ")'
Exec @RetCode = sp_OAMethod @WordObject,'Selection.TypeText("BBBBBBBBBBBBBBBBBBBBBBBBBBBB        JJJJJJJJJJJJJJ  ")'
Exec @RetCode = sp_OAMethod @WordObject,'Selection.TypeText(" XCVBVCXVBNVC  ")'


Exec @RetCode = sp_OASetProperty @WordObject,'Selection.Find.Text','G'
if @RetCode <> 0 select @RetCode as point1
Exec @RetCode = sp_OASetProperty @WordObject,'Selection.Find.Replacement.Text','QWERTY'
if @RetCode <> 0 select @RetCode as point2

Exec @RetCode = sp_OASetProperty @WordObject,'Selection.Find.Forward','True'
if @RetCode <> 0 select @RetCode as point3

Exec @RetCode = sp_OASetProperty @WordObject,'Selection.Find.Format','False'
if @RetCode <> 0 select @RetCode as point4

exec @RetCode = sp_OAMethod @WordObject,'Selection.Find.Execute',@Document OUTPUT,'wdReplaceAll' 
if @RetCode <> 0 select @RetCode as point5

Exec @RetCode = sp_OAMethod @WordObject, 'ActiveDocument.SaveAs("C:\Temp\SQLServer2.docx")' 
Exec @RetCode = sp_OAMethod @WordObject, 'Quit'
Exec sp_OADestroy @WordObject
Exec sp_OAStop 

Документ на диске создается, но поиск и замена не была сделана:
GGGGGGGGG TTTTTTTTTTTTTTTTTTTTTTT1        BBBBBBBBBBBBBBBBBBBBBBBBBBBB        JJJJJJJJJJJJJJ   XCVBVCXVBNVC  

Скажите пожалуйста кто знает как решить проблему
8 июн 11, 10:48    [10780914]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + MS Word OLE  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
Garafutdin,

когда вы запускаете поиск, то курсор находится в конце введенного текста, а ищете вы вперед. но впереди ничего нет, поэтому ничего и не заменяется.
8 июн 11, 10:53    [10780966]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + MS Word OLE  [new]
Garafutdin
Member

Откуда: Москва
Сообщений: 139
Уленшпигель,

Делаю открытие документа, по идее курсор должен быть в начале, но тем не менее тоже самое((
Exec @RetCode = sp_OACreate 'Word.Application', @WordObject OUTPUT, 4
if @RetCode <> 0 select @RetCode as point10

EXEC @RetCode = sp_OAMethod @WordObject, 'Documents.open', @Document OUT, 'C:\Temp\SQLServer2.docx'
if @RetCode <> 0 select @RetCode as point0

Exec @RetCode = sp_OASetProperty @WordObject,'Selection.Find.Text','G'
if @RetCode <> 0 select @RetCode as point1
Exec @RetCode = sp_OASetProperty @WordObject,'Selection.Find.Replacement.Text','QWERTY'
if @RetCode <> 0 select @RetCode as point2

Exec @RetCode = sp_OASetProperty @WordObject,'Selection.Find.Forward','True'
if @RetCode <> 0 select @RetCode as point3

Exec @RetCode = sp_OASetProperty @WordObject,'Selection.Find.Format','False'
if @RetCode <> 0 select @RetCode as point4

--Exec @RetCode = sp_OASetProperty @WordObject,'Selection.Find.Wrap','wdFindContinue'
--select @RetCode
exec @RetCode = sp_OAMethod @WordObject,'Selection.Find.Execute',@Document OUTPUT,'wdReplaceAll' 
if @RetCode <> 0 select @RetCode as point5

Exec @RetCode = sp_OAMethod @WordObject, 'ActiveDocument.SaveAs("C:\Temp\SQLServer2.docx")' 
Exec @RetCode = sp_OAMethod @WordObject, 'Quit'
Exec sp_OADestroy @WordObject
Exec sp_OAStop 
8 июн 11, 11:00    [10781047]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + MS Word OLE  [new]
Glory
Member

Откуда:
Сообщений: 104751
exec @RetCode = sp_OAMethod @WordObject,'Selection.Find.Execute',@Document OUTPUT,'wdReplaceAll'
Разве это передает в Selection.Find.Execute нужный текст, по которому будет идти поиск/замена ?
Разве 'wdReplaceAll' будет передано именно в параметер Replace метода ?
8 июн 11, 11:24    [10781251]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + MS Word OLE  [new]
Garafutdin
Member

Откуда: Москва
Сообщений: 139
Glory,
ну думаю что да.

Я ориентируюсь на процедуру,которая у меня есть в Delphi, и которая отлично отрабатывает с OLE объектом


try  
    WordApp := CreateOLEObject('Word.Application');  
  except  
    on E: Exception do  
    begin  
      E.Message := 'Word is not available.';  
      raise;  
    end;  
  end;  

  try  
    { Hide Word }  
    WordApp.Visible := False;  
    { Open the document }  
    WordApp.Documents.Open(ADocument);  
    { Initialize parameters}  
    WordApp.Selection.Find.ClearFormatting;  
    WordApp.Selection.Find.Text := SearchString;  
    WordApp.Selection.Find.Replacement.Text := ReplaceString;  
    WordApp.Selection.Find.Forward := True;  
    WordApp.Selection.Find.Wrap := wdFindContinue;  
    WordApp.Selection.Find.Format := False;  
    WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;  
    WordApp.Selection.Find.MatchWholeWord := False;  
    WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;  
    WordApp.Selection.Find.MatchSoundsLike := False;  
    WordApp.Selection.Find.MatchAllWordForms := False;  
    { Perform the search}  
    if wrfReplaceAll in Flags then  
      WordApp.Selection.Find.Execute(Replace := wdReplaceAll)  
    else  
      WordApp.Selection.Find.Execute(Replace := wdReplaceOne);  
    { Save word }  
    WordApp.ActiveDocument.SaveAs(ADocument);  
    { Assume that successful }  
    Result := True;  
    { Close the document }  
    WordApp.ActiveDocument.Close(wdDoNotSaveChanges);  
  finally  
    { Quit Word }  
    WordApp.Quit;  
    WordApp := Unassigned;  
  end;  

8 июн 11, 11:45    [10781487]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + MS Word OLE  [new]
Glory
Member

Откуда:
Сообщений: 104751
sp_OAMethod objecttoken , methodname
    [ , returnvalue OUTPUT ] 
    [ , [ @parametername = ] parameter [ OUTPUT ] [ ...n ] ] 

sp_OAMethod @WordObject,'Selection.Find.Execute',
    @Document OUTPUT,
    'wdReplaceAll'
Тогда объясните, как вы передаете то нужные значения в правильные параметры метода ?
8 июн 11, 11:53    [10781569]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + MS Word OLE  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
Garafutdin,

он то в начале, но что у вас представляет собой Selection? сначала нужно текст отметить. вам лучше сначала написать макрос в самом ворде, а потом уже переносить его куда-либо еще.
8 июн 11, 11:54    [10781578]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить