Что нового

Перенос информации в Word

koks0017

Новичок
Сообщения
53
Репутация
0
Версия AutoIt: 3.
Version 3.5.4
Описание:
Добрый день!
Нужно сделать следующие:
1) Окно с текущей датой и выбором дат.
2) В окне несколько полей для заполнения (допустим пять), так же кнопка добавить поле.
3) Кнопка "Сохранить заменить в Word", "Добавить поле".
4) Если это возможно то проверка орфографии.
Идея следующая, заполнить поля в программе, нажать сохранить и сохранение идет в нужную директорию (она должна быть по умолчанию) с именем файла, датой которая будет указана сверху в программе.
Примечания:
Желательно с программку с комментариями :smile:
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Не совсем ясно , что должно происходить по кнопке "Сохранить заменить в Word" - создаваться документ Word и если есть с таким именем, то заменить новым ? И что нужно делать с информацией из полей ?
с именем файла, датой которая будет указана сверху в программе
Имя файла - есть дата, которую указали в первом поле ?
 
Автор
K

koks0017

Новичок
Сообщения
53
Репутация
0
По кнопке "сохранить в word" должно быть сохранение постоянную директорию (тоесть всегда одну и ту же). К примеру на диске D папка с именем 111.
Если есть такой документ, проверить содержимое и вывести на экран с возможностью добавить.
Имя файла к примеру сегодняшняя дата 14.09.17.
Сверху, в программе выборка даты (по умолчанию стоит текущая дата, на момент открытия программы).При нажатии на кнопку сохранить в ворд. Создаётся документ с именем даты (тобиш 14.09.17 к примеру). Выпадает бокс об успешном создании файла или о том что файл уже есть и его содержимым. После добавления по кнопке сохранить, файл пересохраняется.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
koks0017 сказал(а):
не кто не может помочь? :( :( :(

Вы бы сперва научились формулировать, то чего хотите, потому что из прочтенного складывается впечатление "Мне нужно окошко с кнопочкой". Вас попросту не поняли
P.S. Вы так и не ответили что делать с информацией из полей

Вот набросал из того что понял (да там много лишнего и почти 0 отладки набросал же :ok:) если это оно могу немного прокомментить. Двойной левый клик для редактирования пункта/для удаления двойной правый клик дальше все должно быть ясно

Код:
;Устарело
#include <Word.au3>
#include <DateTimeConstants.au3>
#include <ListviewConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
Opt("GUIOnEventMode", 1)
Opt("TrayAutoPause", 0)

Global $hGui, $iDate, $iCal, $iInput, $iBtnFolder, $iBtnAddItem, $iBtnSave, $iListView
Global $sScriptNameNoExt, $sFolderName, $sFileName, $sFullPath

$sScriptNameNoExt = StringMid(@ScriptName, 1, StringInStr(@ScriptName, ".") - 1)
$sFolderName = IniRead(@ScriptDir & "\" & $sScriptNameNoExt & ".ini", $sScriptNameNoExt, "Folder", "")
If Not $sFolderName Then $sFolderName = @ScriptDir
$sFileName = @MDAY & "." & @MON & "." & @YEAR & ".doc"
$sFullPath = $sFolderName & "\" & $sFileName

Global $oWord = _Word_Create(False, True)
If @error Then Exit MsgBox(0, "Error", "Ошибка функции: _Word_Create" & @LF & "Error = " & @error & @LF & "Extended = " & @extended)
$oDocCS = _Word_DocAdd($oWord)
If @error Then Exit MsgBox(0, "Error", "Ошибка функции: _Word_DocAdd" & @LF & "Error = " & @error & @LF & "Extended = " & @extended)
$oRangeCS = _Word_DocRangeSet($oDocCS, 0)
If @error Then Exit MsgBox(0, "Error", "Ошибка функции: _Word_DocRangeSet" & @LF & "Error = " & @error & @LF & "Extended = " & @extended)

OnAutoItExitRegister("_OnExit")

$hGui = GUICreate($sFileName, 600, 210)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

$iDate = GUICtrlCreateDate("", 10, 10, 160, 20, BitOR($DTS_SHORTDATEFORMAT, $DTS_UPDOWN))
GUICtrlSetOnEvent($iDate, "_SetFileName")
$iCal = GUICtrlCreateMonthCal("", 10, 40, 160, 160)
GUICtrlSetOnEvent($iCal, "_SetFileName")

$iInput = GUICtrlCreateInput(@ScriptDir, 180, 10, 380, 20)

$iBtnFolder = GUICtrlCreateButton("...", 570, 10, 20, 20)
GUICtrlSetOnEvent($iBtnFolder, "_SetFolderName")

$iBtnAddItem = GUICtrlCreateButton("Добавить поле", 230, 180, 100, 20)
GUICtrlSetOnEvent($iBtnAddItem, "_AddItem")

$iBtnSave = GUICtrlCreateButton("Сохранить", 340, 180, 100, 20)
GUICtrlSetOnEvent($iBtnSave, "_Save")

$iBtnDelete = GUICtrlCreateButton("Удалить все", 450, 180, 100, 20)
GUICtrlSetOnEvent($iBtnDelete, "_DeleteAllItems")

$iListView = GUICtrlCreateListView("Text", 180, 40, 410, 100, BitOR($LVS_NOCOLUMNHEADER, $LVS_SINGLESEL, $LVS_EDITLABELS), BitOR($WS_EX_CLIENTEDGE, $LVS_EX_FULLROWSELECT, $LVS_EX_INFOTIP))
GUICtrlSendMsg($iListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($iListView, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE_USEHEADER)
GUICtrlCreateListViewItem("", $iListView)
GUICtrlCreateListViewItem("", $iListView)
GUICtrlCreateListViewItem("", $iListView)
GUICtrlCreateListViewItem("", $iListView)
GUICtrlCreateListViewItem("", $iListView)
$iInputCS = GUICtrlCreateInput("", 180, 150, 410, 20, $ES_READONLY)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()
_CheckFile()

While 1
	Sleep(10)
WEnd

Func _AddItem()
	$iIndex = _GUICtrlListView_AddItem($iListView, "")
	_GUICtrlListView_EditLabel($iListView, $iIndex)
EndFunc   ;==>_AddItem

Func _DeleteAllItems()
	_GUICtrlListView_DeleteAllItems($iListView)
EndFunc   ;==>_DeleteAllItems

Func _Save()
	GUICtrlSetState($iCal, $GUI_DISABLE)
	GUICtrlSetState($iBtnSave, $GUI_DISABLE)
	GUISetState(@SW_LOCK)
	Local $sItemText, $sAllText, $iErrors

	For $iIndex = 0 To _GUICtrlListView_GetItemCount($iListView) - 1
		$sItemText = _GUICtrlListView_GetItemText($iListView, $iIndex)
		If $sItemText Then $sAllText &= $sItemText & @CRLF
	Next

	Local $oDoc = _Word_DocAdd($oWord)
	$iErrors += @error
	If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocAdd" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	Local $oRange = _Word_DocRangeSet($oDoc, 0)
	$iErrors += @error
	If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocRangeSet" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	$oRange.Text = $sAllText

	If FileExists($sFullPath) Then
		Switch MsgBox(4 + 32 + 262144, $sFileName, 'Файл "' & $sFileName & '" уже существует.' & @LF & "Заменить?", 0, $hGui)
			Case 6
				_Word_DocSaveAs($oDoc, $sFullPath)
				$iErrors += @error
				If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocSaveAs" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
			Case Else
				GUISetState(@SW_UNLOCK)
				GUICtrlSetState($iBtnSave, $GUI_ENABLE)
				GUICtrlSetState($iCal, $GUI_ENABLE)
				Return
		EndSwitch
	Else
		_Word_DocSaveAs($oDoc, $sFullPath)
		$iErrors += @error
		If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocSaveAs" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	EndIf
	_Word_DocClose($oDoc)
	$iErrors += @error
	If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocClose" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	If Not $iErrors Then MsgBox(64 + 262144, $sFileName, "Файл успешно сохранен.", 0, $hGui)
	GUISetState(@SW_UNLOCK)
	GUICtrlSetState($iBtnSave, $GUI_ENABLE)
	GUICtrlSetState($iCal, $GUI_ENABLE)
EndFunc   ;==>_Save

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
	Local $iIDFrom, $iCode, $tNMHDR

	$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
	If $iIDFrom <> $iListView Then Return $GUI_RUNDEFMSG
	$iCode = DllStructGetData($tNMHDR, "Code")
	Switch $iCode
		Case $NM_CLICK
			Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
			Local $iIndex = DllStructGetData($tInfo, "Index")
			If $iIndex = -1 Then Return $GUI_RUNDEFMSG
			Local $sText = _GUICtrlListView_GetItemText($iListView, $iIndex)
			If Not $sText Then Return $GUI_RUNDEFMSG
			$oRangeCS.Delete
			$oRangeCS.InsertAfter($sText)
			$oRangeCS.LanguageID = Number("0x" & @KBLayout)
			Local $sCheckText, $sWord, $oSpellCollection
			$oSpellCollection = $oRangeCS.SpellingErrors
			If $oSpellCollection.Count > 0 Then
				For $i = 1 To $oSpellCollection.Count
					$sWord = $oSpellCollection.Item($i).Text
					$sCheckText &= $sWord & " "
				Next
				GUICtrlSetData($iInputCS, $sCheckText)
			Else
				GUICtrlSetData($iInputCS, "")
			EndIf
		Case $NM_DBLCLK
			Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
			Local $iIndex = DllStructGetData($tInfo, "Index")
			If $iIndex = -1 Then Return $GUI_RUNDEFMSG
			_GUICtrlListView_EditLabel($iListView, $iIndex)
		Case $NM_RDBLCLK
			Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
			Local $iIndex = DllStructGetData($tInfo, "Index")
			If $iIndex = -1 Then Return $GUI_RUNDEFMSG
			_GUICtrlListView_DeleteItem($iListView, $iIndex)
		Case $LVN_ENDLABELEDITA, $LVN_ENDLABELEDITW
			Local $sText = ControlGetText($hGui, "", _GUICtrlListView_GetEditControl($iListView))
			$oRangeCS.Delete
			$oRangeCS.InsertAfter($sText)
			$oRangeCS.LanguageID = Number("0x" & @KBLayout)
			Local $sCheckText, $sWord, $oSpellCollection
			$oSpellCollection = $oRangeCS.SpellingErrors
			If $oSpellCollection.Count > 0 Then
				For $i = 1 To $oSpellCollection.Count
					$sWord = $oSpellCollection.Item($i).Text
					$sCheckText &= $sWord & " "
				Next
				GUICtrlSetData($iInputCS, $sCheckText)
			Else
				GUICtrlSetData($iInputCS, "")
			EndIf
			Return True
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _SetFolderName()
	Local $sSelectFolder

	$sSelectFolder = FileSelectFolder($sFileName, "", 1 + 2 + 4, "", $hGui)
	If Not @error Then
		GUICtrlSetData($iInput, $sFolderName)
		$sFolderName = $sSelectFolder
		$sFullPath = $sFolderName & "\" & $sFileName
	EndIf
EndFunc   ;==>_SetFolderName

Func _SetFileName()
	Switch @GUI_CtrlId
		Case $iCal
			$sFileName = GUICtrlRead($iCal)
			GUICtrlSetData($iDate, $sFileName)
		Case $iDate
			$sFileName = GUICtrlRead($iDate)
	EndSwitch
	$sFileName = StringRegExpReplace($sFileName, "([0-9]{4})/([0-9]{2})/([0-9]{2})", "\3.\2.\1") & ".doc"
	$sFullPath = $sFolderName & "\" & $sFileName
	WinSetTitle($hGui, "", $sFileName)
	_CheckFile()
EndFunc   ;==>_SetFileName

Func _CheckFile()
	If Not FileExists($sFullPath) Then Return

	If MsgBox(4 + 32 + 262144, $sFileName, 'Файл "' & $sFileName & '" уже существует.' & @LF & "Открыть?", 0, $hGui) = 6 Then
		If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_Create" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
		Local $oDoc = _Word_DocOpen($oWord, $sFullPath)
		If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocOpen" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
		Local $aText = StringSplit($oDoc.Content.Text, @CRLF)
		_GUICtrlListView_DeleteAllItems($iListView)
		For $i = 1 To $aText[0]
			If StringStripWS($aText[$i], 8) Then _GUICtrlListView_AddItem($iListView, $aText[$i])
		Next
		_Word_DocClose($oDoc)
		If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocClose" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	EndIf
EndFunc   ;==>_CheckFile

Func _OnExit()
	GUIDelete($hGui)
	IniWrite(@ScriptDir & "\" & $sScriptNameNoExt & ".ini", $sScriptNameNoExt, "Folder", $sFolderName)
	_Word_DocClose($oDocCS)
	_Word_Quit($oWord)
EndFunc   ;==>_OnExit

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
K

koks0017

Новичок
Сообщения
53
Репутация
0
Спасибо! Это как рас то что нужно.
Единственное выдает ошибку если я сохраняю другой датой. к примеру 29.09.2017.
Можно описание что и как
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
koks0017 сказал(а):
Спасибо! Это как рас то что нужно.
Единственное выдает ошибку если я сохраняю другой датой. к примеру 29.09.2017.
Можно описание что и как

Давайте вы скажете что не понятно в коде и тогда я это прокомментирую. Не вижу смысла все комментировать вы же умеете пользоваться справкой? ;)
И на какой строке вылетает с ошибкой? Простой сменой даты и сохранением повторить не удалось

Сделал пару правок
Код:
;Устарело
#include <Word.au3>
#include <DateTimeConstants.au3>
#include <ListviewConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
Opt("GUIOnEventMode", 1)
Opt("TrayAutoPause", 0)

Global $hGui, $iDate, $iCal, $iInput, $iBtnFolder, $iBtnAddItem, $iBtnSave, $iListView
Global $sScriptNameNoExt, $sFolderName, $sFileName, $sFullPath

$sScriptNameNoExt = StringMid(@ScriptName, 1, StringInStr(@ScriptName, ".") - 1)
$sFolderName = IniRead(@ScriptDir & "\" & $sScriptNameNoExt & ".ini", $sScriptNameNoExt, "Folder", "")
If Not $sFolderName Then $sFolderName = @ScriptDir
$sFileName = @MDAY & "." & @MON & "." & @YEAR & ".doc"
$sFullPath = $sFolderName & "\" & $sFileName

Global $oWord = _Word_Create(False, True)
If @error Then Exit MsgBox(0, "Error", "Ошибка функции: _Word_Create" & @LF & "Error = " & @error & @LF & "Extended = " & @extended)
$oDocCS = _Word_DocAdd($oWord)
If @error Then Exit MsgBox(0, "Error", "Ошибка функции: _Word_DocAdd" & @LF & "Error = " & @error & @LF & "Extended = " & @extended)
$oRangeCS = _Word_DocRangeSet($oDocCS, 0)
If @error Then Exit MsgBox(0, "Error", "Ошибка функции: _Word_DocRangeSet" & @LF & "Error = " & @error & @LF & "Extended = " & @extended)

OnAutoItExitRegister("_OnExit")

$hGui = GUICreate($sFileName, 600, 210)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

$iDate = GUICtrlCreateDate("", 10, 10, 160, 20, BitOR($DTS_SHORTDATEFORMAT, $DTS_UPDOWN))
GUICtrlSetOnEvent($iDate, "_SetFileName")
$iCal = GUICtrlCreateMonthCal("", 10, 40, 160, 160)
GUICtrlSetOnEvent($iCal, "_SetFileName")

$iInput = GUICtrlCreateInput(@ScriptDir, 180, 10, 380, 20)

$iBtnFolder = GUICtrlCreateButton("...", 570, 10, 20, 20)
GUICtrlSetOnEvent($iBtnFolder, "_SetFolderName")

$iBtnAddItem = GUICtrlCreateButton("Добавить поле", 230, 180, 100, 20)
GUICtrlSetOnEvent($iBtnAddItem, "_AddItem")

$iBtnSave = GUICtrlCreateButton("Сохранить", 340, 180, 100, 20)
GUICtrlSetOnEvent($iBtnSave, "_Save")

$iBtnDelete = GUICtrlCreateButton("Удалить все", 450, 180, 100, 20)
GUICtrlSetOnEvent($iBtnDelete, "_DeleteAllItems")

$iListView = GUICtrlCreateListView("Text", 180, 40, 410, 100, BitOR($LVS_NOCOLUMNHEADER, $LVS_SINGLESEL, $LVS_EDITLABELS), BitOR($WS_EX_CLIENTEDGE, $LVS_EX_FULLROWSELECT, $LVS_EX_INFOTIP))
GUICtrlSendMsg($iListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($iListView, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE_USEHEADER)
GUICtrlCreateListViewItem("", $iListView)
GUICtrlCreateListViewItem("", $iListView)
GUICtrlCreateListViewItem("", $iListView)
GUICtrlCreateListViewItem("", $iListView)
GUICtrlCreateListViewItem("", $iListView)
$iInputCS = GUICtrlCreateInput("", 180, 150, 410, 20, $ES_READONLY)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()
_CheckFile()

While 1
	Sleep(10)
WEnd

Func _AddItem()
	$iIndex = _GUICtrlListView_AddItem($iListView, "")
	_GUICtrlListView_EditLabel($iListView, $iIndex)
EndFunc   ;==>_AddItem

Func _DeleteAllItems()
	_GUICtrlListView_DeleteAllItems($iListView)
EndFunc   ;==>_DeleteAllItems

Func _Save()
	GUICtrlSetState($iCal, $GUI_DISABLE)
	GUICtrlSetState($iBtnSave, $GUI_DISABLE)
	GUISetState(@SW_LOCK)
	Local $sItemText, $sAllText, $iErrors

	For $iIndex = 0 To _GUICtrlListView_GetItemCount($iListView) - 1
		$sItemText = _GUICtrlListView_GetItemText($iListView, $iIndex)
		If $sItemText Then $sAllText &= $sItemText & @CRLF
	Next

	Local $oDoc = _Word_DocAdd($oWord)
	$iErrors += @error
	If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocAdd" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	Local $oRange = _Word_DocRangeSet($oDoc, 0)
	$iErrors += @error
	If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocRangeSet" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	$oRange.Text = $sAllText

	If FileExists($sFullPath) Then
		Switch MsgBox(4 + 32 + 262144, $sFileName, 'Файл "' & $sFileName & '" уже существует.' & @LF & "Заменить?", 0, $hGui)
			Case 6
				_Word_DocSaveAs($oDoc, $sFullPath)
				$iErrors += @error
				If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocSaveAs" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
			Case Else
				GUISetState(@SW_UNLOCK)
				GUICtrlSetState($iBtnSave, $GUI_ENABLE)
				GUICtrlSetState($iCal, $GUI_ENABLE)
				Return
		EndSwitch
	Else
		_Word_DocSaveAs($oDoc, $sFullPath)
		$iErrors += @error
		If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocSaveAs" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	EndIf
	_Word_DocClose($oDoc)
	$iErrors += @error
	If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocClose" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	If Not $iErrors Then MsgBox(64 + 262144, $sFileName, "Файл успешно сохранен.", 0, $hGui)
	GUISetState(@SW_UNLOCK)
	GUICtrlSetState($iBtnSave, $GUI_ENABLE)
	GUICtrlSetState($iCal, $GUI_ENABLE)
EndFunc   ;==>_Save

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
	Local $iIDFrom, $iCode, $tNMHDR

	$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
	If $iIDFrom <> $iListView Then Return $GUI_RUNDEFMSG
	$iCode = DllStructGetData($tNMHDR, "Code")
	Switch $iCode
		Case $NM_CLICK
			Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
			Local $iIndex = DllStructGetData($tInfo, "Index")
			If $iIndex = -1 Then Return $GUI_RUNDEFMSG
			Local $sText = _GUICtrlListView_GetItemText($iListView, $iIndex)
			If Not $sText Then Return $GUI_RUNDEFMSG
			$oRangeCS.Delete
			$oRangeCS.InsertAfter($sText)
			$oRangeCS.LanguageID = Number("0x" & @KBLayout)
			Local $sCheckText, $sWord, $oSpellCollection
			$oSpellCollection = $oRangeCS.SpellingErrors
			If $oSpellCollection.Count > 0 Then
				For $i = 1 To $oSpellCollection.Count
					$sCheckText &= $oSpellCollection.Item($i).Text & " "
				Next
				GUICtrlSetData($iInputCS, $sCheckText)
			Else
				GUICtrlSetData($iInputCS, "")
			EndIf
		Case $NM_DBLCLK
			Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
			Local $iIndex = DllStructGetData($tInfo, "Index")
			If $iIndex = -1 Then Return $GUI_RUNDEFMSG
			_GUICtrlListView_EditLabel($iListView, $iIndex)
		Case $NM_RDBLCLK
			Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
			Local $iIndex = DllStructGetData($tInfo, "Index")
			If $iIndex = -1 Then Return $GUI_RUNDEFMSG
			_GUICtrlListView_DeleteItem($iListView, $iIndex)
		Case $LVN_ENDLABELEDITA, $LVN_ENDLABELEDITW
			Local $sText = ControlGetText($hGui, "", _GUICtrlListView_GetEditControl($iListView))
			$oRangeCS.Delete
			$oRangeCS.InsertAfter($sText)
			$oRangeCS.LanguageID = Number("0x" & @KBLayout)
			Local $sCheckText, $oSpellCollection
			$oSpellCollection = $oRangeCS.SpellingErrors
			If $oSpellCollection.Count > 0 Then
				For $i = 1 To $oSpellCollection.Count
					$sCheckText &= $oSpellCollection.Item($i).Text & " "
				Next
				GUICtrlSetData($iInputCS, $sCheckText)
			Else
				GUICtrlSetData($iInputCS, "")
			EndIf
			Return True
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _SetFolderName()
	Local $sSelectFolder

	$sSelectFolder = FileSelectFolder($sFileName, "", 1 + 2 + 4, "", $hGui)
	If Not @error Then
		GUICtrlSetData($iInput, $sFolderName)
		$sFolderName = $sSelectFolder
		$sFullPath = $sFolderName & "\" & $sFileName
	EndIf
EndFunc   ;==>_SetFolderName

Func _SetFileName()
	Switch @GUI_CtrlId
		Case $iCal
			$sFileName = GUICtrlRead($iCal)
			GUICtrlSetData($iDate, $sFileName)
		Case $iDate
			$sFileName = GUICtrlRead($iDate)
	EndSwitch
	$sFileName = StringRegExpReplace($sFileName, "([0-9]{4})/([0-9]{2})/([0-9]{2})", "\3.\2.\1") & ".doc"
	$sFullPath = $sFolderName & "\" & $sFileName
	WinSetTitle($hGui, "", $sFileName)
	_CheckFile()
EndFunc   ;==>_SetFileName

Func _CheckFile()
	If Not FileExists($sFullPath) Then Return

	If MsgBox(4 + 32 + 262144, $sFileName, 'Файл "' & $sFileName & '" уже существует.' & @LF & "Открыть?", 0, $hGui) = 6 Then
		If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_Create" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
		Local $oDoc = _Word_DocOpen($oWord, $sFullPath)
		If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocOpen" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
		Local $aText = StringSplit($oDoc.Content.Text, @CRLF)
		_GUICtrlListView_DeleteAllItems($iListView)
		For $i = 1 To $aText[0]
			If StringStripWS($aText[$i], 8) Then _GUICtrlListView_AddItem($iListView, $aText[$i])
		Next
		_Word_DocClose($oDoc)
		If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocClose" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	EndIf
EndFunc   ;==>_CheckFile

Func _OnExit()
	GUIDelete($hGui)
	IniWrite(@ScriptDir & "\" & $sScriptNameNoExt & ".ini", $sScriptNameNoExt, "Folder", $sFolderName)
	_Word_DocClose($oDocCS)
	_Word_Quit($oWord)
EndFunc   ;==>_OnExit

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
K

koks0017

Новичок
Сообщения
53
Репутация
0
Я только не совсем понимаю что за поле под окном ввода.
А как сделать чтобы в окне ввода добавлялись в начало цифры? К примеру 1), 2) итд. И при добавлении нового поля они продолжались.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
koks0017 сказал(а):
Я только не совсем понимаю что за поле под окном ввода.
А как сделать чтобы в окне ввода добавлялись в начало цифры? К примеру 1), 2) итд. И при добавлении нового поля они продолжались.

Поле ввода снизу отображает слова с орфографическими ошибками в выделенном пункте списка. Сравнение идет на текущей раскладке скрипта

Добавил нумерацию она будет записываться в файл потому что вы не уточнили надо ли это делать или нет

P.S. Ошибку сохранения повторить не удалось?

Код:
;Последняя правка 18:32
#include <Word.au3>
#include <DateTimeConstants.au3>
#include <ListviewConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiEdit.au3>
Opt("GUIOnEventMode", 1)
Opt("TrayAutoPause", 0)

Global $hGui, $iDate, $iCal, $iInput, $iBtnFolder, $iBtnAddItem, $iBtnSave, $iListView
Global $sScriptNameNoExt, $sFolderName, $sFileName, $sFullPath

$sScriptNameNoExt = StringLeft(@ScriptName, StringInStr(@ScriptName, ".", 0, -1) - 1)
$sFolderName = IniRead(@ScriptDir & "\" & $sScriptNameNoExt & ".ini", $sScriptNameNoExt, "Folder", "")
If Not $sFolderName Then $sFolderName = @ScriptDir
$sFileName = @MDAY & "." & @MON & "." & @YEAR & ".doc"
$sFullPath = $sFolderName & "\" & $sFileName

Global $oWord = _Word_Create(False, True)
If @error Then Exit MsgBox(0, "Error", "Ошибка функции: _Word_Create" & @LF & "Error = " & @error & @LF & "Extended = " & @extended)
$oDocCS = _Word_DocAdd($oWord)
If @error Then Exit MsgBox(0, "Error", "Ошибка функции: _Word_DocAdd" & @LF & "Error = " & @error & @LF & "Extended = " & @extended)
$oRangeCS = _Word_DocRangeSet($oDocCS, 0)
If @error Then Exit MsgBox(0, "Error", "Ошибка функции: _Word_DocRangeSet" & @LF & "Error = " & @error & @LF & "Extended = " & @extended)

OnAutoItExitRegister("_OnExit")

$hGui = GUICreate($sFileName, 600, 210)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

$iDate = GUICtrlCreateDate("", 10, 10, 160, 20, BitOR($DTS_SHORTDATEFORMAT, $DTS_UPDOWN))
GUICtrlSetOnEvent($iDate, "_SetFileName")
$iCal = GUICtrlCreateMonthCal("", 10, 40, 160, 160)
GUICtrlSetOnEvent($iCal, "_SetFileName")

$iInput = GUICtrlCreateInput(@ScriptDir, 180, 10, 380, 20)

$iBtnFolder = GUICtrlCreateButton("...", 570, 10, 20, 20)
GUICtrlSetOnEvent($iBtnFolder, "_SetFolderName")

$iBtnAddItem = GUICtrlCreateButton("Добавить поле", 230, 180, 100, 20)
GUICtrlSetOnEvent($iBtnAddItem, "_AddItem")

$iBtnSave = GUICtrlCreateButton("Сохранить", 340, 180, 100, 20)
GUICtrlSetOnEvent($iBtnSave, "_Save")

$iBtnDelete = GUICtrlCreateButton("Удалить все", 450, 180, 100, 20)
GUICtrlSetOnEvent($iBtnDelete, "_DeleteAllItems")

$iListView = GUICtrlCreateListView("Text", 180, 40, 410, 100, BitOR($LVS_NOCOLUMNHEADER, $LVS_SINGLESEL, $LVS_EDITLABELS), BitOR($WS_EX_CLIENTEDGE, $LVS_EX_FULLROWSELECT, $LVS_EX_INFOTIP))
GUICtrlSendMsg($iListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($iListView, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE_USEHEADER)
GUICtrlCreateListViewItem("1. ", $iListView)
GUICtrlCreateListViewItem("2. ", $iListView)
GUICtrlCreateListViewItem("3. ", $iListView)
GUICtrlCreateListViewItem("4. ", $iListView)
GUICtrlCreateListViewItem("5. ", $iListView)
$iInputCS = GUICtrlCreateInput("", 180, 150, 410, 20, $ES_READONLY)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()
_CheckFile()

While 1
	Sleep(10)
WEnd

Func _AddItem()
	_GUICtrlListView_BeginUpdate($iListView)
	$iIndex = _GUICtrlListView_AddItem($iListView, "")
	_GUICtrlListView_SetItemText($iListView, $iIndex, $iIndex + 1 & ". ")
	_GUICtrlEdit_SetSel(_GUICtrlListView_EditLabel($iListView, $iIndex), -1, 0)
	_GUICtrlListView_EndUpdate($iListView)
EndFunc   ;==>_AddItem

Func _DeleteAllItems()
	_GUICtrlListView_BeginUpdate($iListView)
	_GUICtrlListView_DeleteAllItems($iListView)
	_GUICtrlListView_EndUpdate($iListView)
EndFunc   ;==>_DeleteAllItems

Func _Save()
	GUICtrlSetState($iCal, $GUI_DISABLE)
	GUICtrlSetState($iBtnSave, $GUI_DISABLE)
	GUISetState(@SW_LOCK)
	Local $sItemText, $sAllText, $iErrors

	For $iIndex = 0 To _GUICtrlListView_GetItemCount($iListView) - 1
		$sItemText = _GUICtrlListView_GetItemText($iListView, $iIndex)
		If $sItemText Then $sAllText &= $sItemText & @CRLF
	Next

	Local $oDoc = _Word_DocAdd($oWord)
	$iErrors += @error
	If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocAdd" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	Local $oRange = _Word_DocRangeSet($oDoc, 0)
	$iErrors += @error
	If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocRangeSet" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	$oRange.Text = $sAllText

	If FileExists($sFullPath) Then
		Switch MsgBox(4 + 32 + 262144, $sFileName, 'Файл "' & $sFileName & '" уже существует.' & @LF & "Заменить?", 0, $hGui)
			Case 6
				_Word_DocSaveAs($oDoc, $sFullPath)
				$iErrors += @error
				If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocSaveAs" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
			Case Else
				GUISetState(@SW_UNLOCK)
				GUICtrlSetState($iBtnSave, $GUI_ENABLE)
				GUICtrlSetState($iCal, $GUI_ENABLE)
				Return
		EndSwitch
	Else
		_Word_DocSaveAs($oDoc, $sFullPath)
		$iErrors += @error
		If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocSaveAs" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	EndIf
	_Word_DocClose($oDoc)
	$iErrors += @error
	If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocClose" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	If Not $iErrors Then MsgBox(64 + 262144, $sFileName, "Файл успешно сохранен.", 0, $hGui)
	GUISetState(@SW_UNLOCK)
	GUICtrlSetState($iBtnSave, $GUI_ENABLE)
	GUICtrlSetState($iCal, $GUI_ENABLE)
EndFunc   ;==>_Save

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
	Local $iIDFrom, $iCode, $tNMHDR

	$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
	If $iIDFrom <> $iListView Then Return $GUI_RUNDEFMSG
	$iCode = DllStructGetData($tNMHDR, "Code")
	Switch $iCode
		Case $NM_CLICK
			Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
			Local $iIndex = DllStructGetData($tInfo, "Index")
			If $iIndex = -1 Then Return $GUI_RUNDEFMSG
			Local $sText = _GUICtrlListView_GetItemText($iListView, $iIndex)
			If Not $sText Then Return $GUI_RUNDEFMSG
			$oRangeCS.Delete
			$oRangeCS.InsertAfter($sText)
			$oRangeCS.LanguageID = Number("0x" & @KBLayout)
			Local $sCheckText, $sWord, $oSpellCollection
			$oSpellCollection = $oRangeCS.SpellingErrors
			If $oSpellCollection.Count > 0 Then
				For $i = 1 To $oSpellCollection.Count
					$sCheckText &= $oSpellCollection.Item($i).Text & " "
				Next
				GUICtrlSetData($iInputCS, $sCheckText)
			Else
				GUICtrlSetData($iInputCS, "")
			EndIf
		Case $NM_DBLCLK
			Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
			Local $iIndex = DllStructGetData($tInfo, "Index")
			If $iIndex = -1 Then Return $GUI_RUNDEFMSG
			_GUICtrlListView_EditLabel($iListView, $iIndex)
		Case $NM_RDBLCLK
			Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
			Local $iIndex = DllStructGetData($tInfo, "Index")
			If $iIndex = -1 Then Return $GUI_RUNDEFMSG
			_GUICtrlListView_DeleteItem($iListView, $iIndex)
		Case $LVN_ENDLABELEDITA, $LVN_ENDLABELEDITW
			Local $sText = ControlGetText($hGui, "", _GUICtrlListView_GetEditControl($iListView))
			$oRangeCS.Delete
			$oRangeCS.InsertAfter($sText)
			$oRangeCS.LanguageID = Number("0x" & @KBLayout)
			Local $sCheckText, $oSpellCollection
			$oSpellCollection = $oRangeCS.SpellingErrors
			If $oSpellCollection.Count > 0 Then
				For $i = 1 To $oSpellCollection.Count
					$sCheckText &= $oSpellCollection.Item($i).Text & " "
				Next
				GUICtrlSetData($iInputCS, $sCheckText)
			Else
				GUICtrlSetData($iInputCS, "")
			EndIf
			Return True
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _SetFolderName()
	Local $sSelectFolder

	$sSelectFolder = FileSelectFolder($sFileName, "", 1 + 2 + 4, "", $hGui)
	If Not @error Then
		GUICtrlSetData($iInput, $sFolderName)
		$sFolderName = $sSelectFolder
		$sFullPath = $sFolderName & "\" & $sFileName
	EndIf
EndFunc   ;==>_SetFolderName

Func _SetFileName()
	Switch @GUI_CtrlId
		Case $iCal
			$sFileName = GUICtrlRead($iCal)
			GUICtrlSetData($iDate, $sFileName)
		Case $iDate
			$sFileName = GUICtrlRead($iDate)
	EndSwitch
	$sFileName = StringRegExpReplace($sFileName, "([0-9]{4})/([0-9]{2})/([0-9]{2})", "\3.\2.\1") & ".doc"
	$sFullPath = $sFolderName & "\" & $sFileName
	WinSetTitle($hGui, "", $sFileName)
	_CheckFile()
EndFunc   ;==>_SetFileName

Func _CheckFile()
	If Not FileExists($sFullPath) Then Return

	If MsgBox(4 + 32 + 262144, $sFileName, 'Файл "' & $sFileName & '" уже существует.' & @LF & "Открыть?", 0, $hGui) = 6 Then
		If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_Create" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
		Local $oDoc = _Word_DocOpen($oWord, $sFullPath)
		If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocOpen" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
		Local $aText = StringSplit($oDoc.Content.Text, @CRLF)
		_GUICtrlListView_DeleteAllItems($iListView)
		_GUICtrlListView_BeginUpdate($iListView)
		For $i = 1 To $aText[0]
			If StringStripWS($aText[$i], 8) Then _GUICtrlListView_AddItem($iListView, $aText[$i])
		Next
		_GUICtrlListView_EndUpdate($iListView)
		_Word_DocClose($oDoc)
		If @error Then MsgBox(0, "Error", "Ошибка функции: _Word_DocClose" & @LF & "Error = " & @error & @LF & "Extended = " & @extended, 0, $hGui)
	EndIf
EndFunc   ;==>_CheckFile

Func _OnExit()
	GUIDelete($hGui)
	IniWrite(@ScriptDir & "\" & $sScriptNameNoExt & ".ini", $sScriptNameNoExt, "Folder", $sFolderName)
	_Word_DocClose($oDocCS)
	_Word_Quit($oWord)
EndFunc   ;==>_OnExit

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
K

koks0017

Новичок
Сообщения
53
Репутация
0
Спасибо это то что нужно!!!
Ошибки нет.
 
Верх