Что нового

Объединение файлов doc

RipVanWinkel

Новичок
Сообщения
81
Репутация
0
Версия AutoIt: 3.3.14.2

Описание:
Доброго времени суток.

В папке лежит четыре файла *.doc
В файле "Список.txt" - приведены названия файлов в определенной последовательности.

Подскажите пожалуйста - как автоитом объединить эти четыре файла doc - в один файл итог.doc (в той последовательности в какой они находятся в файле "Список.txt") ?

Примечания:
Файл Итог.doc - находится в той же папке, что и скрипт (на момент начала работы скрипта - он пустой)
 

Вложения

  • 34535424.rar
    10.9 КБ · Просмотры: 2

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
объединить эти четыре файла doc - в один файл итог.doc

Пробуйте (первоначальный "Итог.doc" будет заменен)

Код:
#include <Word.au3>
OnAutoItExitRegister("_OnExit")
Opt("TrayAutoPause", 0)

Global $sListPath = @ScriptDir & "\Список.txt", $sDocOutPath = @ScriptDir & "\Итог.doc", $aList, $oWord, $oDoc
$aList = FileReadToArray($sListPath)
If @error Or @extended = 1 Then Exit MsgBox(16, "Ошибка", "Ошибка списка.")
$oWord = _Word_Create(False)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка функции: _Word_Create" & @CRLF & "Error = " & @error & @CRLF & "Extended = " & @extended)
$oDoc = _Word_DocOpen($oWord, $aList[0])
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка функции: _Word_DocOpen" & @CRLF & "Error = " & @error & @CRLF & "Extended = " & @extended)

