Что нового

[Автоматизация] Вставка в Word из буфера

tehnik

Новичок
Сообщения
9
Репутация
0
Добрый день!
Есть скрипт, добывающий три таблицы из html-страницы и копирующий их в буфер поочередно. Делаю так
Код:
$o_DocTemp = ObjCreate("Word.Application")                                      
$oDoc = _WordDocOpen($o_DocTemp, "C:\test.doc")
$oDoc.Range.Paste
_WordDocSave($oDoc)
_WordDocClose($oDoc)
_WordQuit($o_DocTemp)

При повторном вызове этого кода, содержимое C:\test.doc меняется и перезаписывается последней таблицей. На форумах пишут, что надо сдвинуть курсор, пробовал с MoveEnd и EndKey - не помогло.
Как можно сохранить все таблицы?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
tehnik,
Попробуйте так.
Код:
#include <Word.au3>

Dim $aText[4] = [3, @CRLF & 'Test text 1', @CRLF & 'Test text 2', @CRLF & 'Test text 3']
$sText = ''
ClipPut('')
For $i = 1 To $aText[0]
	ClipPut($aText[$i])
	$oWordApp = _WordCreate(@ScriptDir & '\Test.doc')
	ConsoleWrite(@error & @LF)
	$oDoc = _WordDocGetCollection($oWordApp, 0)
	ConsoleWrite(@error & @LF)
	$sText = ClipGet()
	;$oDoc.Range.insertAfter($aText[$i]);сразу пишем
	$oDoc.Range.insertAfter($sText);или из буфера
	_WordQuit($oWordApp, -1)
	ConsoleWrite(@error & @LF)
	Sleep(1000)
Next
 

Vlasssov

Осваивающий
Сообщения
430
Репутация
25
При копировании в буфер надо другой формат указывать, по моему rtf, а не текст, там изначально в буфере просто текст находится. Надо копать в эту сторону.

То есть скрипт копирующий в буфер смотреть надо.
А как вам надо вообще таблицу вставить? После переноса строки? Просто в word есть такая замечательная функция - "Запись макроса". Записываете макрос, нажимаете alt+f11 и смотрите в модуле NewMacros свое произведение.
Потом добавляете в редакторе Autoit ко всем командам.
Код:
$oDoc.


И вперед!!!
Код:
#include <Word.au3>

Dim $aText[4] = [3, @CRLF & 'Test text 1', @CRLF & 'Test text 2', @CRLF & 'Test text 3']
$sText = ''
ClipPut('')
For $i = 1 To $aText[0]
    ClipPut($aText[$i])
    $oWordApp = _WordCreate(@ScriptDir & '\Test.doc')
    ConsoleWrite(@error & @LF)
    $oDoc = _WordDocGetCollection($oWordApp, 0)
    ConsoleWrite(@error & @LF)
    $sText = ClipGet()
    $oDoc.Range.insertAfter(chr(13)); вставляем символ переноса строки
    $oDoc.Range.Paste ;Вставляем из буфера формат rtf
    _WordQuit($oWordApp, -1)
    ConsoleWrite(@error & @LF)
    Sleep(1000)
Next
 
Автор
T

tehnik

Новичок
Сообщения
9
Репутация
0
Да, с текстом работает, но не с таблицей. Записал макрос в ворде, в нем используется Selection.PasteAndFormat, но в AutoIT использование Selection выдает "The requested action with this object has failed"

UPD Все заработало. Надо указывать $Doc.Selection.Paste, где $Doc = _WordCreate
 

Vlasssov

Осваивающий
Сообщения
430
Репутация
25
Смело меняем selection на range
http://autoit-script.ru/index.php?topic=6829.msg47233#msg47233
 
Автор
T

tehnik

Новичок
Сообщения
9
Репутация
0
Да, я уже проверил, что работает и с Range.
 
Верх