Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA Постраничный импорт из Word / 12 сообщений из 12, страница 1 из 1
09.08.2017, 12:26
    #39502484
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Постраничный импорт из Word
Доброго времени суток
Весной занимался макросом импорт из word в access (да, такой нужен; word - excel - access в моём случае не вариант). Код уже видели тут, ну вот он:
Код: 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.
Dim app As Word.Application
Dim wd As Word.Document
Dim wt As Word.Table
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim i As Long

Set app = CreateObject(“Word.Application”)
Set wd = app.DocumentsOpen(Forms![Forma].[Pole].Value)
Set wt = wd.Table(1)
Set db = CurrentDb
Set rs = db.OpenRecordset(“table”)

   With wt
      For I = 4 To Rows.Count
         With rs
         On Error Resume Next
         Add.New
         ![pole] = wt.Cell(i, 1).RangeText
         …
        On Error GoTo 0
        .Update
        End With
      Next
   End With

rst.Close: Set rst = Nothing
dbs.Close: Set rst = Nothing
doc.Close: Set doc = Nothing
appWord.Quit: Set appWord = Nothing


Написал. Заточил под определённую таблицу word. Далее занимался другими вещами, про ворды благополучно забыл. Но далее возникла необходимость импортировать из ворда. Попались многостраничные документы с таблицами овер 20 килострок. И тут стало видно, что такое колличество строк импортируется не просто со скрипом, а с очень жутким скрипом. Импорт мог занять 2+ часов времени. А вернее не сам импорт, а именно обработка данных ворда. Чем больше строк обрабатывается, тем сильнее замедляется программа. Импортировать, скажем, первые 500 строк и импортировать последние 500 той же таблицы - две разные картины по времени.

Я думал как оптимизировать макрос. Занимался различными извращениями. Пытался импортировать по 500 - 1000 строк в цикле, закрывать и открывать документ, аппликейшн, рекордсет внутри цикла - думал, что импортировать не сразу, а по n, но постоянно с новой строки будет быстрее. Ничего более умного по этому вопросу не нашёл, ииии...
Хочу в очередной раз поизгаляться.

Думаю попробовать создать массив на колличество страниц документа. Каждый раз открывать новую страницу и импортировать данные с размещённой на ней таблицы. Знаю как делать такое для листов экселя, а вот с вордом не получается. И возможно ли? Если известен правильный способ оптимизации, то было бы очень здорово. Но и даже если нет, я буду рад узнать как делать постраничный импорт из ворда, пусть он мне и не поможет.
Заранее спасибо

В данный момент не могу понять как импортировать именно тот фрагмент таблицы, размещённый на выбранном листе (таблица одна на многих страницах)
...
Рейтинг: 0 / 0
09.08.2017, 12:37
    #39502496
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Постраничный импорт из Word
Прошу прощения. Перенесите тему в раздел Access

Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
09.08.2017, 14:47
    #39502633
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Постраничный импорт из Word
автор Попались многостраничные документы с таблицами овер 20 килострок.
это примерно 300 листов, что для ворда --почти предел возможностей. даже сверх возможностей
какой версии ворд ---? может обрабатывать как xml или html
...
Рейтинг: 0 / 0
09.08.2017, 15:23
    #39502679
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Постраничный импорт из Word
ПЕНСИОНЕРКАкакой версии ворд ---? может обрабатывать как xml или html
Конкретно такие документы видел 97 - 2003. Обрабатывать как xml и html их не хотят по той же причине, по которой не загоняют их в excel - криво встают. К тому же не быстро. В акс оно загоняется пусть и очень долго, но без косяков
...
Рейтинг: 0 / 0
09.08.2017, 15:33
    #39502690
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Постраничный импорт из Word
Появилась безумная идея.
Бить файл на несколько постранично (но из акса, т.к. наличие интерфейса в аксе обязательно). Далее отбирать полученные документы мультиселектом, а потом импортировать из файлов массива в одну таблицу
...
Рейтинг: 0 / 0
09.08.2017, 15:42
    #39502694
