Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Скопировать таблицу из файла PDF в Word Добавлено: 12.01.10 18:56  

Автор вопроса:  Олег
У меня такая проблема! Надо перенести (скопировать) очень большую (на нескольких страницах книги) таблицу из файла PDF в Word. Если просто её выделить в PDF и скопировать в буфер обмена, а потом вставить в документ Word, то содержимое всех ячеек таблицы превращается в одну непрерывную строку, в которой "контент" одной ячейки никак не отделён от "контента" другой. Нет между ними ни знаков табуляции (код ANSI - 9), ни знаков возвратов каретки (код ANSI - 13).

По команде меню ("Преобразовать текст в таблицу") без этих знаков не получится, следовательно, мне придётся вставлять их туда вручную. Если совершенно уж "вручную" это делать, то надо сначала щелкать мышью в нужных местах, а потом нажимать на "Tab" или на "Enter". И уже после этого "преобразовывать текст в таблицу". Хочется немножечко упростить себе жизнь, а заодно и ума-разума набраться :)

Мой вопрос (просьба) состоит в следующем: подскажите, пожалуйста, как написать макрос, который по "левому" щелчку мыши на определённой позиции документа Word вставлял бы в эту позицию знак табуляции, а по "правому" щелчку знак возврата каретки. В Excel я уже немножечко освоился, а в Word'е ещё только делаю свои первые шаги.
Не могу понять, как здесь "ловить" событие щелчка мыши по странице документа? А что надо вставить в процедуру обработки этого события, я уже сообразил...

В процедуре обработки событии "левого" щелчка будет:
    Selection.TypeText Text:=vbTab

А для "правого" будет:
    Selection.TypeParagraph

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 hip



Вопросов: 3
Ответов: 22
 Профиль | | #1 Добавлено: 12.01.10 20:34
Возможно есть способ попроще, но как вариант могу предложить вот что:
Создаешь в вордовском проекте модуль класса (пусть это будет Class1). В нем в разделе объявлений пишешь такой код:

  1. Public WithEvents App As Application


То есть объявляешь одно единственное свойство - App.
После этого вверху окна кода в левом раскрывающемся списке выбираешь это свойство, в правом списке при этом станут доступны события, которые можно ловить. Просто клика левой кнопкой там нет, зато есть двойной клик.
Создаешь две процедуры обработки событий класса.

  1. Private Sub App_WindowBeforeDoubleClick(ByVal Sel As Selection, Cancel As Boolean)
  2.  
  3.       'твой код
  4.  
  5. End Sub
  6.  
  7. Private Sub App_WindowBeforeRightClick(ByVal Sel As Selection, Cancel As Boolean)
  8.       
  9.       'твой код
  10.       cancel=True  'эта строка отменит вызов контекстного меню, которое должно появиться после правого клика, полагаю оно в этом случае   ни к чему
  11.       
  12. End Sub


Теперь, когда класс готов, объявляешь его в обычном модуле:

  1. Public newApp As New Class1


И создаешь процедуру инициализации:

  1. Public Sub Ini()
  2.     Set newApp.App = Application
  3. End Sub


Теперь, после того, как ты запустишь процедуру ini, объект Application будет содержать уже не обычную инстансу Winword'а, а созданный тобой класс, который представляет собой тот же Word, с той лишь разницей, что при двойном клике или клике правой кнопкой он будет вести себя так, как ты захочешь (все зависит от того, что ты там напишешь в процедурах обработки событий класса).

А вообще, пардон если не в тему, но по моему проще вставить строку в ячейку Excel, и через меню Данные -> Текст по столбцам разбить строку по любым разделителям, хоть по пробелам. Попробуй по крайней мере, думаю выгорит.

Ответить

Номер ответа: 2
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #2 Добавлено: 12.01.10 22:11
По идее есть специализированные проги, для конвертирования Word => pdf и PDF => Word.

Ответить

Номер ответа: 3
Автор ответа:
 Олег



Вопросов: 9
Ответов: 30
 Профиль | | #3 Добавлено: 13.01.10 00:18
