powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Получить цифры из word
22 сообщений из 47, страница 2 из 2
Получить цифры из word
    #36627363
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121beaver06, ну вот. А в Вашем файле 59 параграфов.

А почему у меня ThisDocument.Paragraphs.Count=1, если их там 59?
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627377
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06, ну попробуй на этом файле, может код не туда положил?
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627391
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121beaver06, ну попробуй на этом файле, может код не туда положил?

Спасибо. Все получилось в вашем файле...
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627405
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06,
ну вот, теперь осталось кодом шапку приделать, и переменную к назначить после шапки (т.е. не с 1, а с рядов_шапки+1)
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627415
Hugo121beaver06,
ну вот, теперь осталось кодом шапку приделать, и переменную к назначить после шапки (т.е. не с 1, а с рядов_шапки+1)
beaver06, моя процедура написана исключительно структуры файла, представленного Вами. Запускать её для обработки файла другой структуры - БЕССМЫСЛЕННО.
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627482
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не поздноHugo121beaver06,
ну вот, теперь осталось кодом шапку приделать, и переменную к назначить после шапки (т.е. не с 1, а с рядов_шапки+1)
beaver06, моя процедура написана исключительно структуры файла, представленного Вами. Запускать её для обработки файла другой структуры - БЕССМЫСЛЕННО.

Подскажите, пожалуйста. теперь вот что: можно ли сделать типа исполняемого файла - запускаешь файл, выбираешь word- вский и получаешь excel? Сильно не пинайте, первый раз в MS Office
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627541
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06, Если не поздно наверняка точнее скажет, но можно сделать вордовский документ с кнопкой (или при запуске которого) -> будет запрос указать файл -> ... и далее по задаче.
Я так в Экселе делаю с некоторыми макросами.
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627639
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
При 2-3 страницах все проходит на ура. Если много страниц долго висит и все. Ждал около 35 минут. В чем может быть дело?
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627669
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06, ну по Ворду вопрос не ко мне, я сразу предлагал в текст сохранять и его обрабатывать - там всё прозрачно... теперь мучайтесь
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627703
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,

Спасибо зв все.
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627867
beaver06Hugo121,
При 2-3 страницах все проходит на ура. Если много страниц долго висит и все. Ждал около 35 минут. В чем может быть дело?
Ворду памяти мало

"Много сраниц" - это сколько ?
Код: plaintext
1.
'что показывает?
MsgBox ThisDocument.Paragraphs.Count
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627918
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не поздно,

Около 10000
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627953
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06,
ого, а говорили сто строк.... Дак этож 1800000 параграфов! примерно...
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627966
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И тогда уж надо спросить, сколько клиентов и какой Эксель? Может 65 тысч маловато будет...
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627978
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,

Много страниц - это около 60. 10000 это количество параграфов. Excel 2007. Клиент 1
...
Рейтинг: 0 / 0
Получить цифры из word
    #36628019
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06, ну тогда и 2000 экселя хватит, а то я уж испугался...
Ну а 10000 строк текста за пару/десяток секунд обработать можно.
...
Рейтинг: 0 / 0
Получить цифры из word
    #36628031
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
уменя получилось, но за 107 минут
...
Рейтинг: 0 / 0
Получить цифры из word
    #36628051
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06,
может всё же быстрее через текст? Хотя тут ещё время займёт сохранение из Ворда.
...
Рейтинг: 0 / 0
Получить цифры из word
    #36628635
beaver06,
предварительно сохранить монстра в формате текстового файла. Должно получиться каждое поле на новой строке.
В процедуре закомментирована проверка на наличие строки в файле перед её чтением.
Убрано преобразование вставляемых данных (удаление пробелов и разделителя разрядов).

В новый документ добавить кнопку, обработчиком события OnClick назначить данную процедуру
через текстовый файл
Код: plaintext
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.
Private Sub CommandButton1_Click()
Dim doc As Object
Dim fdOpen As FileDialog
Dim mPath As String
Dim sDoc As String
Dim sTmp As String

Dim xlApp As Object, wkS As Object
Dim k As Long


mPath = ThisDocument.Path

'выбрать текстовый файл для обработки
Set fdOpen = Application.FileDialog(msoFileDialogOpen)
With fdOpen
    .AllowMultiSelect = False
    .InitialFileName = mPath & "\"
    .Filters.Add "Text File", "*.txt",  1 
    .Title = "Выбор документа для обработки"
    If .Show = - 1  Then sDoc = .SelectedItems( 1 )
End With
Set fdOpen = Nothing

If sDoc <> "" Then
    
