powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA Постраничный импорт из Word
12 сообщений из 12, страница 1 из 1
VBA Постраничный импорт из Word
    #39502484
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток
Весной занимался макросом импорт из 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
VBA Постраничный импорт из Word
    #39502496
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения. Перенесите тему в раздел Access

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

---
хотя следует сказать, что это были разовые работы, делала сама(операторам не отдавала)
...
Рейтинг: 0 / 0
VBA Постраничный импорт из Word
    #39502724
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
VBA Постраничный импорт из Word
    #39502731
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
VBA Постраничный импорт из Word
    #39502747
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тааак. Т.е. получаю два массива, данными из которых заполняю таблицу акса?
Цикл по таблицам необязателен. Работает с однотабличными
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA Постраничный импорт из Word
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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