Что нового

[Элементы GUI] Заполнение формы документа с форматированием из GUI

Автор
ZeVSalt

ZeVSalt

Я не лупоглазый, это прищур такой !
Сообщения
136
Репутация
0
Проверял на MS 2003, 2007, 2010, в этих версиях работает
В других не проверял
 

id.balandin

Новичок
Сообщения
30
Репутация
0
Ошибка, и все тут!
WIN 10 (x86) MS office 10
Я уже не понимаю в чем проблема:

Код:
$oWord = _WordCreate($sTemplate, 0, 0)
$oWord = ^ ERROR
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
_Word_Create

В новых версиях поменялись названия функций.
 

id.balandin

Новичок
Сообщения
30
Репутация
0
поправил. все равно ошибка...библиотеки что ли виноваты :stars: :stars: :stars: :IL_AutoIt_1:
вот код:
Код:
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <Word.au3>
#include <Array.au3>
#include <File.au3>

Global $sTemplate = @ScriptDir & '\template.doc'


#Region ### START Koda GUI section ###
$Form1_1 = GUICreate("Заявление", 585, 520, 534, 217)
$FIO = GUICtrlCreateInput("", 176, 112, 345, 21)


$doljnost = GUICtrlCreateCombo("", 176, 144, 345, 21)
GUICtrlSetData(-1, "Директор|Генеральный директор|Ликвидатор|Главный бухгалтер")
$Podrazd = GUICtrlCreateInput("", 176, 176, 345, 21)
$Organiz = GUICtrlCreateCombo("", 176, 208, 345, 21)
GUICtrlSetData(-1, "Организация 1|Организация 2")
$Nas_punkt = GUICtrlCreateCombo("", 176, 240, 345, 21)
GUICtrlSetData(-1, "нас.пункт 1|нас.пункт 2")
$SNILS = GUICtrlCreateInput("", 176, 272, 345, 21)
$Phone = GUICtrlCreateInput("(код города)" & "", 176, 304, 345, 21)
$pas_serial = GUICtrlCreateInput("", 152, 336, 89, 21)
$pas_number = GUICtrlCreateInput("", 352, 336, 169, 21)
$data = GUICtrlCreateInput("", 152, 368, 89, 21)
$Organ = GUICtrlCreateInput("", 352, 368, 169, 21)
$Button1 = GUICtrlCreateButton("СОХРАНИТЬ", 400, 448, 150, 33, 0)
$Button2 = GUICtrlCreateButton("ВЫХОД", 448, 150, 33, 0)
$Button3 = GUICtrlCreateButton("ПЕЧАТЬ", 217, 448, 150, 33, 0)
$Label1 = GUICtrlCreateLabel("Заявление на изготовление ключа проверки ЭЦП", 64, 40, 452, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
$Label3 = GUICtrlCreateLabel("Дата выдачи", 64, 368, 70, 17)
$Label4 = GUICtrlCreateLabel("Кем выдан", 248, 368, 60, 17)
$Label5 = GUICtrlCreateLabel("Серия паспорт", 64, 336, 79, 17)
$Label6 = GUICtrlCreateLabel("Номер паспорт", 248, 336, 82, 17)
$Label7 = GUICtrlCreateLabel("Телефон", 64, 304, 49, 17)
$Label8 = GUICtrlCreateLabel("СНИЛС", 64, 272, 42, 17)
$Label9 = GUICtrlCreateLabel("Населенный пункт", 64, 240, 99, 17)
$Label10 = GUICtrlCreateLabel("Организация", 64, 208, 71, 17)
$Label11 = GUICtrlCreateLabel("Подразделение", 64, 176, 84, 17)

$Label12 = GUICtrlCreateLabel("Должность", 64, 144, 62, 17)
$Label13 = GUICtrlCreateLabel("ФИО", 64, 112, 31, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Func ParseFullName($sFullName)
        $sFullName = StringRegExpReplace($sFullName, "[^\sЁёА-Яа-я]", Chr(32))
        $aFullName = StringRegExp(StringLower($sFullName), "\s*([ЁёА-Яа-я]+)\s*([ЁёА-Яа-я]+)\s*([ЁёА-Яа-я]+)\s*", 3)

        If @error Then
                Return -1
        EndIf

        $sSurname = StringUpper(StringLeft($aFullName[0], 1)) & StringRight($aFullName[0], StringLen($aFullName[0]) - 1)
        $sName = StringUpper(StringLeft($aFullName[1], 1)) & "."
        $sPatronymic = StringUpper(StringLeft($aFullName[2], 1)) & "."

        Return $sSurname & " " & $sName & " " & $sPatronymic
EndFunc   ;==>ParseFullName


Func ParseDate($sDate)
        $sDate = StringRegExpReplace($sDate, "[^\d]", "")
        $aDate = StringRegExp($sDate, "(\d{2})(\d{2})(\d{4}|\d{2})", 3)

        If @error Then
                Return -1
        EndIf

        $sDD = $aDate[0]
        $sMM = $aDate[1]
        $sYYYY = $aDate[2]

        If StringLen($sYYYY) = 2 Then
                If Int($sYYYY) <= 20 Then
                        $sYYYY = "20" & $sYYYY
                Else
                        $sYYYY = "19" & $sYYYY
                EndIf
        EndIf

        If (($sDD < 1) Or ($sDD > 31)) Or (($sMM < 1) Or ($sMM > 12)) Then
                Return -1
        Else
                Return $sDD & "." & $sMM & "." & $sYYYY
        EndIf
EndFunc   ;==>ParseDate

While 1

    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1

            $oWord = _Word_Create($sTemplate, 0, 0)
            $oDoc = _Word_DocGetCollection($oWord, 0)

$_FIO = GUICtrlRead ($FIO,0)
                _Word_DocFindReplace($oDoc, '_FIO', $_FIO)
$_doljnost = GUICtrlRead ($doljnost,0)
                _Word_DocFindReplace($oDoc, '_doljnost', $_doljnost)
$_Podrazd = GUICtrlRead ($Podrazd,0)
                _Word_DocFindReplace($oDoc, '_Podrazd', $_Podrazd)
$_Organiz = GUICtrlRead ($Organiz,0)
                _Word_DocFindReplace($oDoc, '_Organiz', $_Organiz)
$_Nas_punkt = GUICtrlRead ($Nas_punkt,0)
                _Word_DocFindReplace($oDoc, '_Nas_punkt', $_Nas_punkt)
$_Phone = GUICtrlRead ($Phone,0)
                _Word_DocFindReplace($oDoc, '_Phone', $_Phone)
$_pas_serial = GUICtrlRead ($pas_serial,0)
                _Word_DocFindReplace($oDoc, '_pas_serial', $_pas_serial)
$_pas_number = GUICtrlRead ($pas_number,0)
                _Word_DocFindReplace($oDoc, '_pas_number', $_pas_number)
$_data = GUICtrlRead ($data,0)
$_Organ = GUICtrlRead ($Organ,0)
                _Word_DocFindReplace($oDoc, '_Organ', $_Organ)

;~                      Считываю строку из контрола
                        $sSNILS = GUICtrlRead($SNILS, 0)
;~                      Парсю и записываю 11 чисел в массив
                        $aSNILS = StringRegExp($sSNILS, "\d", 3)
;~                      Проверяю что их реально 11, и ничего не забыли
                        If UBound($aSNILS) <> 11 Then
                                MsgBox(1, "Предупреждение", "Вы ввели НЕ 11 цифр СНИЛС")

                        EndIf
;~                      В цикле заменяю все значения в шаблоне
                        For $I = 0 To UBound($aSNILS) - 1
                                _Word_DocFindReplace($oDoc, 'SNILS_' & $I, $aSNILS[$I], 1)
                        Next


$min_name = ParseFullName ($_FIO)
_Word_DocFindReplace($oDoc, '_mname', $min_name)

$pdata = ParseDate ($_data)
_Word_DocFindReplace($oDoc, '_data', $pdata)

            _Word_DocSaveAs($oDoc, @ScriptDir & $_FIO)
            _Word_Quit($oWord)
            $oWord = 0
            $oDoc = 0
;~             ShellExecute($_FIO) ; открытие документа после сохранения
        Case $Button2
            Exit

        Case $Button3
            $print = _FilePrint(@ScriptDir & $_FIO & '.doc')

    EndSwitch
WEnd

Кстати, а распечатка работает. Правда выводит стандартные данные из template.doc


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

Код:
_Word_DocGetCollection

Что это за функция?
На Win XP SP3 word 2007 тоже не работает!
 
Верх