1 (изменено: Kobrasol, 2010-11-28 08:59:35)

Тема: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Написал скрипт для пакетной конвертации веб архива "MHT" в текстовый файл "RTF".
Возникла проблема скрипт конвертирует один файл а дальше вылетает с ошибкой.
Вот код скрипта:

Dim FSO, Current_Date, New_Name_File, Old_Name_File 
Dim F1, Folder1, File1, i1, T1, WordApp, Fil1, Fil2
    CONST wdFormatHTML = 8 ' формат файлов MS Office 2003
    Const wdFormatRTF = 6 ' формат файлов MS Office 2003
'F1 = InputBox ("Выберите папку.", "Выбор папки:", "F:\Books\") 'Путь до католога
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Folder1 = FSO.GetFolder("F:\Books\")
    Set WordApp = CreateObject("Word.Application")
    For Each File1 In Folder1.Files
        Old_Name_File = File1.Name 'Получаем имя файла
        Current_Date = Date()
        'MsgBox F1 & Old_Name_File ' Вводил для проверки
        i1 = len(File1.Name) - 3 'Количество символов без расширения
        T1 = Right(File1.Name, 3) 'Получаем расширение файла
        New_Name_File = Left (File1.Name, i1) & "rtf" 'Новое имя файла
        'Set WordApp = CreateObject("Word.Application")
            if T1 = "mht" then 'Ищем файлы с расширенем MHT
            'MsgBox F1 & Old_Name_File ' Вводил для проверки
            Fil1= "F:\Books\" & Old_Name_File 'Полнй путь до открываемого файла
            Fil2= "F:\Books\" & New_Name_File 'Полный путь до сохроняемого файла
            WordApp.Documents.Open Fil1 'Открытие файла в MS Office Word
            WordApp.ActiveDocument.SaveAs Fil2 ,wdFormatRTF 'Сохранение файла
            WordApp.Quit 'Закрываем Word
            File1.Delete 'Удаляем открываемый файл
            'WSH.Sleep 10000
            end if
    Next

Выдает ошибку:
Строка: 21
Символ: 4
Ошибка: Компьютер удаленного сервера не существует или недоступен: Documents.Open
Код: 800A01CE

Ошибку выдает даже если не удалять файлы. Подобный скрипт, только без удаления файла, делал для Excel, файлы конвертировал нормально.

Подскажите в чем ошибка?

2

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Option Explicit

Const wdFormatRTF = 6

Dim objFSO
Dim objFolder
Dim objFile

Dim objWord

Dim strSourceFolder
Dim strDestFolder


strSourceFolder = "E:\Песочница\0007"
strDestFolder   = "E:\Песочница\0008"

Set objFSO    = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strSourceFolder)

Set objWord   = WScript.CreateObject("Word.Application")

For Each objFile In objFolder.Files
    If UCase(objFSO.GetExtensionName(objFile)) = UCase("mht") Then
        With objWord.Documents.Open(objFile.Path)
            .SaveAs objFSO.BuildPath(strDestFolder, objFSO.GetBaseName(objFile.Name) & ".rtf"), wdFormatRTF
            .Close
        End With
        
        objFile.Delete
    End If
Next

objWord.Quit
Set objWord = Nothing

Set objFile   = Nothing
Set objFSO    = Nothing
Set objFolder = Nothing

WScript.Quit 0

Здесь не проверяется ни существование папок источника и назначения, ни наличие существующих документов в папке назначения — только чистый концепт.

3

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Спасибо работает.

4 (изменено: Kobrasol, 2010-11-23 10:59:02)

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Почитал #32 решил кое что сделать.
Идея запуск HTA без HTML тегов. Но что то не получается.
Вот код:

<HTA:APPLICATION
ID="APPLICATION"
APPLICATIONNAME="Application"
BORDERSTYLE="normal"
CAPTION="yes"
MAXIMIZEBUTTON = no
MINIMIZEBUTTON = no
SHOWINTASKBAR="yes"
SYSMENU="yes"
VERSION="1.0"
WINDOWSTATE="normal" 
INNERBORDER="no"
SCROLL="no"
CONTEXTMENU="yes"
/>

<BODY leftmargin=0 topmargin=0 rightmargin=0 bottommargin=0>
    <OBJECT id="Form1" style="width:100%;height:100%;" classid="clsid:C62A69F0-16DC-11CE-9E98-00AA00574A4F"></OBJECT>
</BODY>

<SCRIPT language=vbscript>
Option Explicit
Const wdFormatRTF = 6
Dim objFSO
Dim objFolder
Dim objFile
Dim objWord
Dim strSourceFolder
Dim strDestFolder
Dim Label1
Dim TextBox1
Dim Label2
Dim TextBox2
Dim MultiPage1
Dim CommandButton1
'=============================================================
'Инициализация установка размеров и положения окна
 window.resizeTo 380, 360
 window.moveTo (screen.width\2)-200, (screen.height\2)-220
'=============================================================
'Создание формы
    'Set MultiPage1 = Form1.Controls.Add("Forms.MultiPage.1", "MultiPage", True)
    'MultiPage = "Page1"
    Set Label1 = Form1.Controls.Add("Forms.Label.1", "Label", True)
    Label1.font.size = 10
    Label1.caption = "Исходная папка:"
    Label1.left = 10
    Label1.top = 10
    Label1.width = 100
    
    Set TextBox1 = Form1.Controls.Add("Forms.TextBox.1", "TextBox1", True)
    TextBox1.font.size = 10
    TextBox1.text = "C:\"
    TextBox1.left = 10
    TextBox1.top = 25
    TextBox1.width = 100

    Set Label2 = Form1.Controls.Add("Forms.Label.1", "Label", True)
    Label2.font.size = 10
    Label2.caption = "Конечная папка:"
    Label2.left = 10
    Label2.top = 45
    Label2.width = 100
     
    Set TextBox2 = Form1.Controls.Add("Forms.TextBox.1", "TextBox2", True)
    'TextBox2.font = "Tahoma"
    TextBox2.font.size = 10
    TextBox2.text = "C:\"
    TextBox2.left = 10
    TextBox2.top = 60
    TextBox2.width = 100
    'msgbox TextBox2
    'TextBox2.text = "D:\"
    
    Set CommandButton1 = Form1.Controls.Add("Forms.CommandButton.1", "CommandButton", True)
    CommandButton1.AutoSize = True
    CommandButton1.caption = "Конвертировать"
    CommandButton1.font.size = 10
    CommandButton1.left = 150
    CommandButton1.top = 25
    'CommandButton1.width = 25
    'CommandButton1.height = 15
    CommandButton1.TakeFocusOnClick = True
    
    Private Sub CommandButton1_Click(TextBox1, TextBox2)
    strSourceFolder = TextBox1
    strDestFolder   = TextBox2

    Set objFSO    = WScript.CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(strSourceFolder)

    Set objWord   = WScript.CreateObject("Word.Application")

    For Each objFile In objFolder.Files
        If UCase(objFSO.GetExtensionName(objFile)) = UCase("mht") Then
            With objWord.Documents.Open(objFile.Path)
                .SaveAs objFSO.BuildPath(strDestFolder, objFSO.GetBaseName(objFile.Name) & ".rtf"), wdFormatRTF
                .Close
            End With
        
            objFile.Delete
        End If
    Next

    objWord.Quit
    Set objWord = Nothing

    Set objFile   = Nothing
    Set objFSO    = Nothing
    Set objFolder = Nothing

    WScript.Quit 0
    End Sub
