powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Преобразование текста Word из Frame в обычный текст
9 сообщений из 9, страница 1 из 1
Преобразование текста Word из Frame в обычный текст
    #39335184
dimonbk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Подскажите по очень важному вопросу. Из учетной программы выгружается документ где все предложения или абзацы находятся в отдельных фреймах 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
Преобразование текста Word из Frame в обычный текст
    #39335781
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделать универсальный преобразователь, думаю, будет ой как непросто, надо анализировать расположение фреймов, принимать решения, как форматировать и располагать текст, в зависимости от их взаимного расположения, в общем, гемор большой.

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

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

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

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


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