powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Необходимо разработать конвертер рамок с текстом в таблицу Word.
9 сообщений из 9, страница 1 из 1
Необходимо разработать конвертер рамок с текстом в таблицу Word.
    #38630077
Cosmosila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Получаю в определенном ПО отчет в следующем виде см. "конвертировать рамки в таблицу.docx ".
Пользователям не приемлем данный вариант документа. Им нужна таблица Word.
Думаю над созданием макроса конвертации, данного документа в табличный вид.
Каким способом преобразовать данный документ в таблицу? Какие будут ваши предложения?
...
Рейтинг: 0 / 0
Необходимо разработать конвертер рамок с текстом в таблицу Word.
    #38630093
Фотография Surrogate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cosmosila,

это будет весьма хлопотное дело - расшифровывать ! на моем компе стоит программа
ABBYY ScreenShot Reader
, она эту чудо таблицу распознала и вставила в новый документ word. стоит она не больше 10$, может есть и бескоштовные аналоги
...
Рейтинг: 0 / 0
Необходимо разработать конвертер рамок с текстом в таблицу Word.
    #38630179
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CosmosilaКакие будут ваши предложения?
Вы, случаем, не начальник? :-)


Предложение: Вы начните делать хоть что-то, а мы поможем. Основной алгоритм, наверное, примерно следующий(если так уж хочется своими силами):
-перебираем все рамки и считываем текст, позицию, ширину, высоту;
-загоняем все в словарь, чтобы создать строки;
-в словаре строк - создаем коллекцию столбцов;
-создаем новую таблицу, туда все выгружаем.

Код примерный набросал, но в нем куча доделок нужно(сортировка строк по позиции - как со столбцами); учесть малые таблицы под каждым листом; подкорректировать высоту строк и ширину столбцов; может еще чего).
Код: 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.
    #38630215
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Идея такая - собрать информацию о рамках (гор. положение, верт. положение, текст, возможно высота и ширина) в таблицу Excel.
Отсортировать по гор. положению и верт. положению - определятся строки и столбцы.
Создать таблицу в Word или в Excel.
Пока первый этап - уходить надо.
Код: 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.
Sub bb()
Dim f As Frame, h, w, k&, i&
ReDim v(1 To ActiveDocument.Frames.Count, 1 To 5)
For Each f In ActiveDocument.Frames
  h = f.Height
  w = f.Width
  If h > 2 And w > 2 Then 'видимая рамка
    k = k + 1
    v(k, 1) = f.VerticalPosition
    v(k, 2) = f.HorizontalPosition
    v(k, 3) = f.Range.Text
    v(k, 4) = h
    v(k, 5) = w
  End If
Next

With CreateObject("excel.sheet") 'книга
  .worksheets(1).Range("A1").Resize(k, 5).Value = v
  .Application.Visible = True
  .Windows(1).Visible = True
End With
Stop

End Sub
...
Рейтинг: 0 / 0
Необходимо разработать конвертер рамок с текстом в таблицу Word.
    #38630223
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, уже... :)
...
Рейтинг: 0 / 0
Необходимо разработать конвертер рамок с текстом в таблицу Word.
    #38630288
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Казанский,

Алексей, в принципе если чуть объединить можно так:
Код: 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.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
Sub CreateTable()
    Dim oS As Frame
    Dim sH As String, sV As String, sHeiht As String, sWidth As String, sTxt As String
    Dim 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
    Dim avSortR, avRes()

    Set dicFrames = CreateObject("scripting.dictionary")
    dicFrames.comparemode = 1
    On Error Resume Next
    For Each oS In ActiveDocument.Frames
        sTxt = oS.Range.Text
        If sTxt = "/" Then sTxt = ""
        sH = oS.HorizontalPosition
        sV = oS.VerticalPosition
        sHeiht = oS.Height    'вдруг пригодится
        sWidth = oS.Width    'вдруг пригодится
        avTmp = Array(sH, sTxt, 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) & sTxt, 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) & sTxt, 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
    ReDim avSortR(UBound(avKeys))
    ReDim avRes(1 To UBound(avKeys) + 1, 1 To lMaxColscnt)
    With New Collection
        For le = LBound(avKeys) To UBound(avKeys)
            sV = avKeys(le)
            'сортируем
            For i = 1 To .Count
                If CDbl(sV) < CDbl(.Item(i)) Then Exit For
            Next

            If i > .Count Then
                .Add sV, sV
            Else
                .Add sV, sV, Before:=i
            End If
        Next le

        For le = 1 To .Count
            Set colH = dicFrames.Item(.Item(le))
            For i = 1 To colH.Count
                avRes(le, i) = colH.Item(i)(1)
            Next i
        Next le
    End With
    With CreateObject("excel.sheet")    'книга
        With .worksheets(1).Range("A1").Resize(UBound(avRes), lMaxColscnt)
            .Value = avRes
            .Copy
        End With
        .Application.Visible = True
        .Windows(1).Visible = True
    End With
    Stop
    Set docNew = Documents.Add
    docNew.Range.Paste

