Что нового

Word Как открыть пустой файл, а следом существующий

pvnn

Осваивающий
Сообщения
305
Репутация
32
Всем привет
В нижеприведенном коде, при открытии файла, предыдущий пустой документ закрывается.

Код:
#include <Word.au3>
	$oWord = _Word_Create()        ; Создать Новый экземпляр Word
	$oDoc=_Word_DocAdd($oWord)     ; Открыть новый пустой документ
	$oDocTemp=_Word_DocOpen($oWord, @ScriptDir&'\1.docx') ; Открыть указанный документ


Могу написать так. Работает, но наверное это неправильно плодить _Word_Create()
Код:
#include <Word.au3>
	$oWord = _Word_Create()       	 	; Создать Новый экземпляр Word
	$oDoc=_Word_DocAdd($oWord)    	 	; Открыть новый пустой документ
	$oWord2 = _Word_Create(True,True)   ; Создать Второй экземпляр Word
	$oDocTemp=_Word_DocOpen($oWord2, @ScriptDir&'\1.docx') ; Открыть указанный документ


Как правильно?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Да, " _Word_Create() " пишите один раз в начале работы с Word, по окончании работы не забывайте закрывать "_Word_Quit()"
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
ra4o, у меня вот какая проблема:
смотрите первый пример.
Я хочу открыть 2 файла, пустой документ:
Код:
$oDoc=_Word_DocAdd($oWord)

и уже существующий:
Код:
$oDocTemp=_Word_DocOpen($oWord, @ScriptDir&'\1.docx')

А получается, что открывается только второй (1.docx). При чем я вижу, что сначала открывается пустой документ, но после открытия второго файла файла (1.docx), пустой закрывается.
Как это победить?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Смотрите в трее внимательнее, у вас под открытым документом 1.docx есть чистый, вновь созданный.
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
У меня именно один документ... вот я и не пойму что за баг
Вот если наоборот написать, то работает: 2 документа открывает
Код:
$oDocTemp=_Word_DocOpen($oWord, @ScriptDir&'\1.docx') ; Открыть указанный документ
    $oDoc=_Word_DocAdd($oWord)     ; Открыть новый пустой документ

:stars:
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Пробовал у себя - два документа не зависимо от очерёдности открытия. Пробовал на Win7x32 и на Win10x64 ,Office 2010.
Код:
#include <Word.au3>
    $oWord = _Word_Create()
	$oDoc=_Word_DocAdd($oWord)     ; Открыть новый пустой документ
    $oDocTemp=_Word_DocOpen($oWord, @ScriptDir&'\1.docx') ; Открыть указанный документ
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
ra4o, здесь главное версия Office
Поставил 2010 - тоже нет проблем, открываются 2 файла.
Попробуйте в Office 2013 запустите, будет как я описал. Битность системы значения не имеет.
Получается все-таки это глюк!
Надо бы в Office 2016 проверить, но пока нет возможности

Тему уже много раз посмотрели, народ на форуме, отпишитесь у вас как? Есть такие глюки?
 

Hiki

Новичок
Сообщения
27
Репутация
1
Win7x32, Office 2007, открываются оба файла по обоим вариантам.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
pvnn, в таком случае, возможно Вам стоит попробовать UDF "Word.au3" более ранних версий AutoIt , по-моему 3.3.8 и раньше, но там выше приведенный код работать не будет - изменились имена функций (зато на старые функции есть русская справка ;) )
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
ra4o, опытным путем я уже нашел 3 варианта решения для Office 2013:
Код:
;Решение1: Создать новый документ, Сохранить его и снова Открыть.
	$oWord = _Word_Create()       	 	; Создать Новый экземпляр Word
	$oDoc=_Word_DocAdd($oWord)    	 	; Открыть новый пустой документ
	_Word_DocSaveAs($oDoc,@ScriptDir&'\itog',$wdFormatXMLDocument) ; Сохранить документ в формате Word docx
	_Word_DocClose($oDoc)
	$oDoc=_Word_DocOpen($oWord,@ScriptDir&'\itog.docx')   	; Открыть итоговый Word документ
	$oDocTemp=_Word_DocOpen($oWord, @ScriptDir&'\'&'1.docx') ; Открыть указанный документ

	;Решение2: Выполнить какое-нибудь действие с файлом, например разметка страницы
	$oWord = _Word_Create()       	 	; Создать Новый экземпляр Word
	$oDoc=_Word_DocAdd($oWord)    	 	; Открыть новый пустой документ
	$oWord.ActiveDocument.PageSetup.TopMargin=2*28.35
	$oDocTemp=_Word_DocOpen($oWord, @ScriptDir&'\'&'1.docx') ; Открыть указанный документ

	;Решение3: Создать второй экземпля Word
	$oWord = _Word_Create()       	 	; Создать Новый экземпляр Word
	$oDoc=_Word_DocAdd($oWord)    	 	; Открыть новый пустой документ
	$oWord2 = _Word_Create(True,True)   ; Создать Второй экземпляр Word
	$oDocTemp=_Word_DocOpen($oWord2, @ScriptDir&'\'&'1.docx') ; Открыть указанный документ
 
Верх