VBA Постраничный импорт из Word
Ataxyword - excel - access в моём случае не вариант А почему? Ведь копирование - вставка в excel можно автоматизировать, а там хоть в массив, хоть стандартным импортом...
...
Рейтинг: 0 / 0
09.08.2017, 15:55
    #39502707
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Постраничный импорт из Word
Отказаться от Word-а. Или вставлять в него листы Excel.
...
Рейтинг: 0 / 0
09.08.2017, 15:58
    #39502710
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Постраничный импорт из Word
авторВедь копирование - вставка в excel можно автоматизировать
Как я понял, макросом? Мне будет полезно узнать. Т.к. штатный импорт этих файлов даёт косяки.
И, дело ещё в том, что время от времени для работы будут привлекаться сторонние юзеры. А для них нужно чтобы они кнопки на форме акса прожали и всё произошло.
...
Рейтинг: 0 / 0
09.08.2017, 15:58
    #39502713
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Постраничный импорт из Word
AtaxyПЕНСИОНЕРКАкакой версии ворд ---? может обрабатывать как xml или html
Конкретно такие документы видел 97 - 2003. Обрабатывать как xml и html их не хотят по той же причине, по которой не загоняют их в excel - криво встают. К тому же не быстро. В акс оно загоняется пусть и очень долго, но без косяков
я достаточно часто делала это , переведя ворд в
--тхт --если не было переносов в ячейках +импорт
--НТМ --если переносы были, но НТМ получала программно из ворда, применяя только стандартные теги и кавычку перед числовыми значениями+импорт во временную таблицу с текстовыми полями(исключительно), после проверки в аксессе и правки --запись в основную таблицу(правили операторы)

---
хотя следует сказать, что это были разовые работы, делала сама(операторам не отдавала)
...
Рейтинг: 0 / 0
09.08.2017, 16:07
    #39502724
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Постраничный импорт из Word
...
Рейтинг: 0 / 0
09.08.2017, 16:21
    #39502731
VBA Постраничный импорт из Word
Ataxy, вот, накидал процедурку. Работает. Только писал прямо в Ворде, под Акс надо подстругать.
Код: 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.
Sub tt()
Dim Doc As Document, Doc2 As Document, sText$, i&
Dim ArrAll, ArrRow
    Set Doc = ActiveDocument 'Documents("Document1")
    Set Doc2 = Documents.Add(, , , False) 'Добавляем скрытый документ
    
    For i = 1 To Doc.Tables.Count 'Цикл по таблицам документа
        Doc.Tables(i).Range.Copy
        Doc2.Content.PasteAndFormat wdFormatPlainText 'Вставляем таблицу как текст
        sText = sText & Doc2.Content.Text 'Добавляем содержимое в текстовую переменную
        Doc2.Content.Delete 'Очищаем дополнительный документ
    Next
    Doc2.Close False 'Закрываем дополнительный документ без сохранения
'Debug.Print sText
'В sText содержимое всех таблиц. Разжелители строк -vbCr, разделители полей - vbTab
    ArrAll = Split(sText, vbCr) 'Получаем массив строк
    
'Далее демонстрация. В реалии нужен цикл по строкам, разделение строки на поля и добавление записи.
    sText = ArrAll(0)
Debug.Print sText 'Смотрим содержимое
    ArrRow = Split(sText, vbTab) 'Получаем массив полей
    sText = ArrRow(1)
Debug.Print sText 'Смотрим содержимое 2-го поля 1-й строки
    
End Sub
...
Рейтинг: 0 / 0
09.08.2017, 16:38
    #39502747
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Постраничный импорт из Word
Тааак. Т.е. получаю два массива, данными из которых заполняю таблицу акса?
Цикл по таблицам необязателен. Работает с однотабличными
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA Постраничный импорт из Word / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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