End Sub


Есть еще косяки, но уже ближе к телу :-)
...
Рейтинг: 0 / 0
Необходимо разработать конвертер рамок с текстом в таблицу Word.
    #38630400
Фотография Surrogate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist , Казанский !

ну вы блин даете™ ! Круто !!!
...
Рейтинг: 0 / 0
Необходимо разработать конвертер рамок с текстом в таблицу Word.
    #38631175
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Surrogate,

только в ворде
0 1 3 9 10 12 15 19 21 22 24 26 27 29 30 31 32 33 37 14 КонтурИзмеряемый параметр, место установкиЕд. изм.Диапазон измеренийПозицияПриборШкалаСиг-налВзрывозащитаТипсигналаСигнализацияБлокировкиКонтроллерПитание/схема подключения 2 Предупред.Аварийная6 мин.макс.мин.макс.мин.макс.9 049200-P-120-065-SBB11-HN-1м3/ч12-FT-049Расходомер вихревойот 16 до 160 м3/чEExiaIICT64...20 mA+HART2-х проводная 11 051100-P-120-115-SBB11-HN-1м3/ч12-FT-051Расходомер вихревойот 6,3 до 63 м3/чEExiaIICT64...20 mA+HART0552-х проводная 11 05325-AW-120-002-SBB11-HE-1м3/ч12-FT-053Расходомер электромагнитныйот 0,32 до 3,2 м3/чEExiaIICT64...20 mA+HART034-х проводная 11 05425-AW-120-003-SBB11-HE-1м3/ч12-FT-054Расходомер электромагнитныйот 0,32 до 3,2 м3/чEExiaIICT64...20 mA+HART034-х проводная 9 055200-P-120-077-SBB11-HN-1м3/ч12-FT-055Расходомер вихревойот 16 до 160 м3/чEExiaIICT64...20 mA+HART2-х проводная 11 056100-MS-120-004-SBB11-HE-1кг/ч12-FT-056Расходомер вихревойот 320 до 3200 кг/чEExiaIICT64...20 mA+HART025002-х проводная 11 05750-P-120-128-SBB11-HE-1кг/ч12-FT-057Расходомер вихревойот 32 до 320 кг/чEExiaIICT64...20 mA+HART02752-х проводная 11 05950-MS-120-006-SBB11-HE-1кг/ч12-FT-059Расходомер вихревойот 50 до 500 кг/чEExiaIICT64...20 mA+HART04502-х проводная 11 060100-P-120-125-SBB11-PN-1м3/ч12-FT-060Расходомер массовыйот 5 до 50 м3/чEExiaIICT64...20 mA+HART0454-х проводная 10 07050-РА-120-001-SBB11-NN-1нм3/ч12-FT-070Расходомер вихревойот 50 до 500 м3/чEExiaIICT64...20 mA+HART4002-х проводная 10 07150-NG-120-001-SBB11-NN-1нм3/ч12-FT-071Расходомер вихревойот 50 до 500 м3/чEExiaIICT64...20 mA+HART4002-х проводная 11 07250-ІА-120-001-SBB11-NN-1нм3/ч12-FT-072Расходомер вихревойот 50 до 500 м3/чEExiaIICT64...20 mA+HART04002-х проводная 11 07350-FG-120-024-SBB11-HE-1нм3/ч12-FT-073Расходомер вихревойот 16 до 160 м3/чEExiaIICT64...20 mA+HART1001502-х проводная 11 07650-NG-120-003-SBB11-NN-1нм3/ч12-FT-076Расходомер вихревойот 16 до 160 м3/чEExiaIICT64...20 mA+HART1001502-х проводная 11 003100-P-120-008-SBB11-HN-1м3/ч12-FTI-003Расходомер вихревойот 8 до 80 м3/чEExiaIICT64...20 mA+HART20702-х проводная 11 004100-P-120-009-SBB11-HN-1м3/ч12-FTI-004Расходомер вихревойот 8 до 80 м3/чEExiaIICT64...20 mA+HART20702-х проводная 11 005100-P-120-010-SBB11-HN-1 mmmm1м3/ч12-FTI-005Расходомер вихревойот 8 до 80 м3/чEExiaIICT64...20 mA+HART2070-х проводная 2 42137-(16-11-2)-1000-АТХ.ТП1Лист 1 4 6 ИзмКол уч№ докДата11 016100-P-120-032-SBB11-HN-1м3/ч12-FTI-016Расходомер вихревойот 8 до 80 м3/чEExiaIICT64...20 mA+HART20702-х проводная 11 017100-P-120-033-SBB11-HN-1м3/ч12-FTI-017Расходомер вихревойот 8 до 80 м3/чEExiaIICT64...20 mA+HART20702-х проводная 11 018100-P-120-034-SBB11-HN-1м3/ч12-FTI-018Расходомер вихревойот 8 до 80 м3/чEExiaIICT64...20 mA+HART20702-х проводная 11 050100-P-120-105-SBB11-HN-1м3/ч12-FTI-050Расходомер вихревойот 4 до 40 м3/чEExiaIICT64...20 mA+HART0352-х проводная 1 ТХ-110-1311 001100-P-130-001-SBB11-НN-1м3/ч13-FT-001Расходомер вихревойот 8 до 80 м3/чEExiaIICT64...20 mA+HART0652-х проводная 11 002100-P-130-020-SBB11-РN-1м3/ч13-FT-002Расходомер вихревойот 6,3 до 63 м3/чEExiaIICT64...20 mA+HART0552-х проводная 11 003100-P-130-018-SBB11-РN-1м3/ч13-FT-003Расходомер массовыйот 6,3 до 63 м3/чEExiaIICT64...20 mA+HART0554-х проводная 10 00425-P-130-007-SBB11-РN-1м3/ч13-FT-004Расходомер вихревойот 0,32 до 3,2 м3/чEExiaIICT64...20 mA+HART32-х проводная 11 00580-P-130-005-SBB11-РN-1м3/ч13-FT-005Расходомер вихревойот 3,2 до 32 м3/чEExiaIICT64...20 mA+HART0252-х проводная 10 00625-P-130-008-SBB11-РN-1м3/ч13-FT-006Расходомер вихревойот 0,32 до 3,2 м3/чEExiaIICT64...20 mA+HART32-х проводная 11 007150-P-120-086-SBB11-HN-1м3/ч13-FT-007Расходомер массовыйот 8 до 80 м3/чEExiaIICT64...20 mA+HART0752-х проводная 9 00850-P-130-025-SBB11-НN-1нм3/ч13-FT-008Расходомер вихревойот 80 до 800 м3/чEExiaIICT64...20 mA+HART2-х проводная 11 00950-P-130-028-SBB11-НЕ-1м3/ч13-FT-009Расходомер вихревойот 0,5 до 5 м3/чEExiaIICT64...20 mA+HART042-х проводная 11 01025-AW-130-001-SBB11-HE-1м3/ч13-FT-010Расходомер электромагнитныйот 0,5 до 5 л/чEExiaIICT64...20 mA+HART00,0044-х проводная 11 052100-P-120-059-SBB11-HN-1 mmmmm2м3/ч13-FT-052Расходомер вихревойот 6,3 до 63 м3/чEExiaIICT64...20 mA+HART0602-х проводная 1 ТХ-110-14
...
Рейтинг: 0 / 0
Необходимо разработать конвертер рамок с текстом в таблицу Word.
    #38634178
Cosmosila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist огромное спасибо за образец! Буду пробовать доработать под себя.
Пока временно остановился на конвертации через PDF конвертер. Печатаю документ своим ПО в PDF, и преобразовываю Adobe Acrobat Pro в Word. Получаю спецификацию следующего вида см. "ТП_табл". Преимущество данного способа то что не теряю графическое представления своего документа настроенное в ПО(штамп,ширина колонок).
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Необходимо разработать конвертер рамок с текстом в таблицу Word.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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