powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Из Ворда в Эксель
24 сообщений из 49, страница 2 из 2
Из Ворда в Эксель
    #36567149
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlth,
да, почти получилось с Chr(13), по крайней мере в массив построчно поместилось, далее уже можно обрабатывать.
Только мне кажется, если строк много и они длинные, а не как в примере, то ворочать эту кучу будет небыстро. Я и тексты бывало сперва сразу целиком в массив загонял и затем анализировал, но когда знал, что объём не очень большой. В данном случае в коде выше текст построчно перекладываю в другой файл, выбирая только нужное. Хотя может разница и небольшая, тесты не делал...
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36567153
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заметил, что не всё "идеально". Исправленный фрагмент:
Код: plaintext
1.
2.
3.
4.
5.
6.
oWD.Quit
Set oWD = Nothing: Set oDoc = Nothing ' "рокировка" с последующим циклом

Do While InStr(strT, Chr( 11 ) & Chr( 11 )) >  0 
    strT = Replace(strT, Chr( 11 ) & Chr( 11 ), Chr( 11 ))
Loop
strA = Split(strT, Chr( 11 )): strT = "" 'очищение ненужной более переменной
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36567161
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121, я на ru-board писал кому-то обработку текстового файла. Предполагая большое кол-во строк, организовал возможность его обработки частями по 3000 строк. Скорость выполнения в этом случае сокращалась примерно на 20%. Вот здесь.
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36567188
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlth,
Хотел заставить wsh скриптом сделать весь цикл от Ворд до Эксель - не получается ни в Ворде по строчкам пройтись, ни его в текст сохранить.
Но если вручную сохранить данные в текст, то вполне перекладывает в текст.xls (все пробелы заменены на vbTAB, поэтому сразу разбивает по колонкам):


Код: 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.
'# Диалог открытия файла
   Const ForReading   =  1 
   Const ForAppending   =  8 

   stb = timer
  
Set objDialog = CreateObject("UserAccounts.CommonDialog") 
objDialog.Filter = "txt Files|*.txt" 
objDialog.InitialDir = "C:\" 
intResult = objDialog.ShowOpen 
 If intResult =  0  Then 
    Wscript.Quit 
Else 
    toFile =  objDialog.FileName 
End If 

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.OpenTextFile(toFile, ForReading) 

Set objFile = objFSO.CreateTextFile("C:\temp\_excel.xls")
Set objfile = Nothing
Set objOTS = objFSO.OpenTextFile("C:\temp\_excel.xls", ForAppending)

   Do While objTS.AtEndOfStream <> True
      tmp = objTS.ReadLine()
   if len(tmp) >  7  then
		if isdate(left(tmp,  8 )) then
		objOTS.Write tmp & vbTAB '" "
		else
		  objOTS.WriteLine Replace(tmp, " ", vbTAB)
		end if
	end if
   Loop

'# очищаем память 
objTS.Close 'закрываем текстовый файл источник
objOTS.Close 'закрываем целевой текстовый файл

Set objFSO = Nothing
Set objDialog = Nothing
Set objTS = Nothing
Set objOTS = Nothing

tmp = Empty

stb = CInt((Timer - stb) *  100 ) /  100 
MsgBox ("Время работы " & stb & " сек."), vbInformation

Wscript.Quit
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36568495
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121, доработал процедурку: теперь она должна работать при любом знаке окончания строки. Для пробы растиражировал записи Новенькой123 на 10923 страницы в Ворде.
Пришлось ещё подправить переключение переноса данных на другие листы книги Excel.
Код: 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.
Sub FromWordToExcel()
Dim oWD As Object, oDoc As Object
Dim strT As String, i As Long, j As Integer, strA() As String, strB() As String
Dim WS As Worksheet, k As Byte, l As Long

Set oWD = CreateObject("Word.Application")
Set oDoc = oWD.Documents.Open _
    ("C:\... Путь ...\Export.doc")

Application.DisplayAlerts = False
strT = oDoc.Content
Application.DisplayAlerts = True

oWD.Quit
Set oWD = Nothing: Set oDoc = Nothing

strT = Replace(strT, Chr( 10 ), Chr( 13 ))
strT = Replace(strT, Chr( 11 ), Chr( 13 ))
Do While InStr(strT, Chr( 13 ) & Chr( 13 )) >  0 
    strT = Replace(strT, Chr( 13 ) & Chr( 13 ), Chr( 13 ))
Loop

strA = Split(strT, Chr( 13 )): strT = ""

