powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Получить цифры из word
47 сообщений из 47, показаны все 2 страниц
Получить цифры из word
    #36622812
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, как можно из файла во вложении получить следующие данные: № и значения столбцов. Все это скопировать в excel с такими столбцами: №, Тариф, кВтч/кВт и т.д.
...
Рейтинг: 0 / 0
Получить цифры из word
    #36622828
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот и файл
...
Рейтинг: 0 / 0
Получить цифры из word
    #36622952
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно и не в excel, а напр. в txt
...
Рейтинг: 0 / 0
Получить цифры из word
    #36625885
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди, помогите пожалуйста. Срочно надо... Единственное что получилось - это сконвертировать в pdf, а затем в excel...
...
Рейтинг: 0 / 0
Получить цифры из word
    #36626102
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06,
ну можно закопипастить в Эксель и циклом по столбцу пройтись.
Можно в текст сохранить и его скриптом/макросом в Эксель загружать - уже по одному клиенту целиком в строку.
...
Рейтинг: 0 / 0
Получить цифры из word
    #36626122
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я бы наверное лучше сохранил текст и его перебирал - по 22 строки на клиента (надеюсь, всё время так?).
22 значения в строку, следующие 22 в следующую и т.д. Можно ненужные пропускать.
...
Рейтинг: 0 / 0
Получить цифры из word
    #36626131
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121Я бы наверное лучше сохранил текст и его перебирал - по 22 строки на клиента (надеюсь, всё время так?).
22 значения в строку, следующие 22 в следующую и т.д. Можно ненужные пропускать.

Несколько сотен строк, несколько раз в месяц. А если где-то пустые значения, тогда что?
...
Рейтинг: 0 / 0
Получить цифры из word
    #36626164
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06,
нам сотни нипочём. А вот если пустые, тогда цикл от № до №. Но конечно надо смотреть, может так и не получится, если например в оплате будут выпаднения. Но ведть там скорее всего будет 0.00. А названия столбцов не нужны. Можно вообще брать только строку после "№" и четыре после "Оплата".
...
Рейтинг: 0 / 0
Получить цифры из word
    #36626842
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.
44.
45.
46.
47.
48.
Sub ExpToXL()
Dim xlApp As Object, wkS As Object
Dim i As Long, k As Long

'открыть Excel, создать новую книгу, дать ссылку на первый лист
Set xlApp = CreateObject("Excel.Application")
Set wkS = xlApp.workbooks.Add.worksheets( 1 )

i =  1 
k =  1 
On Error GoTo Err
'цикл по всем _абзацам_ (и кто так строит!?) документа
Do Until i > Paragraphs.Count
If Left$(Paragraphs(i).Range.Text,  1 ) = "№" Then
    'нашли "строку" с номером, проверили, есть ли сам номер
    If i +  1  > Paragraphs.Count Then Exit Do
    'записали значение номера в Excel
    'rem убираем переводы строк
    wkS.Cells(k,  1 ) = Trim$(Replace(Paragraphs(i +  1 ).Range.Text, vbCr, ""))
    i = i +  1 
ElseIf Left$(Paragraphs(i).Range.Text,  6 ) = "Оплата" Then
    'нашли "строку" с цЫфрами, проверили, есть ли все поля
    If i +  5  > Paragraphs.Count Then Exit Do
    With wkS
        'записали значения цЫфр в Excel
        'NB! порядок абзацев в "строке" цЫфр отличается отвизуального
        '     в Excel выгружаем так, чтобы порядок соответствовал визуальному
        '     убираем переводы строк, разделители разрядов и концевые пробелы
        .Cells(k,  2 ) = Trim$(Replace(Replace(Paragraphs(i +  5 ).Range.Text, vbCr, ""), Chr( 160 ), ""))
        .Cells(k,  3 ) = Trim$(Replace(Replace(Paragraphs(i +  4 ).Range.Text, vbCr, ""), Chr( 160 ), ""))
        .Cells(k,  4 ) = Trim$(Replace(Replace(Paragraphs(i +  3 ).Range.Text, vbCr, ""), Chr( 160 ), ""))
        .Cells(k,  5 ) = Trim$(Replace(Replace(Paragraphs(i +  2 ).Range.Text, vbCr, ""), Chr( 160 ), ""))
        .Cells(k,  6 ) = Trim$(Replace(Replace(Paragraphs(i +  1 ).Range.Text, vbCr, ""), Chr( 160 ), ""))
    End With
    i = i +  5 
    k = k +  1 
End If
i = i +  1 
Loop

Err:
If Err.Number <>  0  Then
    MsgBox Err.Number & vbCrLf & Err.Description, vbExclamation, "dung happens"
    Err.Clear
End If
Set wkS = Nothing
xlApp.Visible = True
Set xlApp = Nothing
End Sub
...
Рейтинг: 0 / 0
Получить цифры из word
    #36626905
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не поздно,
спасибо, хороший код всегда "не поздно". С Вордом примеров мало хороших, я себе сохранил, не дай Бог пригодится
Вот только из модуля работать не захотел, я из документа запускал.
И как Вы там разобрались - на неполных 3 клиента 59 параграфов
...
Рейтинг: 0 / 0
Получить цифры из word
    #36626917
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121, я везде 'Paragraphs' заменил на 'ThisDocument.Paragraphs' - так в модуле работает...
...
Рейтинг: 0 / 0
Получить цифры из word
    #36626936
