Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Преобразование текста Word из Frame в обычный текст / 9 сообщений из 9, страница 1 из 1
27.10.2016, 11:55
    #39335184
dimonbk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование текста Word из Frame в обычный текст
Добрый день!
Подскажите по очень важному вопросу. Из учетной программы выгружается документ где все предложения или абзацы находятся в отдельных фреймах Frame и Shape. Невозможно ничего сделать с документом. Хотелось бы чтобы макрос мог сделать документ так как он выглядит на печати но без фреймов, а как обычный построчный текст. Также хотелось бы чтобы внизу где реквизиты работодателя и работника создавалась таблица без видимых границ. Также очень важно сохранить все исходное форматирование (жирность, подчеркивание и т.д.)
Есть вот такой код.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub test()
Dim TabHourFrames() As Variant
numb_frames = ActiveDocument.Frames.Count
    ReDim TabHourFrames(1 To numb_frames)
    counter = numb_frames
    For i = 1 To counter
        Set myRange = ActiveDocument.Frames.Item(i).Range
        t = myRange.Text
        TabHourFrames(i) = t
    Next i
 Documents.Add DocumentType:=wdNewBlankDocument
        For q = 1 To counter
        last_par = ActiveDocument.Paragraphs.Count
        Set rngLastParagraph = ActiveDocument.Paragraphs(last_par).Range
            With rngLastParagraph
                    .InsertAfter Text:=TabHourFrames(q)
                    .InsertParagraphAfter
            End With
        Next q
ActiveDocument.Range(0, 0).Select
End Sub



По поиску нашел еще вот такую подобную вещь. Но это не совсем то так как переводит в таблицу все фреймы.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
Sub CreateTable()
    Dim oS As Frame
    Dim sH As String, sV As String, sHeiht As String, sWidth As String, colH As Collection, le As Long, i As Long
    Dim avTmp, lMaxColscnt As Long
    Dim dicFrames As Object
    Dim avItems, avKeys
    Dim docNew As Document, oTbl As Table
    'словарь рамок
    Set dicFrames = CreateObject("scripting.dictionary")
    dicFrames.comparemode = 1
    On Error Resume Next
    For Each oS In ActiveDocument.Frames
        sH = oS.HorizontalPosition
        sV = oS.VerticalPosition
        sHeiht = oS.Height 'вдруг пригодится
        sWidth = oS.Width 'вдруг пригодится
        avTmp = Array(sH, oS.Range.Text, sHeiht, sWidth)
        If dicFrames.Exists(sV) = False Then
            Set colH = New Collection
            colH.Add avTmp, sH
            dicFrames.Add sV, colH
        Else
            Set colH = dicFrames.Item(sV)
            'сортируем столбцы
            For i = 1 To colH.Count
                If CDbl(sH) < CDbl(colH.Item(i)(0)) Then Exit For
            Next
            
            If i > colH.Count Then
                colH.Add avTmp, sH
                If Err.Number Then
                    avTmp = Array(sH, avTmp(1) & oS.Range.Text, sHeiht, sWidth)
                    colH.Item(i) = avTmp
                    Err.Clear
                End If
            Else
                colH.Add avTmp, sH, Before:=i
                If Err.Number Then
                    avTmp = Array(sH, avTmp(1) & oS.Range.Text, sHeiht, sWidth)
                    colH.Item(i) = avTmp
                    Err.Clear
                End If
            End If
            Set dicFrames.Item(sV) = colH
            If colH.Count > lMaxColscnt Then
                lMaxColscnt = colH.Count
            End If
        End If
    Next
    'выгружаем на новую таблицу в новом документе
    On Error GoTo 0
    avItems = dicFrames.items
    avKeys = dicFrames.keys
    Set docNew = Documents.Add
    Set oTbl = docNew.Tables.Add(docNew.Content, UBound(avKeys), lMaxColscnt)
    On Error GoTo 0
    For le = LBound(avKeys) To UBound(avKeys)
        Set colH = dicFrames.Item(avKeys(le))
        For i = 1 To colH.Count
            oTbl.Cell(le + 1, i).Range.Text = colH.Item(i)(1)
        Next i
    Next le
End Sub