'==============================================================
</SCRIPT>

Пораметры я из VBA взял. Но кнопка не работает, не могу понять почему. Ошибок не выдает. Вобще с VBA серьезно не работал.

5

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Ссылка на конкретный пост находится слева, там, где приведено дата/время поста. Поправил ссылку.

6

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

В HTA нет VBA, только VBScript (естественно, объектная модель MS Office/MS Word остаётся без изменений). Для примера предлагаю ознакомиться с этой темой: VBS: Поиск слов в WinWord (2003) и выжимками из неё: HTA: Нанесение (расстановка) OMR-меток в файле MS Word.

7 (изменено: Kobrasol, 2010-11-23 12:35:52)

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Понятно что в HTA нет VBA. Я дополнительные параметры искал

'Создание формы
    '.....
    Set Label1 = Form1.Controls.Add("Forms.Label.1", "Label", True)
    Label1.font.size = 10
    Label1.caption = "Исходная папка:"
    Label1.left = 10
    Label1.top = 10
    Label1.width = 100
    '.....

Просто не знал, где их найти, ну и заглянул в VBA.
У меня задумка, конвертер для других форматов сделать.

Можно конечно и через HTML разметку сделать. Но интересно попробовать без нее.

8

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Kobrasol пишет:

Можно конечно и через HTML разметку сделать. Но интересно попробовать без нее.

Пробуйте. Как реализуете привязку событий элементов управления MS Forms к процедурам обработки событий

Sub CommandButton1_Click()

(кстати, откуда там вообще взялись аргументы «TextBox1, TextBox2» ?)
выкладывайте.

Не понятно, зачем тогда было переходить на другой хост, а не оставаться целиком в рамках MS Office.