On Error GoTo Err
    
    'открыть текстовый файл для чтения
    Set doc = CreateObject("Scripting.FileSystemObject").OpentextFile(sDoc,  1 )
    
    'открыть Excel, создать новую книгу, дать ссылку на первый лист
    Set xlApp = CreateObject("Excel.Application")
    Set wkS = xlApp.workbooks.Add.worksheets( 1 )
    
    k =  1 
    'цикл по всем строкам текстового файла
    Do Until doc.AtEndOfStream
        sTmp = doc.ReadLine
        If sTmp = "№" Then
            'если нет уверенности, что в последнем документе есть что-то после строки "№"
            'If doc.AtEndOfStream Then Exit Do Else wkS.Cells(k, 1) = doc.ReadLine
            
            'если уверен, что в последнем документе есть что-то после строки "№"
            wkS.Cells(k,  1 ) = doc.ReadLine
        ElseIf sTmp = "Оплата" Then
            With wkS
                'если нет уверенности, что в последнем документе есть все поля в строке "оплата"
                'If doc.AtEndOfStream Then Exit Do Else .Cells(k, 6) = doc.ReadLine
                'If doc.AtEndOfStream Then Exit Do Else .Cells(k, 5) = doc.ReadLine
                'If doc.AtEndOfStream Then Exit Do Else .Cells(k, 4) = doc.ReadLine
                'If doc.AtEndOfStream Then Exit Do Else .Cells(k, 3) = doc.ReadLine
                'If doc.AtEndOfStream Then Exit Do Else .Cells(k, 2) = doc.ReadLine
                
                'если уверен, что в последнем документе есть все поля в строке "оплата"
                .Cells(k,  6 ) = doc.ReadLine
                .Cells(k,  5 ) = doc.ReadLine
                .Cells(k,  4 ) = doc.ReadLine
                .Cells(k,  3 ) = doc.ReadLine
                .Cells(k,  2 ) = doc.ReadLine
            End With
            k = k +  1 
        End If
    Loop
    
Err:
    If Err.Number <>  0  Then
        MsgBox Err.Number & vbCrLf & Err.Description, vbExclamation, "dung happens"
        Err.Clear
    End If
    If Not (xlApp Is Nothing) Then
        Set wkS = Nothing
        xlApp.Visible = True
        Set xlApp = Nothing
    End If
    
    If Not (doc Is Nothing) Then
        doc.Close
        Set doc = Nothing
    End If
End If
End Sub
...
Рейтинг: 0 / 0
Получить цифры из word
    #36631837
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06Hugo121,
уменя получилось, но за 107 минут

beaver06, интересно, а сколько получится так (здесь несколько изменённый первый вариант)?
Код: plaintext
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.
Sub ExpToTXT()
Dim i As Long, k As Integer
Dim strTmp As String, strTxt As String
Dim fso As Object, tFile As Object
Dim strFName As String

i =  1 
On Error GoTo ErrH
'цикл по всем _абзацам_ (и кто так строит!?) документа
With ThisDocument
    Do Until i > .Paragraphs.Count
        If Left$(.Paragraphs(i).Range.Text,  1 ) = "№" Then
            'нашли "строку" с номером, проверили, есть ли сам номер
            If i +  1  > .Paragraphs.Count Then Exit Do
            Rem убираем переводы строк
            strTxt = strTxt & Trim$(Replace(.Paragraphs(i +  1 ).Range.Text, vbCr, "")) & vbTab
            i = i +  1 
        ElseIf Left$(.Paragraphs(i).Range.Text,  6 ) = "Оплата" Then
            'нашли "строку" с цЫфрами, проверили, есть ли все поля
            If i +  5  > .Paragraphs.Count Then Exit Do
                For k =  5  To  1  Step - 1 
                    strTmp = strTmp & Trim$(.Paragraphs(i + k).Range.Text) & vbTab
                Next k
            i = i +  5 
'            strTxt = strTxt & Replace(Replace(strTmp, Chr(160), ""), vbCr, "") & vbCr
            strTxt = strTxt & Replace(Replace(Replace(strTmp, ".", ","), Chr( 160 ), ""), vbCr, "") & vbCr
            strTmp = ""
        End If
        i = i +  1 
    Loop
    strFName = .Path & "\TTT.txt"
End With
Set fso = CreateObject("Scripting.FileSystemObject")
Set tFile = fso.CreateTextFile(strFName,  2 , True)
tFile.Write strTxt
tFile.Close
Set tFile = Nothing: Set fso = Nothing
Shell Application.Path & "\Excel.exe " & """" & strFName & """"
ErrH:
If Err.Number <>  0  Then
    MsgBox Err.Number & vbCrLf & Err.Description, vbExclamation, "dung happens"
    Err.Clear
End If
End Sub
...
Рейтинг: 0 / 0
Получить цифры из word
    #36634155
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlth,

Некорректные данные получились, несколко строк сметились... И не быстрее
...
Рейтинг: 0 / 0
Получить цифры из word
    #36634656
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некорректные данные получились, несколко строк сметились...Это в документе, скорее всего, что-то изменилось: код хоть и изменён, но его логика осталась прежней.
Разница в том, что запись содержимого абзацев идёт не в ячейки Excel, а в строковую переменную. Содержимое переменной в итоге переносится в текстовый файл.
Пишется при этом всё то же самое.

И не быстрееЭто странно: запись ячеек Excel в цикле выполняется по-любому медленнее операций со строками в памяти. Тем более, в 2007-м (как-раз вчера проверял - запись в ячейку происходит примерно в 1,5 раза медленнее, чем в 2003-м). Грешить на длину конечной строки, формируемой для записи в текстовый файл, тоже, вроде бы нельзя: это должно быть, учитывая указанное кол-во страниц, порядка 20000-21000 знаков, что далеко не запредельно...
Т.е. должно быть быстрее. Другой вопрос - на сколько...

Проверил: считывание абзаца в переменную в Ворде (2003) происходит в среднем за 0,003 сек.

Увеличил длину конечной строки на 20000 знаков - Excel открылся через 1,92 сек
(Для сравнения: при увеличении на 200000 знаков получилось 1,74 сек ).

Похоже, что где-то в документе считывание абзацев притормаживает. Тогда лучше, конечно, начинать с сохранения его содержимого целиком в текст.
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Получить цифры из word
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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