1

Тема: VBS: вставить строку из .doc в .txt

Добрый день! Просмотрел форум, но не нашел подходящей темы (или плохо смотрел). Надо найти в документе Word строку (дата № ) и вставить определенное количество символов в текстовый документ, в определенную строку. Как можно решить эту задачу?

2

Re: VBS: вставить строку из .doc в .txt

Конкретная реализация будет явным образом зависеть от деталей техзадания.

Упакуйте образцы документа и текстового файла в архив, выложите последний на RGhost. Укажите конкретное значение «определённого количества символов», что это за символы, как они соотносятся с найденной строкой, что делать, если их окажется меньше. Укажите конкретное значение «определённой строки», а также, что делать, если строк в текстовом файле окажется меньше.

3

Re: VBS: вставить строку из .doc в .txt

Количество символов - 40, в текстовый файл вместо Auto.... надо вставить эти символы. Количество строк в .txt постоянно.

Post's attachments

test.rar 7.69 kb, 4 downloads since 2014-10-24 

You don't have the permssions to download the attachments of this post.

4

Re: VBS: вставить строку из .doc в .txt

alexii пишет:

выложите последний на RGhost.

У меня не выходит разместить файл в RGhost, поэтому я его приаттачил здесь. Не будет это большой ошибкой?

5

Re: VBS: вставить строку из .doc в .txt

Вот мой http://rghost.net/58736695 Test.rar

6

Re: VBS: вставить строку из .doc в .txt

Добрый день!
Нашел на форуме скрипт поиска строки в текстовом файле. Он подошел к моим условиям, но там где "Вставка из Word", не пойму что надо сделать. По идее надо найти строку в Word'е, скопировать, присвоить ее переменной и затем вставить в текст. Но каким образом не пойму. Помогите пожалуйста.

Option Explicit

Dim strSourceFile
Dim arrContent
Dim strLine


strSourceFile = "d:\Test22.txt"

With WScript.CreateObject("Scripting.FileSystemObject")
    If .FileExists(strSourceFile) Then
        With .OpenTextFile(strSourceFile)
            arrContent = Split(.ReadAll(), vbCrLf)
            .Close
        End With
       
        With WScript.CreateObject("VBScript.RegExp")
            .IgnoreCase = True
           
            For Each strLine In arrContent
                .Pattern = "^.*(Auto).*$"
               
                If .Test(strLine) Then
                    WScript.Echo "Вставка из Word"
                Else
        WScript.Echo "Нет такой строки"
        WScript.Quit 1
                End If
               
            Next
        End With
    Else
        WScript.Echo "Source file [" & strSourceFile & "] not found."
        WScript.Quit 1
    End If
End With

WScript.Quit 0

7

Re: VBS: вставить строку из .doc в .txt

siv14, потерпите ещё немного. В процессе.

Попутно вопросы: изначально речь шла про «определённое количество символов», далее уточнялось про «40». Из самого приложенного документа количество не ясно, но строка выкрашена в красный до конца абзаца. Может, на это ориентироваться?

Далее, в приложенном текстовом файле строка «Subject: Auto File Transfer». Вы пишете и «в текстовый документ, в определенную строку», и «в текстовый файл вместо Auto.... надо вставить эти символы». Так на что ориентируемся — на номер строки или на текст «Auto»? Вставляем вместо только «Auto» или вместо «Auto File Transfer»? Опять же, место замены определяем по количеству символов или ориентируемся на текст «Subject: »?

8

Re: VBS: вставить строку из .doc в .txt

alexii пишет:

siv14, потерпите ещё немного. В процессе.

... но строка выкрашена в красный до конца абзаца. Может, на это ориентироваться?

Добрый день!
Теперь все по-порядку:
1. Вставлятся в текстовый файл должна выкрашеная строка.
2. Вставляться выкрашеная строка должна вместо - Auto File Transfer.
3. Ориентироваться можно на номер строки или на текст «Auto File Transfer», они постоянны.
4. Место замены определяем по тексту «Auto File Transfer».

9

Re: VBS: вставить строку из .doc в .txt

1. Вставлятся в текстовый файл должна выкрашеная строка.

Опять обошли ответ. На что ориентируемся со слова «от …» — на 40 символов или, не считая — до конца строки? В общем, я выбрал второй вариант.

Пробуйте:

Option Explicit

Const wdFindContinue = 1

Const wdParagraph = 4
Const wdCharacter = 1
Const wdExtend = 1


Dim strSourceFile
Dim strDestFile

Dim strSorceFilePattern
Dim strDestFilePhrase


Dim strText
Dim strContent

Dim boolFound


strSourceFile = "E:\Песочница\0404\test\Список.doc"
strDestFile   = "E:\Песочница\0404\test\Test22.txt"

strSorceFilePattern = "от [0-9]{2}.[0-9]{2}.[0-9]{4} @№"
strDestFilePhrase   = "Auto File Transfer"


With WScript.CreateObject("Scripting.FileSystemObject")
    If .FileExists(strSourceFile) Then
        If .FileExists(strDestFile) Then
            boolFound = False
            
            With WScript.CreateObject("Word.Application")
                '.Visible = True
                
                With .Documents.Open(strSourceFile)
                    With .Content.Find
                        .ClearFormatting
                        .Text = strSorceFilePattern
                        
                        .Forward = True
                        .Wrap = wdFindContinue
                        
                        .Format = False
                        .MatchCase = False
                        .MatchWholeWord = False
                        .MatchAllWordForms = False
                        .MatchSoundsLike = False
                        .MatchWildcards = True
                        
                        With .Replacement
                            .Text = ""
                            .ClearFormatting
                        End With
                        
                        If .Execute() Then
                            With .Parent
                                .EndOf wdParagraph, wdExtend
                                .MoveEnd wdCharacter, -1
                                strText = .Text
                            End With
                            
                            boolFound = True
                        End If
                    End With
                    
                    .Close
                End With
                
                .Quit
            End With
            
            If boolFound Then
                With .OpenTextFile(strDestFile)
                    strContent = .ReadAll()
                    .Close
                End With
                
                If InStr(1, strContent, strDestFilePhrase, vbTextCompare) > 0 Then
                    With .CreateTextFile(strDestFile, True)
                        .Write Replace(strContent, strDestFilePhrase, strText)
                        .Close
                    End With
                Else
                    WScript.Echo "Can't find phrase [" & strDestFilePhrase & "] in destination file [" & strDestFile & "]."
                    WScript.Quit 4
                End If
            Else
                WScript.Echo "Can't find any text by pattern [" & strSorceFilePattern & "] in source file [" & strSourceFile & "]."
                WScript.Quit 3
            End If
        Else
            WScript.Echo "Can't find destination file [" & strDestFile & "]."
            WScript.Quit 2
        End If
    Else
        WScript.Echo "Can't find source file [" & strSourceFile & "]."
        WScript.Quit 1
    End If
End With

WScript.Quit 0

10

Re: VBS: вставить строку из .doc в .txt

alexii пишет:

  В общем, я выбрал второй вариант.

Я это и имел ввиду. Спасибо. Буду пробовать.

11

Re: VBS: вставить строку из .doc в .txt

Большое спасибо! Получилось то, что хотел! Только убрал лишние пробелы (не очень красиво выходило).

12

Re: VBS: вставить строку из .doc в .txt

Только убрал лишние пробелы (не очень красиво выходило).

В конце «красной» строки? Внутри?