For $i = 1 To UBound($aList) - 1
	With $oWord.Selection
		.EndKey(6)
		.InsertBreak(7)
		.InsertFile(@ScriptDir & "\" & $aList[$i])
	EndWith
Next

_Word_DocSaveAs($oDoc, $sDocOutPath)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка функции: _Word_DocSaveAs" & @CRLF & "Error = " & @error & @CRLF & "Extended = " & @extended)
_Word_DocClose($oDoc)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка функции: _Word_DocClose" & @CRLF & "Error = " & @error & @CRLF & "Extended = " & @extended)

Func _OnExit()
	_Word_Quit($oWord)
EndFunc   ;==>_OnExit
 
Автор
R

RipVanWinkel

Новичок
Сообщения
81
Репутация
0
Tempo, что-то не работает.
Выдает ошибку: "Ошибка функции: _Word_DocOpen Error=3..."
 

Вложения

  • сообщение об ошибке.jpg
    сообщение об ошибке.jpg
    17.7 КБ · Просмотры: 8

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
RipVanWinkel сказал(а):
Tempo, что-то не работает.
Выдает ошибку: "Ошибка функции: _Word_DocOpen Error=3..."

Вы пробовали именно с вашим примером? Какая у вас версия ворда?


Добавлено:
Сообщение автоматически объединено:

Попробуйте так

Код:
#include <Word.au3>
OnAutoItExitRegister("_OnExit")
Opt("TrayAutoPause", 0)

Global $sListPath = @ScriptDir & "\Список.txt", $sDocOutPath = @ScriptDir & "\Итог.doc", $aList, $oWord, $oDoc
$aList = FileReadToArray($sListPath)
If @error Or @extended = 1 Then Exit MsgBox(16, "Ошибка", "Ошибка списка.")
$oWord = _Word_Create(False)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка функции: _Word_Create" & @CRLF & "Error = " & @error & @CRLF & "Extended = " & @extended)
$oDoc = _Word_DocOpen($oWord, @ScriptDir & "\" & $aList[0])
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка функции: _Word_DocOpen" & @CRLF & "Error = " & @error & @CRLF & "Extended = " & @extended)

For $i = 1 To UBound($aList) - 1
	With $oWord.Selection
		.EndKey(6)
		.InsertBreak(7)
		.InsertFile(@ScriptDir & "\" & $aList[$i])
	EndWith
Next

_Word_DocSaveAs($oDoc, $sDocOutPath)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка функции: _Word_DocSaveAs" & @CRLF & "Error = " & @error & @CRLF & "Extended = " & @extended)
_Word_DocClose($oDoc)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка функции: _Word_DocClose" & @CRLF & "Error = " & @error & @CRLF & "Extended = " & @extended)

Func _OnExit()
	_Word_Quit($oWord)
EndFunc   ;==>_OnExit
 
Автор
R

RipVanWinkel

Новичок
Сообщения
81
Репутация
0
Tempo , так тоже не работает.
Выдает - ту же ошибку.

Использовал именно те файлы, которые приводил в первом сообщении.

Версия ворда - "Word 2003"
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
RipVanWinkel сказал(а):
Версия ворда - "Word 2003"
Тестирую на 2007 :ok:

А если так

Код:
#include <Word.au3>
OnAutoItExitRegister("_OnExit")
Opt("TrayAutoPause", 0)

Global $sListPath = @ScriptDir & "\Список.txt", $sDocOutPath = @ScriptDir & "\Итог.doc", $aList, $oWord, $oDoc
$aList = FileReadToArray($sListPath)
If @error Or @extended = 1 Then Exit MsgBox(16, "Ошибка", "Ошибка списка.")
$oWord = _Word_Create(False)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка функции: _Word_Create" & @CRLF & "Error = " & @error & @CRLF & "Extended = " & @extended)
$oDoc = _Word_DocAdd($oWord)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка функции: _Word_DocAdd" & @CRLF & "Error = " & @error & @CRLF & "Extended = " & @extended)

With $oWord.Selection
	.EndKey(6)
	.InsertFile(@ScriptDir & "\" & $aList[0])
EndWith
For $i = 1 To UBound($aList) - 1
	With $oWord.Selection
		.EndKey(6)
		.InsertBreak(7)
		.InsertFile(@ScriptDir & "\" & $aList[$i])
	EndWith
Next

_Word_DocSaveAs($oDoc, $sDocOutPath)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка функции: _Word_DocSaveAs" & @CRLF & "Error = " & @error & @CRLF & "Extended = " & @extended)
_Word_DocClose($oDoc)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка функции: _Word_DocClose" & @CRLF & "Error = " & @error & @CRLF & "Extended = " & @extended)

Func _OnExit()
	_Word_Quit($oWord)
EndFunc   ;==>_OnExit
 
Автор
R

RipVanWinkel

Новичок
Сообщения
81
Репутация
0
Tempo , ошибка теперь выглядит так:
"Ошибка функции: _Word_DocAdd Error = 3 ...."
 

Вложения

  • сообщение об ошибке-.jpg
    сообщение об ошибке-.jpg
    14 КБ · Просмотры: 2

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
RipVanWinkel сказал(а):
Tempo , ошибка теперь выглядит так:
"Ошибка функции: _Word_DocAdd Error = 3 ...."

Пока других вариантов не придумал все что могу посоветовать это попробовать 2007 :-\
 
Автор
R

RipVanWinkel

Новичок
Сообщения
81
Репутация
0
Tempo , вы наверное какой-то сложный алгоритм имеете ввиду (поскольку используете UDF Word.au3).

Я имел ввиду - нечто более простое.

Открытие программой по умолчанию - в скрытом режиме - уже существующего файла Итог.doc
Затем поочередное открытие - в скрытом режиме - файлов из списка. И использование в каждом файле сочетаний Ctrl+A Ctrl+C Ctrl+V с переходами между этими окнами и Итог.doc.
Закрытие с сохранением.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
RipVanWinkel сказал(а):
Я имел ввиду - нечто более простое.
Для меня это звучит что вы хотите какой-то огромный костыль :( Ваш ворд попросту не открывает файлы -2147352567 это общая ошибка и все

Вот еще вариант скажете вылетит с ошибкой или нет

Код:
#RequireAdmin
OnAutoItExitRegister("_OnExit")
Opt("TrayAutoPause", 0)

Global $sListPath = @ScriptDir & "\Список.txt", $sDocOutPath = @ScriptDir & "\Итог.doc", $aList, $oWord, $oDoc
$aList = FileReadToArray($sListPath)
If @error Or @extended = 1 Then Exit MsgBox(16, "Ошибка", "Ошибка списка.")

$oWord = ObjCreate("Word.Application")
$oWord.Visible = False
$oDoc = $oWord.Documents.Open(@ScriptDir & "\" & $aList[0])

For $i = 1 To UBound($aList) - 1
	With $oWord.Selection
		.EndKey(6)
		.InsertFile(@ScriptDir & "\" & $aList[$i])
	EndWith
Next

$oDoc.SaveAs($sDocOutPath)
$oDoc.Close

Func _OnExit()
	If IsObj($oWord) Then $oWord.Quit
EndFunc   ;==>_OnExit
 
Автор
R

RipVanWinkel

Новичок
Сообщения
81
Репутация
0
Теперь все заработало.
Большое вам спасибо.

Вы воистину - великий программист.
 
Верх