Application.ScreenUpdating = False
For k =  1  To (UBound(strA) +  1 ) \ Application.Rows.Count +  1 
    l =  1 
    With ThisWorkbook.Worksheets(k)
        For i = i + l -  1  To UBound(strA)
            strB = Split(strA(i))
            For j =  0  To UBound(strB)
                .Cells(l, j +  1 ) = strB(j)
            Next j
            l = l +  1 
            If l = .Rows.Count +  1  Then
                i = i +  1 
                Exit For
            End If
        Next i
    End With
Next k
Application.ScreenUpdating = True
End Sub
Здесь можно еще "навесить" функцию проверки необходимости создания нового листа. Ну и последующего его создания, конечно
.

Что получилось по скорости выполнения (P IV-1700, 768 MB ОЗУ, XP SP3, 2003 SP3):
со 10923 страниц Ворда создана строка длиной в 5308444 знака. Из них после очистки осталось 4980761.
На присвоение значения строковой переменной (strT = oDoc.Content) ушла почти половина времени - 189 сек, общее время выполнения процедуры составило 400 сек (было заполнено 6 листов Excel по 65536 строк + ещё 2 записи на 7-м листе).
Вечером, если получится, буду сравнивать это со скоростью работы Вашего скрипта.
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36568522
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlth,
давай, интересно.
Только в моём скрипте собственно нет операции занесения данных в лист Экселя, т.е. ещё можно сравнить время открытия Вашего итогового файла и моего псевдо-экселевского файла. Т.е. я думаю, Эксель мой файл будет дольше открывать. Или просто добавить в скрипт в конце процедуру открытия этого файла и мерить общее время. Только я там таймер по ошибке в самое начало поставил, т.е. мерится и время реакции оператора тоже
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36570438
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121...Только я там таймер по ошибке в самое начало поставил, т.е. мерится и время реакции оператора тоже
Хм... это единственное, на что я обратил внимане ( - проверять скорость работы скрипта, учитывая отсутствие импорта данных в Excel, получается, смысла нет.
Но сравнить скорость выполнения задачи, применяя другой подход, всё-таки хотелось. Поэтому написал процедуру с использованием fso:
Код: 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.
Sub FromWordToExcel2()
Dim oWD As New Word.Application, oDoc As Word.Document 'раннее связывание
Dim fso As New Scripting.FileSystemObject, oFile As Scripting.File 'раннее связывание
Dim strT As String, oTS1 As Scripting.TextStream, oTS2 As Scripting.TextStream 'раннее связывание

'Dim oWD As Object, oDoc As Object
'Dim fso As Object, oFile As Object
'Dim strT As String, oTS1 As Object, oTS2 As Object
'Const wdFormatText As Long = 2, ForWriting As Byte = 2

Dim lngLnsCount As Long, bytWSCount As Byte, strFIlesPath As String
Dim oTmpWB As Workbook, stb

'Set oWD = CreateObject("Word.Application")
'Set fso = CreateObject("Scripting.FileSystemObject")

bytWSCount =  1 
Set oDoc = oWD.Documents.Open _
    ("C:\... Путь ...\Export.doc"\Export2.doc")
oDoc.SaveAs oDoc.Path & "\Export2.txt", wdFormatText
Set oFile = fso.GetFile(oDoc.FullName)
oWD.Quit: Set oDoc = Nothing: Set oWD = Nothing
Set oTS1 = fso.OpenTextFile(oFile)
strFIlesPath = Left(oFile.Path, InStrRev(oFile.Path, "\"))
Set oTS2 = fso.CreateTextFile(strFIlesPath & "Tmp.txt", ForWriting, True)
Application.EnableEvents = False
Application.ScreenUpdating = False
Do Until oTS1.AtEndOfStream
    strT = oTS1.ReadLine
    If Len(strT) > 0 Then
        lngLnsCount = lngLnsCount + 1
        oTS2.WriteLine strT
    End If
    If lngLnsCount = Application.Rows.Count Or oTS1.AtEndOfStream Then
        oTS2.Close
        Workbooks.OpenText Filename:=strFIlesPath & "Tmp.txt", Origin:=1251, _
            StartRow:=1, DataType:=xlDelimited, Space:=True, FieldInfo:=Array(Array(1, 1), _
            Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
        Set oTmpWB = Workbooks("Tmp.txt")
        oTmpWB.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(bytWSCount).Cells
        oTmpWB.Close
        bytWSCount = bytWSCount + 1
        lngLnsCount = 0
        Set oTS2 = fso.CreateTextFile(strFIlesPath & "Tmp.txt")
    End If
Loop
Application.EnableEvents = True
Application.ScreenUpdating = True
oTS1.Close: oTS2.Close
Kill oFile: Kill strFIlesPath & "Tmp.txt"
End Sub
Время выполнения импорта данных из того же вордовского файла на 10923 страницы при позднем связывании (закомментированные строки) составило 96 сек.
При раннем (не забываем добавлять ссылки на библиотеки) экономится ещё 14 сек (всего 82 сек)
Необходимость создания новых листов здесь также не проверяется, так что нужно заранее побеспокоиться об их наличии. Или подкорректировать код процедуры.
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36570464
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlth,
я тоже пробовал (правда в wsh)
Код: plaintext
1.
oDoc.SaveAs oDoc.Path & "\Export2.txt", wdFormatText
на выходе мусор получился, куча служебной информации, поэтому отказался от автоматики в этой части.
Надо тоже попробовать из Экселя провернуть.
А про проверку скорости - так там, после открытия файла, происходит работа по перекладыванию из одного файла в другой, с преобразованием строк. Вот это и хотел померить.
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36570887
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного тоже скорость потестил:
612437 строк в Ворде (он уже сам и не показывает в статусе, по тексту смотрел).
Сохранил вручную в текст.
Моим wsh скриптом переложил в текст в 166152 строки за 21,18 сек.
Открывается в Экселе практически сразу, но кричит, что всё не откроет - естественно, нет разбивки по страницам. Но автору наверное и не надо - вроде пока объём не настолько большой.

Код vlth:
Связывание переключил (раннее пока не стал налаживать) и переделал перекладывание строк, что-то вроде не так писал в файл (см. ниже).
Тот-же файл Ворд перегрузил в Эксель за 30,27 сек.
Но тут есть ремарка - при 512 мБ памяти ругался на её отсутствие, общее время работы было больше, как раз принесли ещё 512 - теперь сработал без возражений.

Код: 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.
Option Explicit

Sub FromWordToExcel2()
'Dim oWD As New Word.Application, oDoc As Word.Document 'раннее связывание
'Dim fso As New Scripting.FileSystemObject, oFile As Scripting.File 'раннее связывание
'Dim strT As String, oTS1 As Scripting.TextStream, oTS2 As Scripting.TextStream 'раннее связывание

Dim oWD As Object, oDoc As Object
Dim fso As Object, oFile As Object
Dim strT As String, oTS1 As Object, oTS2 As Object
Const wdFormatText As Long =  2 , ForWriting As Byte =  2 

Dim lngLnsCount As Long, bytWSCount As Byte, strFIlesPath As String
Dim oTmpWB As Workbook, stb

stb = Timer

Set oWD = CreateObject("Word.Application")
Set fso = CreateObject("Scripting.FileSystemObject")

bytWSCount =  1 
Set oDoc = oWD.Documents.Open _
    ("C:\Temp\Export.doc")
oDoc.SaveAs oDoc.Path & "\Export2.txt", wdFormatText
Set oFile = fso.GetFile(oDoc.FullName)
oWD.Quit: Set oDoc = Nothing: Set oWD = Nothing
Set oTS1 = fso.OpenTextFile(oFile)
strFIlesPath = Left(oFile.Path, InStrRev(oFile.Path, "\"))
Set oTS2 = fso.CreateTextFile(strFIlesPath & "Tmp.txt", ForWriting, True)
Application.EnableEvents = False
Application.ScreenUpdating = False
Do Until oTS1.AtEndOfStream
    strT = oTS1.ReadLine
    If Len(strT) >  7  Then
        If IsDate(Left(strT,  8 )) Then
        oTS2.Write strT & vbTab
      Else
        oTS2.WriteLine strT
        lngLnsCount = lngLnsCount +  1 
    End If
    End If
    If lngLnsCount = Application.Rows.Count Or oTS1.AtEndOfStream Then
        oTS2.Close
        Workbooks.OpenText Filename:=strFIlesPath & "Tmp.txt", Origin:=xlWindows, _
            StartRow:= 1 , DataType:=xlDelimited, Space:=True, FieldInfo:=Array(Array( 1 ,  1 ), _
            Array( 2 ,  1 ), Array( 3 ,  1 )) ', TrailingMinusNumbers:=True 'это на 2000 не пошло
        Set oTmpWB = Workbooks("Tmp.txt")
        oTmpWB.Worksheets( 1 ).Cells.Copy ThisWorkbook.Worksheets(bytWSCount).Cells
        oTmpWB.Close
        bytWSCount = bytWSCount +  1 
        lngLnsCount =  0 
        Set oTS2 = fso.CreateTextFile(strFIlesPath & "Tmp.txt")
    End If
Loop
Application.EnableEvents = True
Application.ScreenUpdating = True
oTS1.Close: oTS2.Close
Kill oFile: Kill strFIlesPath & "Tmp.txt"

stb = CInt((Timer - stb) *  100 ) /  100 
MsgBox ("Время работы " & stb & " сек."), vbInformation

End Sub

...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36571579
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121,

Так у меня получилось 91 сек вместо 96 - всё-таки листов в 2 раза меньше - 3, а не 6
Только автору по условию нужно было 3 столбца, а не 4? Или 3 - это промежуточный вариант
? Что-то непонятно...
Код: plaintext
', TrailingMinusNumbers:=True 'это на  2000  не пошло
Когда-то я пытался и от этого параметра "избавиться", вычищая всё, что записал рекордером - тогда не пошло. Видимо, тот текст, с которым я работал, иначе корректно не открыть было.
Сейчас и проверять не стал - оставил. Выходит, зря не проверил.
Кстати, нигде не нашёл описания этого параметра, а в хелпе сказано лишь, что он - "Optional Variant".
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36571932
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlth,
попробовал сейчас этот же Ваш код дома - что-то 1 гиг памяти не спасает - загрузка в пике доходит до 900 мБ и в итоге Эксель виснет. Так результата и не добился.
Имхо на слабой машине надо работать с текстом. Можно его в отдельные файлы перекладывать. Ваш код у меня до зависона сделал Export2.txt и первый Tmp.txt. И вероятно на
oTmpWB.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(bytWSCount).Cells
он и помер, или уже при открытии этого Tmp.txt (я его видел).
А вообще можно и csv генерить, по 65536 строк каждый. И потом подгружать в листы, можно даже и кодом - количество и имена известны, тянуть как экспорт или копировать целиком из отдельных книг в общую - сейчас сделал вручную, без проблем и мнгновенно, не так, как через Cells.Copy.
Но это уже теория, проверять не буду, уже неинтересно, да и проблема уже решена.
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36571955
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, посмотрел подробнее, даже генерил сразу Tmp.txt.xls, этот файл открыл нормально, а на копировании "Недостаточно памяти"...
Сейчас попробую лист целиком копировать, зацепило...
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36571972
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал - 125 секунд 3.5 листа данных - копировал листы целиком - полёт нормальный.
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36571981
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовал сейчас этот же Ваш код дома - что-то 1 гиг памяти не спасает
Hugo121, у меня 768 MB, так что проблема, думаю, не в объёме памяти.

Если копировать лист, вручную выделяя все его ячейки, что равносильно Cells.copy, зависание проявляется?

А вообще можно и csv генерить, по 65536 строк каждый. И потом подгружать в листы, можно даже и кодом - количество и имена известны, тянуть как экспорт или копировать целиком из отдельных книг в общую - сейчас сделал вручную, без проблем и мнгновенно, не так, как через Cells.Copy Можно и целиком листы. Из того же .txt (принципиальной разницы с .csv нет). Кроме того, можно копировать только содержащие данные 3-4 столбца. Можно еще с помощью ADO, что наверное, будет быстрее всего. Всё это дело техники.
Cells.copy в записи проще всего - 1 строка. Поскольку она у меня работает (а причины, по которой в данном случае может быть иначе, я не представляю), я её и оставил.

Если автор топика, или кто-то иной, вновь обратится к этой теме, тогда и будет смысл реализовать что-то из вышеперечисленного, а так - согласен: задача решена.
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36571982
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121Сделал - 125 секунд 3.5 листа данных - копировал листы целиком - полёт нормальный.Вот и ладно
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36572005
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот продукт совместного творчества, у меня работает без зависаний.
Кнопка запуска кода остаётся на последнем листе.
Должна быть доступна запись в папку, откуда открываете исходный документ.
Немного некрасиво остаётся полузакрытое окно выбора файла, не получилось победить...
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36572018
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121Вот продукт совместного творчества, у меня работает без зависаний.
...
Немного некрасиво остаётся полузакрытое окно выбора файла, не получилось победить...
Решается с помощью DoEvents
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Set objDialog = CreateObject("UserAccounts.CommonDialog")
objDialog.Filter = "Doc Files|*.doc"
objDialog.InitialDir = "C:\"
intResult = objDialog.ShowOpen
 If intResult =  0  Then
    Exit Sub
Else
    toFile = objDialog.Filename
End If
DoEvents
Только время выполнения увеличилось до 125 сек - в 1,5 раза (( ...
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36572024
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot]Решается с помощью DoEventsquot]
Или применить "родное" диалоговое окно Application.FileDialog(msoFileDialogOpen), что логичнее.
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36572205
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlth,
Да, про DoEvents я подумал, уже засыпая...
Т.к. Application.FileDialog на 2000 не идёт, сделал с DoEvents. Ещё добавил и сократил StatusBar - стало инфомативней и меньше мелькать. В итоге время работы даже сократилось на 30%! Всё-же StatusBar здорово жрёт ресурсы...
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36572599
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121, про Status Bar интересно: я так эту версию и не проверил, хотя хотел...
Вот вариант с ADO. У меня получилось чуть более минуты (62-65 сек):
Код: 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.
Sub FromWordToExcel3()
Dim oWD As New Word.Application, oDoc As Word.Document
Dim fso As New Scripting.FileSystemObject, oFile As Scripting.File, _
    strT As String, oTS1 As Scripting.TextStream, oTS2 As Scripting.TextStream
Dim cnTXT As New ADODB.Connection, rs As New ADODB.Recordset
Dim lngLnsCount As Long, bytWSIndx As Byte, strFIlesPath As String
Dim oTmpWB As Workbook, strDate As String, lngRowCnt As Long, lngRCrs As Long

Set oDoc = oWD.Documents.Open _
    ("C:\...\Export2.doc")
oDoc.SaveAs oDoc.Path & "\Export2.txt", wdFormatText
Set oFile = fso.GetFile(oDoc.FullName)
oWD.Quit: Set oDoc = Nothing: Set oWD = Nothing

Set oTS1 = fso.OpenTextFile(oFile)
strFIlesPath = Left(oFile.Path, InStrRev(oFile.Path, "\"))
Set oTS2 = fso.CreateTextFile(strFIlesPath & "Tmp.txt", ForWriting)

Do Until oTS1.AtEndOfStream
    strT = oTS1.ReadLine
    If Len(strT) >  0  Then
        If IsDate(strT) Then
            lngLnsCount = lngLnsCount +  1 
            strDate = lngLnsCount & " " & strT & " "
        Else
            oTS2.WriteLine Replace(strDate & strT, " ", ";")
            strDate = "": strT = ""
        End If
    End If
Loop
oTS1.Close: oTS2.Close
Set oTS1 = Nothing: Set oTS2 = Nothing

cnTXT.Mode = adModeRead
cnTXT.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data SoulngRCrse=" & strFIlesPath & ";Extended Properties='text;HDR=NO;FMT=Delimited'"
rs.CursorType = adOpenStatic
lngRowCnt = Application.Rows.Count
Application.EnableEvents = False
Application.ScreenUpdating = False
For bytWSIndx =  1  To lngLnsCount / lngRowCnt +  1 
    Set rs = cnTXT.Execute("SELECT F2,F3,F4,F5 FROM Tmp.txt WHERE F1 BETWEEN " & _
        lngRCrs +  1  & " AND " & lngRCrs + lngRowCnt)
    lngRCrs = lngRCrs + lngRowCnt
    With ThisWorkbook.Worksheets(bytWSIndx)
        .Cells( 1 ,  1 ).CopyFromRecordset rs
        .Columns( 1 ).NumberFormat = "dd.mm.yy"
    End With
Next
cnTXT.Close
Set cnTXT = Nothing: Set rs = Nothing
Application.EnableEvents = True
Application.ScreenUpdating = True
Kill oFile: Kill strFIlesPath & "Tmp.txt"
End Sub
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36572603
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlth,
ещё не пропал интерес?
Поверяю - ругается на cnTXT.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
Не подскажете - что подключить или чем заменить?
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36572605
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не, заработало... просто я "Data SoulngRCrse=" исправил на "Data Sourse=" ...
Ещё недочёт - у меня 3 листа, а ему 4 подавай... смотрю...
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36572611
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, с АДО побыстрее - 48-66 сек. в зависимости от активности антивируса наверное.
Тот мой/наш последний вариант 79-93 сек. соответственно. Статусбары отключил для объективности.
...
Рейтинг: 0 / 0
Из Ворда в Эксель
    #36572683
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121Не, заработало... просто я "Data SoulngRCrse=" исправил на "Data Sourse=" ...

Это я, уже в окне сообщения, вставляя переменную strFIlesPath вместо абсолютного пути... Но как ТАКОЕ могло получиться - не понимаю
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Из Ворда в Эксель
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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