Hugo121, vlth
с "процедуру добавить в модуль обрабатываемого документа" - действительно лажу написал, спасибо что поправили.
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627196
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не поздноHugo121, vlth
с "процедуру добавить в модуль обрабатываемого документа" - действительно лажу написал, спасибо что поправили.

Спасибо большое за участие, щас попробую...
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627209
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не поздно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.
44.
45.
46.
47.
48.
Sub ExpToXL()
Dim xlApp As Object, wkS As Object
Dim i As Long, k As Long

'открыть Excel, создать новую книгу, дать ссылку на первый лист
Set xlApp = CreateObject("Excel.Application")
Set wkS = xlApp.workbooks.Add.worksheets( 1 )

i =  1 
k =  1 
On Error GoTo Err
'цикл по всем _абзацам_ (и кто так строит!?) документа
Do Until i > Paragraphs.Count
If Left$(Paragraphs(i).Range.Text,  1 ) = "№" Then
    'нашли "строку" с номером, проверили, есть ли сам номер
    If i +  1  > Paragraphs.Count Then Exit Do
    'записали значение номера в Excel
    'rem убираем переводы строк
    wkS.Cells(k,  1 ) = Trim$(Replace(Paragraphs(i +  1 ).Range.Text, vbCr, ""))
    i = i +  1 
ElseIf Left$(Paragraphs(i).Range.Text,  6 ) = "Оплата" Then
    'нашли "строку" с цЫфрами, проверили, есть ли все поля
    If i +  5  > Paragraphs.Count Then Exit Do
    With wkS
        'записали значения цЫфр в Excel
        'NB! порядок абзацев в "строке" цЫфр отличается отвизуального
        '     в Excel выгружаем так, чтобы порядок соответствовал визуальному
        '     убираем переводы строк, разделители разрядов и концевые пробелы
        .Cells(k,  2 ) = Trim$(Replace(Replace(Paragraphs(i +  5 ).Range.Text, vbCr, ""), Chr( 160 ), ""))
        .Cells(k,  3 ) = Trim$(Replace(Replace(Paragraphs(i +  4 ).Range.Text, vbCr, ""), Chr( 160 ), ""))
        .Cells(k,  4 ) = Trim$(Replace(Replace(Paragraphs(i +  3 ).Range.Text, vbCr, ""), Chr( 160 ), ""))
        .Cells(k,  5 ) = Trim$(Replace(Replace(Paragraphs(i +  2 ).Range.Text, vbCr, ""), Chr( 160 ), ""))
        .Cells(k,  6 ) = Trim$(Replace(Replace(Paragraphs(i +  1 ).Range.Text, vbCr, ""), Chr( 160 ), ""))
    End With
    i = i +  5 
    k = k +  1 
End If
i = i +  1 
Loop

Err:
If Err.Number <>  0  Then
    MsgBox Err.Number & vbCrLf & Err.Description, vbExclamation, "dung happens"
    Err.Clear
End If
Set wkS = Nothing
xlApp.Visible = True
Set xlApp = Nothing
End Sub


Что-то у меня открывает excel и он пустой. В чем может быть дело?
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627217
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06, добавьте в код строку
Msgbox Paragraphs.Count
Если покажет цифры 59 - будем дальше искать, а если пустое окно - вот как раз то, о чём выше гоаорили.
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627218
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например после строк
i = 1
k = 1
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627225
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121beaver06, добавьте в код строку
Msgbox Paragraphs.Count
Если покажет цифры 59 - будем дальше искать, а если пустое окно - вот как раз то, о чём выше гоаорили.

Пусто, и куда дальше копать?
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627227
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06Hugo121beaver06, добавьте в код строку
Msgbox Paragraphs.Count
Если покажет цифры 59 - будем дальше искать, а если пустое окно - вот как раз то, о чём выше гоаорили.

Пусто, и куда дальше копать?

если MsgBox Paragraphs.Count то error 424 object required. Если MsgBox Paragraphs то пустой msgbox.
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627250
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06,

выше
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627259
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlthbeaver06,

выше

А что выше?
Это - я везде 'Paragraphs' заменил на 'ThisDocument.Paragraphs' . Я так и сделал - все равно пусто...
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627264
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beaver06, ну как же везде?
MsgBox Paragraphs .Count то error 424 object required. Если MsgBox Paragraphs то пустой msgbox
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627280
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlthbeaver06, ну как же везде?
MsgBox Paragraphs .Count то error 424 object required. Если MsgBox Paragraphs то пустой msgbox

Понял... Выдает 1
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627282
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06, вообще я обычно гоню код по F8 и смотрю, что делается. Т.к. было видно, что внутрь цикла код не заходил, я проверил, видит ли он вообще параграфы, можно через мессидж, а я через дебуг.принт смотрел. Это так, технология, чтоб сам учился разбираться...
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627302
beaver06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121beaver06, вообще я обычно гоню код по F8 и смотрю, что делается. Т.к. было видно, что внутрь цикла код не заходил, я проверил, видит ли он вообще параграфы, можно через мессидж, а я через дебуг.принт смотрел. Это так, технология, чтоб сам учился разбираться...

Это-то я вижу. Так ThisDocument.Paragraphs.Count равен 0, и поэтому чицкл проходит только один раз и сваливает
...
Рейтинг: 0 / 0
Получить цифры из word
    #36627339
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beaver06, ну вот. А в Вашем файле 59 параграфов.
...
Рейтинг: 0 / 0
Получить цифры из 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
47 сообщений из 47, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Получить цифры из word
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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