9 (изменено: Kobrasol, 2010-11-25 09:15:40)

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Чет не получается. :(
Вот простой вариант:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; CHARSET=Windows-1251"/>
<title>
Конвертер файлов.
</title>
<hta:application
id = "Конвертер файлов"
MAXIMIZEBUTTON = "no"
MINIMIZEBUTTON = "no"
SCROLL="no"
NAVIGABLE = "yes"
applicationName = "Конвертер"
/>
</head>
<body bgcolor=buttonface style="border: none; font: 8pt sans-serif" scroll=no text=buttontext>
<script type="text/javascript">
//размеры окна
var winWidth=600; // ширина окна
var winHeight=120; // высота окна
// изменяем размер
window.resizeTo(winWidth, winHeight);
// окно в центр экрана
var winPosX=screen.width/2-winWidth/2;
var winPosY=screen.height/2-winHeight/2;
window.moveTo(winPosX, winPosY);
</script>
<script language="vbscript">
'*************************************************************************************************************
    Option Explicit
    Const wdFormatRTF = 6 'MS Office Word 2003
    Dim objFSO
    Dim objFolder
    Dim objFile
    Dim objWord
    Dim strSourceFolder
    Dim strDestFolder
    
    Sub ALLRTF(F1, F2, RS1)

    
    strSourceFolder = F1.value
    strDestFolder   = F2.value
    
    Set objFSO    = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(strSourceFolder)
    
    Set objWord   = CreateObject("Word.Application")
    
    For Each objFile In objFolder.Files
        If UCase(objFSO.GetExtensionName(objFile)) = UCase(RS1.value) Then
            With objWord.Documents.Open(objFile.Path)
            .SaveAs objFSO.BuildPath(strDestFolder, objFSO.GetBaseName(objFile.Name) & ".rtf"), wdFormatRTF
            .Close
        End With
    
            objFile.Delete
        End If
    Next
    
    objWord.Quit
    Set objWord = Nothing

    Set objFile   = Nothing
    Set objFSO    = Nothing
    Set objFolder = Nothing
    
    End Sub
</script>

</head>
<body><TABLE>
<TR>
    <TD>Исходная папка:&nbsp;</TD>
    <TD><input name = "F1" size="10" style="text-align: center" value="C:\books\txt\"></TD>
    <TD>Конечная папка:&nbsp;</TD>
    <TD><input name = "F2" size="10" style="text-align: center" value="C:\books\rtf\"></TD>
</TR>
<TR>
    <TD> Формат исходного файла: </TD>
    <TD> <select size="1" name="RS1">
    <option selected value="txt">txt</option>
    <option value="htm">htm</option>
    <option value="doc">doc</option>
    </select></TD>
    <TD><input type="button" name="button" value="Конвертировать"  onClick="ALLRTF(F1, F2, RS1)"></TD>
</TR>
</TABLE>
</body>
</html>

(кстати, откуда там вообще взялись аргументы «TextBox1, TextBox2» ?)

там же, где и Forms.Form.1 в реестре. Нужны для указания путей до файлов. Вобще это "Microsoft Forms 2.0", библиотека "C:\WINDOWS\system32\FM20.DLL", по моему с Office 2003 ставится.

10 (изменено: Kobrasol, 2010-11-25 09:14:17)

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Лишнее сообщение вышло.

11

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Примерно так:

<html id="appHTML">
    <head>
        <meta charset="windows-1251">
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
        <meta http-equiv="Content-Language" content="ru">
        <title>Конвертер файлов</title>
        <hta:Application
            Icon = "%ProgramFiles%\Microsoft Office\OFFICE11\WINWORD.EXE"
            Id="oHTA"
            ApplicationName="Конвертер файлов"
            Border="normal"
            BorderStyle="normal"
            Caption="yes"
            ContextMenu="no"
            InnerBorder="yes"
            MaximizeButton="no"
            MinimizeButton="yes"
            Navigable="no"
            Scroll="auto"
            ScrollFlat="no"
            Selection="no"
            ShowInTaskbar="yes"
            SingleInstance="yes"
            SysMenu="yes"
            Version="1.0 RC1"
            WindowState="normal"
        />
        <object classid="clsid:0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC" id="MSScriptControl">
            <param name="Timeout" value="10000">
            <param name="AllowUI" value="-1">
            <param name="UseSafeSubset" value="0">
        </object>
    </head>
    
    <style type="text/css">
        BODY {
            font: x-small Verdana, Arial, sans-serif;
            color: WindowText;
            background-color: ButtonFace;
        }
        .Row{
            clear:both;
        }
        .Left{
            float:Left;
            clear:none;
        }
        .Right{
            float:Right;
            clear:none;
        }
        .NonValid { color:FireBrick; }
        #Status { font: xx-small; }
    </style>
    
    <script language="vbscript">
        Option Explicit
        
        '===================================================================================================
        Function SelectFolder()
            Const BIF_RETURNONLYFSDIRS = &H0001
            Const BIF_EDITBOX          = &H0010
            Const BIF_VALIDATE         = &H0020
            Const BIF_NEWDIALOGSTYLE   = &H0040
            
            Dim objShell
            Dim objFSO
            
            Dim lngHWND
            Dim intOptions
            Dim strRootFolder
            
            Dim objFolder
            Dim strTemp
            
            Set objFSO    = CreateObject("Scripting.FileSystemObject")
            Set objShell  = CreateObject("Shell.Application")
            
            lngHWND       = oHTA.Document.GetElementByID("MSScriptControl").SitehWnd
            intOptions    = BIF_RETURNONLYFSDIRS Or BIF_NEWDIALOGSTYLE Or BIF_EDITBOX Or BIF_VALIDATE
            strRootFolder = 0
            
            Set objFolder = objShell.BrowseForFolder(lngHWND, "Укажите папку", intOptions, strRootFolder)
            
            If Not objFolder Is Nothing Then
                If objFSO.FolderExists(objFolder.Self.Path) Then
                    SelectFolder = objFolder.Self.Path
                End If
            End If
            
            Set objFolder = Nothing
            Set objShell  = Nothing
            Set objFSO    = Nothing
        End Function
        '===================================================================================================
        
        '===================================================================================================
        Sub SelectSourceFolder_OnClick
            Dim strSelectedFolder
            
            strSelectedFolder = Trim(SelectFolder())
            
            If Len(strSelectedFolder) <> 0 Then
                SourceFolder.value = strSelectedFolder
            End If
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Sub SelectDestFolder_OnClick
            Dim strSelectedFolder
            
            strSelectedFolder = Trim(SelectFolder())
            
            If Len(strSelectedFolder) <> 0 Then
                DestFolder.value = strSelectedFolder
            End If
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Sub Convert_OnClick
            If ValidateFields() Then
                With document
                    .getElementByID("Status").innerText               = "Идёт обработка…"
                    
                    .getElementByID("SourceFolder").disabled          = True
                    .getElementByID("SelectSourceFolder").disabled    = True
                    
                    .getElementByID("DestFolder").disabled            = True
                    .getElementByID("SelectDestFolder").disabled      = True
                    
                    .getElementByID("SourceFormat").disabled          = True
                    .getElementByID("DeleteAfterProcessing").disabled = True
                    .getElementByID("Convert").disabled               = True
                    
                    .getElementByID("tagBody").style.cursor           = "wait"
                End With
                
                setTimeout "Convert", 0
            End If
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Sub Convert_OnBlur()
            With document
                .getElementByID("Status").innerText                = ""
                
                .getElementByID("lblSourceFolder").className       = ""
                .getElementByID("SourceFolder").className          = ""
                
                .getElementByID("lblDestFolder").className         = ""
                .getElementByID("DestFolder").className            = ""
                
                .getElementByID("lblSourceFormat").className       = ""
                .getElementByID("SourceFormat").className          = ""
            End With
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Sub lblDeleteAfterProcessing_OnClick()
            With document.getElementByID("DeleteAfterProcessing")
                .focus
                .checked = Not .checked
            End With
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Function ValidateFields()
            Dim objFSO
            Dim strValidateResult
            
            Dim strSourceFolder
            Dim strDestFolder
            
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            
            ValidateFields    = True
            strValidateResult = ""
            
            With document
                strSourceFolder = .getElementByID("SourceFolder").value
                strDestFolder   = .getElementByID("DestFolder").value
                
                If Not objFSO.FolderExists(strSourceFolder) Then
                    strValidateResult = strValidateResult & "Исходная папка не найдена. "
                    
                    .getElementByID("lblSourceFolder").className       = "NonValid"
                    .getElementByID("SourceFolder").className          = "NonValid"
                    
                    ValidateFields = False
                End If
                
                If Not objFSO.FolderExists(strDestFolder) Then
                    strValidateResult = strValidateResult & "Целевая папка не найдена. "
                    
                    .getElementByID("lblDestFolder").className       = "NonValid"
                    .getElementByID("DestFolder").className          = "NonValid"
                    
                    ValidateFields = False
                End If
                
                .getElementByID("Status").innerText = strValidateResult
            End With
            
            Set objFSO = Nothing
        End Function 
        '===================================================================================================
        
        '===================================================================================================
            Sub Convert()
                Const wdFormatRTF = 6
                
                Dim objFSO
                Dim objFolder
                Dim objFile
                
                Dim objWord
                
                Dim strSourceFolder
                Dim strDestFolder
                
                Dim strSourceFormat
                
                Dim boolDeleteAfterProcessing
                
                Dim StartTime
                
                
                StartTime       = Timer
                
                strSourceFolder = document.getElementByID("SourceFolder").value
                strDestFolder   = document.getElementByID("DestFolder").value
                
                strSourceFormat = document.getElementByID("SourceFormat").value
                
                boolDeleteAfterProcessing = document.getElementByID("DeleteAfterProcessing").checked
                
                Set objFSO      = CreateObject("Scripting.FileSystemObject")
                Set objFolder   = objFSO.GetFolder(strSourceFolder)
                
                Set objWord     = CreateObject("Word.Application")
                
                For Each objFile In objFolder.Files
                    If UCase(objFSO.GetExtensionName(objFile)) = UCase(strSourceFormat) Then
                        With objWord.Documents.Open(objFile.Path)
                            .SaveAs objFSO.BuildPath(strDestFolder, objFSO.GetBaseName(objFile.Name) & ".rtf"), wdFormatRTF
                            .Close
                        End With
                        
                        If boolDeleteAfterProcessing Then
                            objFile.Delete
                        End If
                    End If
                Next
                
                objWord.Quit
                Set objWord = Nothing
                
                Set objFile   = Nothing
                Set objFSO    = Nothing
                Set objFolder = Nothing
                
                With document
                    .getElementByID("Status").innerText = "На обработку затрачено: " & _
                        TimeSerial(0, 0, Timer - StartTime) & "."
                    
                    .getElementByID("SourceFolder").disabled         = False
                    .getElementByID("SelectSourceFolder").disabled   = False
                    
                    .getElementByID("DestFolder").disabled           = False
                    .getElementByID("SelectDestFolder").disabled     = False
                    
                    .getElementByID("SourceFormat").disabled         = False
                    .getElementByID("DeleteAfterProcessing").disabled= False
                    .getElementByID("Convert").disabled              = False
                    
                    .getElementByID("tagBody").style.cursor          = "auto"
                End With
            End Sub
        '===================================================================================================
    </script>
    <body id="tagBody" scroll="auto">
        <span class="Row">
            <span class="left">
                <span id="lblSourceFolder">1. Укажите исходную папку</span>
            </span>
            <span class="right">
                <input type="text" name="SourceFolder" size="64">
                <input type="Button" name="SelectSourceFolder" value="…">
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span id="lblDestFolder">2. Укажите целевую папку</span>
            </span>
            <span class="right">
                <input type="text" name="DestFolder" size="64">
                <input type="Button" name="SelectDestFolder" value="…">
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span id="lblSourceFormat">3. Выберете формат исходных файлов</span>
            </span>
            <span class="right">
                <select size="1" name="SourceFormat">
                    <option value="txt">.txt</option>
                    <option value="htm">.htm</option>
                    <option value="doc">.doc</option>
                </select>
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span>4. Установите флажок для удаления файлов из исходной папки после обработки</span>
            </span>
            <span class="right">
                <input type="CheckBox" name="DeleteAfterProcessing">
                <span id="lblDeleteAfterProcessing">Удалять исходные файлы</span>
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span id="lblConvert">5. Нажмите кнопку &quot;Конвертировать&quot;</span>
            </span>
            <span class="right">
                <input type="Button" name="Convert" value="Конвертировать">
            </span>
        </span>
        <hr class="Row" />
        <span class="Row">
            <span id="Status">&nbsp;</span>
        </span>
    </body>
    <script language="VBScript">
        With window
            .resizeTo tagBody.scrollWidth + 25, tagBody.scrollHeight + 32
            .moveTo (.screen.availWidth - tagBody.offsetWidth) \ 2, (.screen.availHeight - tagBody.offsetHeight) \ 2
        End With
    </script>
</html>
Kobrasol пишет:
alexii пишет:

(кстати, откуда там вообще взялись аргументы «TextBox1, TextBox2» smile?)

там же, где и Forms.Form.1 в реестре. Нужны для указания путей до файлов. Вобще это "Microsoft Forms 2.0", библиотека "C:\WINDOWS\system32\FM20.DLL", по моему с Office 2003 ставится.

Я сие и имел в виду. Откуда, спрашивается, возьмутся фактические аргументы, когда в событии не предусмотрено существование таких параметров в процедуре обработки события?! Вот, скажем, в событии «DblClick()» того же элемента управления предусмотрен параметр «Cancel», в событии «MouseMove» набор параметров «Button», «Shift», «X», «Y». Под них отводится место в стеке при вызове процедуры обработки события, они заполняются фактическими данными (если это входные параметры) и т.д.

12

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Я в скриптах vbs, js, hta, vba не очень разбираюсь. Для конкретной задачи сначала ищу в интернете программы, если не нахожу пытаюсь приспособить тот скрипт который приблизительно подходит. Я уже писал VBS: Копирование RAR распаковка. мне надо было получить архив с локальной машины, распаковать определенный файл, а потом скопировать его на другую машину. Мне пришлось использовать две программы + vba скрипт который их запускает, пока это лучшее решение которое я нашел.

Вот, скажем, в событии «DblClick()» того же элемента управления предусмотрен параметр «Cancel», в событии «MouseMove» набор параметров «Button», «Shift», «X», «Y». Под них отводится место в стеке при вызове процедуры обработки события, они заполняются фактическими данными (если это входные параметры) и т.д.

Я не программист. Так балуюсь с разными скриптами. В основном с vba, макросы пишу для упрощения некоторых задач.

13 (изменено: Kobrasol, 2010-11-28 11:18:04)

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Можно и так:

<html id="appHTML">
    <head>
        <meta charset="windows-1251">
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
        <meta http-equiv="Content-Language" content="ru">
        <title>Конвертер файлов</title>
        <hta:Application
            Icon = "%ProgramFiles%\Microsoft Office\OFFICE11\WINWORD.EXE"
            Id="oHTA"
            ApplicationName="Конвертер файлов"
            Border="normal"
            BorderStyle="normal"
            Caption="yes"
            ContextMenu="no"
            InnerBorder="yes"
            MaximizeButton="no"
            MinimizeButton="yes"
            Navigable="no"
            Scroll="auto"
            ScrollFlat="no"
            Selection="no"
            ShowInTaskbar="yes"
            SingleInstance="yes"
            SysMenu="yes"
            Version="1.0 RC2"
            WindowState="normal"
        />
        <object classid="clsid:0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC" id="MSScriptControl">
            <param name="Timeout" value="10000">
            <param name="AllowUI" value="-1">
            <param name="UseSafeSubset" value="0">
        </object>
    </head>
    
    <style type="text/css">
        BODY {
            font: x-small Verdana, Arial, sans-serif;
            color: WindowText;
            background-color: ButtonFace;
        }
        .Row{
            clear:both;
        }
        .Left{
            float:Left;
            clear:none;
        }
        .Right{
            float:Right;
            clear:none;
        }
        .NonValid { color:FireBrick; }
        #Status { font: xx-small; }
    </style>
    
    <script language="vbscript">
        Option Explicit
        
        '===================================================================================================
        Function SelectFolder()
            Const BIF_RETURNONLYFSDIRS = &H0001
            Const BIF_EDITBOX          = &H0010
            Const BIF_VALIDATE         = &H0020
            Const BIF_NEWDIALOGSTYLE   = &H0040
            
            Dim objShell
            Dim objFSO
            
            Dim lngHWND
            Dim intOptions
            Dim strRootFolder
            
            Dim objFolder
            Dim strTemp
            
            Set objFSO    = CreateObject("Scripting.FileSystemObject")
            Set objShell  = CreateObject("Shell.Application")
            
            lngHWND       = oHTA.Document.GetElementByID("MSScriptControl").SitehWnd
            intOptions    = BIF_RETURNONLYFSDIRS Or BIF_NEWDIALOGSTYLE Or BIF_EDITBOX Or BIF_VALIDATE
            strRootFolder = 0
            
            Set objFolder = objShell.BrowseForFolder(lngHWND, "Укажите папку", intOptions, strRootFolder)
            
            If Not objFolder Is Nothing Then
                If objFSO.FolderExists(objFolder.Self.Path) Then
                    SelectFolder = objFolder.Self.Path
                End If
            End If
            
            Set objFolder = Nothing
            Set objShell  = Nothing
            Set objFSO    = Nothing
        End Function
        '===================================================================================================
        
        '===================================================================================================
        Sub SelectSourceFolder_OnClick
            Dim strSelectedFolder
            
            strSelectedFolder = Trim(SelectFolder())
            
            If Len(strSelectedFolder) <> 0 Then
                SourceFolder.value = strSelectedFolder
            End If
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Sub SelectDestFolder_OnClick
            Dim strSelectedFolder
            
            strSelectedFolder = Trim(SelectFolder())
            
            If Len(strSelectedFolder) <> 0 Then
                DestFolder.value = strSelectedFolder
            End If
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Sub Convert_OnClick
            If ValidateFields() Then
                With document
                    .getElementByID("Status").innerText               = "Идёт обработка…"
                    
                    .getElementByID("SourceFolder").disabled          = True
                    .getElementByID("SelectSourceFolder").disabled    = True
                    
                    .getElementByID("DestFolder").disabled            = True
                    .getElementByID("SelectDestFolder").disabled      = True
                    
                    .getElementByID("SourceFormat").disabled          = True
                    .getElementByID("DeleteAfterProcessing").disabled = True
                    .getElementByID("Convert").disabled               = True
                    .getElementByID("DestFormat").disabled            = True
                    
                    .getElementByID("tagBody").style.cursor           = "wait"
                End With
                
                setTimeout "Convert", 0
            End If
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Sub Convert_OnBlur()
            With document
                .getElementByID("Status").innerText                = ""
                
                .getElementByID("lblSourceFolder").className       = ""
                .getElementByID("SourceFolder").className          = ""
                
                .getElementByID("lblDestFolder").className         = ""
                .getElementByID("DestFolder").className            = ""
                
                .getElementByID("lblSourceFormat").className       = ""
                .getElementByID("SourceFormat").className          = ""
                
                .getElementByID("lblDestFormat").className         = ""
                .getElementByID("DestFormat").className            = ""
                
            End With
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Sub lblDeleteAfterProcessing_OnClick()
            With document.getElementByID("DeleteAfterProcessing")
                .focus
                .checked = Not .checked
            End With
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Function ValidateFields()
            Dim objFSO
            Dim strValidateResult
            
            Dim strSourceFolder
            Dim strDestFolder
            
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            
            ValidateFields    = True
            strValidateResult = ""
            
            With document
                strSourceFolder = .getElementByID("SourceFolder").value
                strDestFolder   = .getElementByID("DestFolder").value
                
                If Not objFSO.FolderExists(strSourceFolder) Then
                    strValidateResult = strValidateResult & "Исходная папка не найдена. "
                    
                    .getElementByID("lblSourceFolder").className       = "NonValid"
                    .getElementByID("SourceFolder").className          = "NonValid"
                    
                    ValidateFields = False
                End If
                
                If Not objFSO.FolderExists(strDestFolder) Then
                    strValidateResult = strValidateResult & "Целевая папка не найдена. "
                    
                    .getElementByID("lblDestFolder").className       = "NonValid"
                    .getElementByID("DestFolder").className          = "NonValid"
                    
                    ValidateFields = False
                End If
                
                .getElementByID("Status").innerText = strValidateResult
            End With
            
            Set objFSO = Nothing
        End Function 
        '===================================================================================================
        
        '===================================================================================================
            Sub Convert()
                Const wdFormatRTF = 6         'RTF 2003
                Const wdFormatDocument = 0    'DOC 2003 для формата office 97 = "102" без wdFormatDocument
                Const wdFormatText = 2        'TXT обычный текст
                Const wdFormatHTML = 8        'HTM, HTML на всякий случай.
                Const wdFormatWebArchive =9   'MHT, MHTML случай всякий бывает.

                Dim objFSO
                Dim objFolder
                Dim objFile
                
                Dim objWord
                
                Dim strSourceFolder
                Dim strDestFolder
                
                Dim strSourceFormat
                Dim strDestFormat
                Dim wdstrDestFormat
                
                Dim boolDeleteAfterProcessing
                
                Dim StartTime
                
                
                StartTime       = Timer
                
                strSourceFolder = document.getElementByID("SourceFolder").value
                strDestFolder   = document.getElementByID("DestFolder").value
                
                strSourceFormat = document.getElementByID("SourceFormat").value
                strDestFormat = document.getElementByID("DestFormat").value
                
                boolDeleteAfterProcessing = document.getElementByID("DeleteAfterProcessing").checked
                
                Set objFSO      = CreateObject("Scripting.FileSystemObject")
                Set objFolder   = objFSO.GetFolder(strSourceFolder)
                
                Set objWord     = CreateObject("Word.Application")
                
                Select Case strDestFormat
                       Case "rtf"
                            wdstrDestFormat = 6
                       Case "doc"
                            wdstrDestFormat = 0
                       Case "txt"
                            wdstrDestFormat = 2
                End Select
                
                For Each objFile In objFolder.Files
                    If UCase(objFSO.GetExtensionName(objFile)) = UCase(strSourceFormat) Then
                        With objWord.Documents.Open(objFile.Path)
                            .SaveAs objFSO.BuildPath(strDestFolder, objFSO.GetBaseName(objFile.Name) & "." & strDestFormat), wdstrDestFormat
                            .Close
                        End With
                        
                        If boolDeleteAfterProcessing Then
                            objFile.Delete
                        End If
                    End If
                Next
                
                objWord.Quit
                Set objWord = Nothing
                
                Set objFile   = Nothing
                Set objFSO    = Nothing
                Set objFolder = Nothing
                
                With document
                    .getElementByID("Status").innerText = "На обработку затрачено: " & _
                        TimeSerial(0, 0, Timer - StartTime) & "."
                    
                    .getElementByID("SourceFolder").disabled         = False
                    .getElementByID("SelectSourceFolder").disabled   = False
                    
                    .getElementByID("DestFolder").disabled           = False
                    .getElementByID("SelectDestFolder").disabled     = False
                    
                    .getElementByID("SourceFormat").disabled         = False
                    .getElementByID("DestFormat").disabled           = False
                    .getElementByID("DeleteAfterProcessing").disabled= False
                    .getElementByID("Convert").disabled              = False
                    
                    .getElementByID("tagBody").style.cursor          = "auto"
                End With
            End Sub
        '===================================================================================================
    </script>
    <body id="tagBody" scroll="auto">
        <span class="Row">
            <span class="left">
                <span id="lblSourceFolder">1. Укажите исходную папку</span>
            </span>
            <span class="right">
                <input type="text" name="SourceFolder" size="64">
                <input type="Button" name="SelectSourceFolder" value="…">
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span id="lblDestFolder">2. Укажите целевую папку</span>
            </span>
            <span class="right">
                <input type="text" name="DestFolder" size="64">
                <input type="Button" name="SelectDestFolder" value="…">
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span id="lblSourceFormat">3. Выберете формат исходных файлов</span>
            </span>
            <span class="right">
                <select size="1" name="SourceFormat">
                    <option value="txt">.txt</option>
                    <option value="htm">.htm</option>
                    <option value="html">.html</option>
                    <option value="doc">.doc</option>
                    <option value="rtf">.rtf</option>
                </select>
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span id="lblDestFormat">4. Выберете формат целевых файлов</span>
            </span>
            <span class="right">
                <select size="1" name="DestFormat">
                    <option value="rtf">.rtf</option>
                    <option value="doc">.doc</option>
                    <option value="txt">.txt</option>
                </select>
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span>5. Установите флажок для удаления файлов из исходной папки после обработки</span>
            </span>
            <span class="right">
                <input type="CheckBox" name="DeleteAfterProcessing">
                <span id="lblDeleteAfterProcessing">Удалять исходные файлы</span>
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span id="lblConvert">6. Нажмите кнопку &quot;Конвертировать&quot;</span>
            </span>
            <span class="right">
                <input type="Button" name="Convert" value="Конвертировать">
            </span>
        </span>
        <hr class="Row" />
        <span class="Row">
            <span id="Status">&nbsp;</span>
        </span>
    </body>
    <script language="VBScript">
        With window
            .resizeTo tagBody.scrollWidth + 25, tagBody.scrollHeight + 32
            .moveTo (.screen.availWidth - tagBody.offsetWidth) \ 2, (.screen.availHeight - tagBody.offsetHeight) \ 2
        End With
    </script>
</html>

Ну и понятно что нужен MS Office Word 2003. Для другой версии Office измените константы форматов конвертировамия

....
Const wdFormatRTF = 6         'RTF 2003
....

И еще если в конвертируемом файле есть ошибки (ссылки на внешние документы, не печатные символы в названии файла и т.д.) выйдет ошибка а Word будет висеть в процессах. У меня была сохраненая страница урока фотошопа в MHT формате так при сохранении Word пытался сохранить файл на сайте откуда я скачал страницу прешлось интернет отключать.

14

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Для другой версии Office измените константы форматов конвертировамия

А они что, менялись?

15

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

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

Вы что-то путаете, коллега. Это не ошибки, а вполне легальное содержимое.

выйдет ошибка а Word будет висеть в процессах.

Кто бы сомневался .

Надеюсь, обработку ошибок Вы сами прикрутите.

У меня была сохраненая страница урока фотошопа в MHT формате так при сохранении Word пытался сохранить файл на сайте откуда я скачал страницу прешлось интернет отключать.

Word честно пытался перезагрузить рекламу, содержащуюся на странице, а отнюдь не «сохранить файл на сайте».

16

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Про исправления.

17

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

alexii пишет:

Для другой версии Office измените константы форматов конвертировамия

А они что, менялись?

Что то не посмотрел, на работе Office 2007 стоит, проверил форматы не изменились.
Прикручу обработку ошибок, и еще кое что, потом выложу.

18 (изменено: Kobrasol, 2010-12-03 14:31:39)

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

При обработке ошибок сбрасывает переменные.

При ошибке:
1. Как сделать что бы не сбрасывал переменные?
2. Как удалить временный файл начинающийся с "~$", не чего кроме как перебора в голову не приходит?

За комментировал обработку ошибок, не могу придумать как реализовать выше написанное.

Подскажите что делаю не так:

<html id="appHTML">
    <head>
        <meta charset="windows-1251">
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
        <meta http-equiv="Content-Language" content="ru">
        <title>Конвертер файлов</title>
        <hta:Application
            Icon = "%ProgramFiles%\Microsoft Office\OFFICE11\WINWORD.EXE"
            Id="oHTA"
            ApplicationName="Конвертер файлов"
            Border="normal"
            BorderStyle="normal"
            Caption="yes"
            ContextMenu="no"
            InnerBorder="yes"
            MaximizeButton="no"
            MinimizeButton="yes"
            Navigable="no"
            Scroll="auto"
            ScrollFlat="no"
            Selection="no"
            ShowInTaskbar="yes"
            SingleInstance="yes"
            SysMenu="yes"
            Version="1.0 RC2"
            WindowState="normal"
        />
        <object classid="clsid:0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC" id="MSScriptControl">
            <param name="Timeout" value="10000">
            <param name="AllowUI" value="-1">
            <param name="UseSafeSubset" value="0">
        </object>
    </head>
    
    <style type="text/css">
        BODY {
            font: x-small Verdana, Arial, sans-serif;
            color: WindowText;
            background-color: ButtonFace;
        }
        .Row{
            clear:both;
        }
        .Left{
            float:Left;
            clear:none;
        }
        .Right{
            float:Right;
            clear:none;
        }
        .NonValid { color:FireBrick; }
        #Status { font: xx-small; }
    </style>
    
    <script language="vbscript">
        Option Explicit
        'On Error Resume Next
        
        '===================================================================================================
        Function SelectFolder()
            Const BIF_RETURNONLYFSDIRS = &H0001
            Const BIF_EDITBOX          = &H0010
            Const BIF_VALIDATE         = &H0020
            Const BIF_NEWDIALOGSTYLE   = &H0040
            
            Dim objShell
            Dim objFSO
            
            Dim lngHWND
            Dim intOptions
            Dim strRootFolder
            
            Dim objFolder
            Dim strTemp
            
            Set objFSO    = CreateObject("Scripting.FileSystemObject")
            Set objShell  = CreateObject("Shell.Application")
            
            lngHWND       = oHTA.Document.GetElementByID("MSScriptControl").SitehWnd
            intOptions    = BIF_RETURNONLYFSDIRS Or BIF_NEWDIALOGSTYLE Or BIF_EDITBOX Or BIF_VALIDATE
            strRootFolder = 0
            
            Set objFolder = objShell.BrowseForFolder(lngHWND, "Укажите папку", intOptions, strRootFolder)
            
            If Not objFolder Is Nothing Then
                If objFSO.FolderExists(objFolder.Self.Path) Then
                    SelectFolder = objFolder.Self.Path
                End If
            End If
            
            Set objFolder = Nothing
            Set objShell  = Nothing
            Set objFSO    = Nothing
        End Function
        '===================================================================================================
        
        '===================================================================================================
        Sub SelectSourceFolder_OnClick
            Dim strSelectedFolder
            
            strSelectedFolder = Trim(SelectFolder())
            
            If Len(strSelectedFolder) <> 0 Then
                SourceFolder.value = strSelectedFolder
            End If
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Sub SelectDestFolder_OnClick
            Dim strSelectedFolder
            
            strSelectedFolder = Trim(SelectFolder())
            
            If Len(strSelectedFolder) <> 0 Then
                DestFolder.value = strSelectedFolder
            End If
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Sub Convert_OnClick
            If ValidateFields() Then
                With document
                    .getElementByID("Status").innerText               = "Идёт обработка…"
                    
                    .getElementByID("SourceFolder").disabled          = True
                    .getElementByID("SelectSourceFolder").disabled    = True
                    '.getElementByID("SourceFolderAfter").disabled     = True
                    
                    
                    .getElementByID("DestFolder").disabled            = True
                    .getElementByID("SelectDestFolder").disabled      = True
                    
                    .getElementByID("SourceFormat").disabled          = True
                    .getElementByID("DeleteAfterProcessing").disabled = True
                    .getElementByID("Convert").disabled               = True
                    .getElementByID("DestFormat").disabled            = True
                    
                    .getElementByID("tagBody").style.cursor           = "wait"
                    
                End With
                
                setTimeout "Convert", 0
            End If
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        Sub Convert_OnBlur()
            With document
                .getElementByID("Status").innerText                = ""
                
                .getElementByID("lblSourceFolder").className       = ""
                .getElementByID("SourceFolder").className          = ""
                
                .getElementByID("lblDestFolder").className         = ""
                .getElementByID("DestFolder").className            = ""
                
                .getElementByID("lblSourceFormat").className       = ""
                .getElementByID("SourceFormat").className          = ""
                
                .getElementByID("lblDestFormat").className         = ""
                .getElementByID("DestFormat").className            = ""
                
            End With
        End Sub
        '===================================================================================================
        
        '===================================================================================================
        'Sub lblSourceFolderAfter_OnClick()
        '    With document.getElementByID("SourceFolderAfter")
        '        .focus
        '        .checked = Not .checked
        '    End With
        'End Sub
        '===================================================================================================
        
        '===================================================================================================
        Sub lblDeleteAfterProcessing_OnClick()
            With document.getElementByID("DeleteAfterProcessing")
                .focus
                .checked = Not .checked
            End With
        End Sub
        '===================================================================================================
        Function ValidateFields()
            Dim objFSO
            Dim strValidateResult
            
            Dim strSourceFolder
            Dim strDestFolder
            
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            
            ValidateFields    = True
            strValidateResult = ""
            
            With document
                strSourceFolder = .getElementByID("SourceFolder").value
                strDestFolder   = .getElementByID("DestFolder").value
                
                'If .getElementByID("SourceFolderAfter").disabled    = False Then
                '   strDestFolder   = .getElementByID("SourceFolder").value
                'end if
                
                If Not objFSO.FolderExists(strSourceFolder) Then
                    strValidateResult = strValidateResult & "Исходная папка не найдена. "
                '    .getElementByID("SourceFolderAfter").disabled     = True
                    .getElementByID("lblSourceFolder").className       = "NonValid"
                    .getElementByID("SourceFolder").className          = "NonValid"
                    
                    ValidateFields = False
                End If
                
                If Not objFSO.FolderExists(strDestFolder) Then
                    strValidateResult = strValidateResult & "Целевая папка не найдена."
                    strDestFolder = .getElementByID("SourceFolder").value
                    .getElementByID("lblDestFolder").className       = "NonValid"
                    .getElementByID("DestFolder").className          = "NonValid"
                    
                    ValidateFields = False
                End If
                
                .getElementByID("Status").innerText = strValidateResult
            End With
            
            Set objFSO = Nothing
        End Function 
        '===================================================================================================
        
        '===================================================================================================
            Sub Convert()
                'On Error Resume Next 
                'Выражение, которое может вызвать ошибку 
                'If Err <> 0 Then
                'Msgbox "Произошла ошибка. " & Err.Description
                'window.alert(Err.Description)
                'Err.Clear 
                'End if 

                Const wdFormatRTF = 6         'RTF 2003
                Const wdFormatDocument = 0    'DOC 2003 для формата office 97 = "102" без wdFormatDocument
                Const wdFormatText = 2        'TXT обычный текст
                Const wdFormatHTML = 8        'HTM, HTML на всякий случай.
                Const wdFormatWebArchive =9   'MHT, MHTML случай всякий бывает.
                
                Dim objFSO
                Dim objFolder
                Dim objFile
                
                Dim objWord
                
                Dim strSourceFolder
                Dim strDestFolder
                
                Dim strSourceFormat
                Dim strDestFormat
                Dim wdstrDestFormat
                
                Dim boolDeleteAfterProcessing
                'Dim boolSourceFolderAfter
                
                'Dim ConvertSub
                
                Dim StartTime
                
                'ConvertSub = False
                
                StartTime       = Timer
                
                strSourceFolder = document.getElementByID("SourceFolder").value
                strDestFolder   = document.getElementByID("DestFolder").value
                
                strSourceFormat = document.getElementByID("SourceFormat").value
                strDestFormat = document.getElementByID("DestFormat").value
                
                boolDeleteAfterProcessing = document.getElementByID("DeleteAfterProcessing").checked
                'boolSourceFolderAfter     = document.getElementByID("SourceFolderAfter").checked
                
                'If .getElementByID("SourceFolderAfter").disabled    = False Then
                '    strDestFolder   = .getElementByID("SourceFolder").value
                'end if
                
                Set objFSO      = CreateObject("Scripting.FileSystemObject")
                Set objFolder   = objFSO.GetFolder(strSourceFolder)
                
                Set objWord     = CreateObject("Word.Application")
                
                Select Case strDestFormat
                        Case "rtf"
                            wdstrDestFormat = 6
                        Case "doc"
                            wdstrDestFormat = 0
                        Case "txt"
                            wdstrDestFormat = 2
                        Case "htm"
                            wdstrDestFormat = 8
                        Case "html"
                            wdstrDestFormat = 8
                End Select
                
                For Each objFile In objFolder.Files
                    If UCase(objFSO.GetExtensionName(objFile)) = UCase(strSourceFormat) Then
                        With objWord.Documents.Open(objFile.Path)
                            .SaveAs objFSO.BuildPath(strDestFolder, objFSO.GetBaseName(objFile.Name) & "." & strDestFormat), wdstrDestFormat
                            .Close
                        End With
                        
                        If boolDeleteAfterProcessing Then
                            objFile.Delete
                        End If
                    End If
                Next
                
                objWord.Quit
                
                'ConvertSub = True
                
        '========================================================================================================
        
        '========================================================================================================
                Set objWord   = Nothing
                
                Set objFile   = Nothing
                Set objFSO    = Nothing
                Set objFolder = Nothing
                
                With document
                    .getElementByID("Status").innerText = "На обработку затрачено: " & _
                        TimeSerial(0, 0, Timer - StartTime) & "."
                    
                    .getElementByID("SourceFolder").disabled         = False
                    .getElementByID("SelectSourceFolder").disabled   = False
                    '.getElementByID("SourceFolderAfter").disabled    = False
                    
                    .getElementByID("DestFolder").disabled           = False
                    .getElementByID("SelectDestFolder").disabled     = False
                    
                    .getElementByID("SourceFormat").disabled         = False
                    .getElementByID("DestFormat").disabled           = False
                    .getElementByID("DeleteAfterProcessing").disabled= False
                    .getElementByID("Convert").disabled              = False
                    
                    .getElementByID("tagBody").style.cursor          = "auto"
                End With
            End Sub
        '===================================================================================================
        
        '===================================================================================================
            Sub ConvertError()
        
        'Процедура оброботки ошибок
        '1. Удаление процесса Winword.exe при ошибке
        '2. Удаление временного файла objFile.Path & "~$" & objFile.Name ???
        '3. Создание папки "Bad_File" и перемещение несконвертированого файла в эту папку.
        
        '===================================================================================================
        '1. Удаление процесса Winword.exe при ошибке
        '===================================================================================================
  
                Dim strFolderName
                Dim strFullFolderName
                
                Dim objFSO
                Dim objFolder
                Dim SourceFolder
                Dim strSourceFolder
                Dim objFile
                
                Dim objService
                Dim objProc

                Select Case Err.Number
                        Case 0                            ' нет ошибок;
                            msgbox "Конвертирование завершено"
                            
                        Case Else                         ' есть ошибки;
                            msgbox "Неизвестная ошибка: " &  Err.Number
                            
                End Select
                
                
                With document
                    .getElementByID("Status").innerText = "Обработка ошибок..."
                    
                    .getElementByID("SourceFolder").disabled         = True

                strSourceFolder = document.getElementByID("SourceFolder").value
                
                .getElementByID("tagBody").style.cursor          = "auto"
                End With
                
                Set objFSO      = CreateObject("Scripting.FileSystemObject")
                Set objFolder   = objFSO.GetFolder(strSourceFolder)
                
                
                Set objService  = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
                    If Err.Number <> 0 Then
                        msgbox Err.Number & ": " & Err.Description
                    End If
                    For Each objProc In objService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'winword.exe'")
                            objProc.Terminate
                            'objFile.MoveFile(strSourceFolder)
                    Next
        '====================================================================================================
        '2. Удаление временного файла objFile.Path & "~$" & objFile.Name ??? не чего в голову не приходит
        '====================================================================================================
        
        
        
        
        '====================================================================================================
        '3.
        '====================================================================================================
                strFolderName      = "Bad_File"
                strFullFolderName  = objFSO.BuildPath(strSourceFolder, strFolderName)
                If objFSO.FolderExists(strFullFolderName) Then
                    'msgbox "Folder [" & strFullFolderName & "] already exists."
                    Else
                    objFSO.CreateFolder strFullFolderName
                    'msgbox "Folder [" & strFullFolderName & "] created."
                End If
                    For Each objFile In objFolder.Files
                        objFile.Copy strSourceFolder, strFullFolderName
                    Next
                            
                Set objFile   = Nothing
                Set objFSO    = Nothing
                Set objFolder = Nothing
                
            end Sub
        '===================================================================================================
        
    </script>
    <body id="tagBody" scroll="auto">
        <span class="Row">
            <span class="left">
                <span id="lblSourceFolder">1. Укажите исходную папку</span>
            </span>
            <span class="right">
                <input type="text" name="SourceFolder" size="64">
                <input type="Button" name="SelectSourceFolder" value="…">
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span id="lblDestFolder">2. Укажите целевую папку</span>
            </span>
            <span class="right">
                <input type="text" name="DestFolder" size="64">
                <input type="Button" name="SelectDestFolder" value="…">
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span id="lblSourceFormat">3. Выберете формат исходных файлов</span>
            </span>
            <span class="right">
                <select size="1" name="SourceFormat">
                    <option value="txt">.txt</option>
                    <option value="htm">.htm</option>
                    <option value="html">.html</option>
                    <option value="doc">.doc</option>
                    <option value="rtf">.rtf</option>
                    <option value="mht">.mht</option>
                </select>
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span id="lblDestFormat">4. Выберете формат целевых файлов</span>
            </span>
            <span class="right">
                <select size="1" name="DestFormat">
                    <option value="rtf">.rtf</option>
                    <option value="doc">.doc</option>
                    <option value="txt">.txt</option>
                    <option value="htm">.htm</option>
                    <option value="html">.html</option>
                </select>
            </span>
        </span>
        <!-- 
        <span class="Row">
            <span class="left">
                <span>5. Установите флажок использовать исходную папку как и целевую. (На будующее)</span>
            </span>
            <span class="right">
                <input type="CheckBox" name="SourceFolderAfter">
                <span id="lblSourceFolderAfter">Использовать исходную папку</span>
            </span>
        </span> 
        -->
        <span class="Row">
            <span class="left">
                <span>5. Установите флажок для удаления файлов из исходной папки после обработки</span>
            </span>
            <span class="right">
                <input type="CheckBox" name="DeleteAfterProcessing">
                <span id="lblDeleteAfterProcessing">Удалять исходные файлы</span>
            </span>
        </span>
        <span class="Row">
            <span class="left">
                <span id="lblConvert">6. Нажмите кнопку &quot;Конвертировать&quot;</span>
            </span>
            <span class="right">
                <input type="Button" name="Convert" value="Конвертировать">
            </span>
        </span>
        <hr class="Row" />
        <span class="Row">
            <span id="Status">&nbsp;</span>
        </span>
    </body>
    <script language="VBScript">
        With window
            .resizeTo tagBody.scrollWidth + 50, tagBody.scrollHeight + 32
            .moveTo (.screen.availWidth - tagBody.offsetWidth) \ 2, (.screen.availHeight - tagBody.offsetHeight) \ 2
        End With
    </script>
</html>

19

Re: HTA: Конвертер текстовых файлов в формат RTF, DOC, TXT

Kobrasol пишет:

При обработке ошибок сбрасывает переменные.

Что сие означает?

Kobrasol пишет:

2. Как удалить временный файл начинающийся с "~$", не чего кроме как перебора в голову не приходит?

Зачем? Он удаляется автоматически при закрытии открытого документа.

Боюсь, Вы как-то не так понимаете обработку ошибок в VBScript, коллега.