Страницы: 1
RSS
Импорт из Ворд в ячейку эксель
 

Здравствуйте, помогите пожалуйста доработать  немного макрос, (Автор DANIKOLA), все работает отлично, но немного нужно докрутить.
Данный макрос переходит по ссылке открывает ворд и копирует данные, но если структура ворда табличная он копирует только первую ячейку таблицы,  если ворд без таблиц копирует и вставляет в эксель все, (все примеры в приложеном файле), также если в начале идет фото, то ничего не копирует.
Можно ли как то докрутить что бы он копировал все подряд без разбору и вставлял в ячейку в эксель без форматирования просто обычные данные.?
И еще момент, ворд доков может быть много и возможно будут поврежденные, можно ли заложить что если не открывается пропускать его и код работает дальше?

 
Доброе время суток.
Вариант
Код
Private FWord As Object
Public Sub ReadWordFiles()
    Dim LRow As Long, vData As Variant, i As Long
    LRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
    vData = ActiveSheet.Range(ActiveSheet.Cells(2, 1), ActiveSheet.Cells(LRow, 1)).Value
    Set FWord = CreateObject("Word.Application")
    For i = 1 To UBound(vData)
        vData(i, 1) = GetDocData(vData(i, 1))
    Next
    ActiveSheet.Range(ActiveSheet.Cells(2, 2), ActiveSheet.Cells(LRow, 2)).Value = vData
    FWord.Quit
    Set FWord = Nothing
End Sub

Private Function GetDocData(ByVal nextFile As String) As Variant
On Error GoTo errHandle
    Dim pDoc As Object
    Set pDoc = FWord.documents.Open(nextFile, ReadOnly:=True)
    GetDocData = Replace$(pDoc.Range.Text, vbCr, vbLf)
    pDoc.Close False
    Set pDoc = Nothing
Exit Function
errHandle:
    If Not pDoc Is Nothing Then pDoc.Close False
    GetDocData = Empty
End Function
 
Андрей VG, Здравствуйте, спасибо за ответ. на одном примере попробовал прям как надо, на другом почемуто ругается на строку
Код
    ActiveSheet.Range(ActiveSheet.Cells(2, 2), ActiveSheet.Cells(LRow, 2)).Value = vData
 
Цитата
Евген1788 написал:
другом почемуто ругается
вы предполагаете существование у меня телепатических способностей?
 
Андрей VG, да нет, просто что он просит у меня ? что я делаю не так
 
Цитата
Евген1788 написал:
что я делаю не так
Что бы ответить на этот вопрос, нужно знать, что с чем и как вы делаете. Если вы считаете, что сообщения
Цитата
Евген1788 написал:
ругается на строку
необходимо и достаточно для понимания проблемы... Тогда это не ко мне.
 
Цитата
Андрей VG, существование у меня телепатических способностей
а разве нет?)
Изменено: Mershik - 11.07.2020 23:19:13
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Mershik написал:
а разве нет?)
Нет, не имел, не состоял, даже рядом не стоял... :)
Изменено: Андрей VG - 11.07.2020 23:20:03
 
Андрей VG, ну все тоже самое, только указал другую папку и реальные анкеты :(  
 
Цитата
Евген1788 написал:
только указал другую папку и реальные анкеты
Честно говоря, нет понимания, почему запись массива во второй столбец может приводить к переполнению памяти.
Цитата
ActiveSheet.Range(ActiveSheet.Cells(2, 2), ActiveSheet.Cells(LRow, 2)).Value = vData
Есть только одно предположение, что объём текста в каких-то документах больше чем допустимое число символов в одной ячейке. С другой стороны же мне с форума не видно, что вы пытаетесь записать, может и длина строк в документе допустима для размещения в одной ячейке и действительно - банальная нехватка памяти. Следовательно, переходите на Excel 64 бит и установите побольше памяти в системе.
 
Андрей VG, я сейчас начал поочереди добавлять файлы и заметил что на одном файле ошибка только в нем 12085 знаков, в остальных в районе 2000, в этом может быть проблема?
 
Цитата
Андрей VG написал:
Следовательно, переходите на Excel 64 бит
у меня и так 64
 
Цитата
Евген1788 написал:
что на одном файле ошибка только в нем 12085 знаков
Размножил данные предоставленных файлов. По файлу
C:\path\пример\Семен — копия.doc получилось 16017 символов в ячейке
C:\path\пример\Семен.doc получилось 29460 символов в ячейке
Вывод - 12085, по крайней мере в Excel 365 64 бит, такое количество символов в документах Word не приводит к ошибке.
 
Андрей VG, я сейчас проверил у меня лимит 8192, и офис не 365, скажите а можно что бы либо макрос в таких случаях ничего не делал или что бы завать максимальное количество знаков которое ему надо копировать?
 
Цитата
Евген1788 написал:
а можно что бы либо макрос
Толковый словарь
Цитата
МО́ЖНО
1.
Возможно, есть возможность.
"М. сделать в два дня"
2.
Разрешается, позволительно.
"Здесь м. курить?"
Вы разрешения спрашиваете? Да, я вам разрешаю. Или о принципиальной возможности? Да, это возможно сделать.
 
Цитата
Евген1788 написал:
я сейчас проверил у меня лимит 8192,
Добрый день! Судя по #1, у Вас Excel 2019. Таких ограничений нет. Будет интересно, если Вы выложите пример (ссылку на пример) и опишите действия, при которых возникает ошибка.
Изменено: sokol92 - 12.07.2020 15:36:58
Владимир
 
Out of memory очень специфическая ошибка, которая может не иметь ничего общего напрямую с самим документом и возникать не каждый раз на нем. По крайней мере относительно именно указанной строки:
Код
vData = ActiveSheet.Range(ActiveSheet.Cells(2, 1), ActiveSheet.Cells(LRow, 1)).Value
Посмотрите как загружена память ДО помещения массива в память. Какие приложения открыты. Изменится ли что-то, если закрыть все и оставить только Excel.
Так же вполне возможно, что заработает без использования массива:
Код
Public Sub ReadWordFiles()
    Dim LRow As Long, vData As Variant, i As Long
    Dim ws As Worksheet
    Set ws = ActiveSheet
    LRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    'vData = ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(LRow, 1)).Value
    Set FWord = CreateObject("Word.Application")
    For i = 2 To LRow
        ws.Cells(i, 1).Value = GetDocData(ws.Cells(i, 1).Value)
    Next
    FWord.Quit
    Set FWord = Nothing
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Евген1788, а обязательно анкеты в Ворде заполнять? Можно же Pdf форму сделать и по кнопке в ней, например, писать значения полей в google sheets.
How to Submit an HTML Form to Google Sheets…without Google Forms Тут описано, как можно отсылать значения html форм в google sheets
Если нет возможности заиметь Pdf редактор с поддержкой Javasrcipt или дизанер Pdf форм, то, как вариант, можно воспользоваться JotForm Pdf Editor
Страницы: 1
Наверх