Файл во вложении. Помогите пожалуйста)
С уважением, Оксана.
...
Рейтинг: 0 / 0
27.10.2016, 20:38
    #39335781
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование текста Word из Frame в обычный текст
Сделать универсальный преобразователь, думаю, будет ой как непросто, надо анализировать расположение фреймов, принимать решения, как форматировать и располагать текст, в зависимости от их взаимного расположения, в общем, гемор большой.

Как вариант, можно сделать макрос, нацеленный на очень конкретный вид документов. То есть грубо говоря, он будет брать текст, скажем из пятого, шестого, седьмого фрейма, склеивать текст и вставлять его в заранее подготовленный шаблон. Это в разы, если не на порядки, проще, но макрос будет крайне чувствителен к изменению формата выгрузки.

dimonbk - С уважением, Оксана.

забавно
...
Рейтинг: 0 / 0
27.10.2016, 20:54
    #39335784
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование текста Word из Frame в обычный текст
В качестве бреда: поскольку это вменяемый документ, можно пойти по пути высококачественной печати в графический файл с последующим его распознаванием. На выходе получим скорее всего бесфреймовый документ.
...
Рейтинг: 0 / 0
27.10.2016, 20:59
    #39335786
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование текста Word из Frame в обычный текст
AkinaВ качестве бредау меня тоже такой бред возник как вариант, но я не решился его озвучить
...
Рейтинг: 0 / 0
28.10.2016, 08:03
    #39335881
dimonbk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование текста Word из Frame в обычный текст
Я все это уже делала. Но когда большое количество документов то с распознаванием вариант не очень. Какая бы печать не была распознавание все равно может быть плохое. И надо проверять орфографию всегда а это уже ой как долго. В этом документе фреймы располагаются на одном и том же месте и создавать универсальный макрос не стоит. Достаточно чтобы этот был под данный файл.
...
Рейтинг: 0 / 0
28.10.2016, 08:08
    #39335882
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование текста Word из Frame в обычный текст
dimonbkКакая бы печать не была распознавание все равно может быть плохое. И надо проверять орфографию всегда а это уже ой как долго.Не, это печать хреновая, значит... я лет с десяток назад подобное организовывал - печать в TIFF и последующее распознавание штатной Офисной приблудой. Так вот - если правильно подобрать масштаб печати (эмпирически получил, надо, чтобы толщина линий букв была не менее 3 пикселов), то распознавание практически стопроцентное (емнип одна опечатка на десять страниц).
...
Рейтинг: 0 / 0
28.10.2016, 10:13
    #39335952
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование текста Word из Frame в обычный текст
dimonbkфреймы располагаются на одном и том же месте и создавать универсальный макрос не стоит. Достаточно чтобы этот был под данный файл.Ну сделайте тогда шаблон, где на месте подстановок будет текст типа #Frame1#, #Frame2# и т.п. А потом пробегитесь макросом по всем фреймам исходного документа в цикле и Replace-ом замените #FrameN# на текст из фрейма. Думаю, это будет самый простой вариант, к тому же позволяющий в каких-то пределах редактировать шаблон даже сторонним человеком. Единственная проблема будет - при небольшом изменении исходного документа (например при обновлении программы) придется перенумеровать в шаблоне все фреймы.
...
Рейтинг: 0 / 0
28.10.2016, 11:34
    #39336048
dimonbk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование текста Word из Frame в обычный текст
Shocker.Prodimonbkфреймы располагаются на одном и том же месте и создавать универсальный макрос не стоит. Достаточно чтобы этот был под данный файл.Ну сделайте тогда шаблон, где на месте подстановок будет текст типа #Frame1#, #Frame2# и т.п. А потом пробегитесь макросом по всем фреймам исходного документа в цикле и Replace-ом замените #FrameN# на текст из фрейма. Думаю, это будет самый простой вариант, к тому же позволяющий в каких-то пределах редактировать шаблон даже сторонним человеком. Единственная проблема будет - при небольшом изменении исходного документа (например при обновлении программы) придется перенумеровать в шаблоне все фреймы.

а с кодом помочь можете?
...
Рейтинг: 0 / 0
28.10.2016, 23:54
    #39336718
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование текста Word из Frame в обычный текст
dimonbkа с кодом помочь можете?конечно, пишите код, будут вопросы - спрашивайте.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Преобразование текста Word из Frame в обычный текст / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]