Спасибо тебе огромное! Я уже попробовал на простом примере... Всё классно работает!

А вообще... по моему проще вставить строку в ячейку Excel, и через меню Данные -> Текст по столбцам разбить строку по любым разделителям, хоть по пробелам. Попробуй по крайней мере, думаю выгорит.


Попробовал... Спасибо за совет. Честно говоря, я и не знал о такой возможности в Excel, теперь буду знать. На самом деле, очень удобная и полезная штука. но боюсь, что в моём случае это не самый удачный (в смысле, наименее трудоёмкий) выбор будет. Там у меня такая таблица, что во многих ячейках целые куски текста, состоящего из нескольких предложений, а в других просто числа или одиночные слова или предложения. Поэтому вот так вот "автоматически" по пробелам разделить не получится...

Ответить

Номер ответа: 4
Автор ответа:
 Олег



Вопросов: 9
Ответов: 30
 Профиль | | #4 Добавлено: 13.01.10 00:33
По идее есть специализированные проги, для конвертирования Word => pdf и PDF => Word.


Я знаю, что они есть в природе, и я даже когда-то пытался использовать некоторые из них. Мне ни одна из тех, которые я опробовал, не понравилась именно тем, что она не конвертировала таблицы и картинки. Короче говоря, я в них разочаровался уже давно, и сейчас у меня нет под рукой ни одной из них...

Ну да не беда! Теперь, когда hip подсказал, как упростить вставку табуляторов и возвратов каретки, мне будет гораздо легче!

Ответить

Номер ответа: 5
Автор ответа:
 Алекс



Вопросов: 0
Ответов: 1
 Профиль | | #5 Добавлено: 13.01.10 18:55
Может я чего-то не понимаю... У меня после выделения данных в табличном виде в контекстном меня (Acrobat Pro 9 (CS4)) появляется Copy as Table. Ее можно paste в Word. Выглядит прилично (хотя лучше в Excel). Правда вероятны проблемы с многостраничными таблицами, но если количество страниц ограничивается десятком - склеить их потом не трудно. Вот у меня документ с таблицей на 116 страниц. Что с ним делать - ума не приложу...

Ответить

Номер ответа: 6
Автор ответа:
 Олег



Вопросов: 9
Ответов: 30
 Профиль | | #6 Добавлено: 17.01.10 00:18
Алекс пишет:
Может я чего-то не понимаю... У меня после выделения данных в табличном виде в контекстном меня (Acrobat Pro 9 (CS4)) появляется Copy as Table. Ее можно paste в Word. Выглядит прилично (хотя лучше в Excel).


У меня Acrobat 7.0. После выделения данных в контекстном меню появляется только "Скопировать в буфер обмена" и "Скопировать с сохранением форматирования"...


Алекс пишет:
Правда вероятны проблемы с многостраничными таблицами, но если количество страниц ограничивается десятком - склеить их потом не трудно. Вот у меня документ с таблицей на 116 страниц. Что с ним делать - ума не приложу...
 


Мне очень сильно помог Abbyy Fine Reader 8.0 Pro. Там всё очень легко и эффективно!

1. Загружаем либо весь PDF, либо только некоторые его страницы (там предлают выбор).
2. Выделяем таблицу и щёлкаем по ней правой кнопкой, потом в контекстном меню выбираем "Изменить тип блока" > "Таблица", потом жмём на кнопку "Распознать".
3. Таким макаром проходимся по всем листам с нужными таблицами, а потом сохраняем их все (пакетом) в Ворде... Удачи!
Мне очень сильно помог Abbyy Fine Reader 8.0 Pro. Там всё очень легко и эффективно!

1. Загружаем либо весь PDF, либо только некоторые его страницы (там предлают выбор).
2. Выделяем таблицу и щёлкаем по ней правой кнопкой, потом в контекстном меню выбираем "Изменить тип блока" > "Таблица", потом жмём на кнопку "Распознать".
3. Таким макаром проходимся по всем листам с нужными таблицами, а потом сохраняем их все (пакетом) в Ворде... Удачи!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам