| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Текст из autocad в Word в текущее положение курсора. Как?

Текст из autocad в Word в текущее положение курсора. Как?

Ответ
Поиск в этой теме
Непрочитано 14.03.2006, 13:52
Текст из autocad в Word в текущее положение курсора. Как?
_Andre_
 
механизатор
 
Самара
Регистрация: 28.12.2004
Сообщений: 312

Делаю первые шаги в связке AutoCAD и WORD. Задача - вставить текст переданный переменной text в активный документ WORD в текущее положение курсора. Пока получилось вот такая функция (часть кода позаимствовал у VK):
Код:
[Выделить все]
(defun ba-text-from-acad-to-word (text / _ba-release-object ActiveDocument msw work_range)
;;;Функция освобождает объект
  (defun _ba-release-object (obj_name /)
    (if	(and obj_name (vlax-object-released-p obj_name))
      (vlax-release-object obj_name)
    ) ;_ end if
    (setq obj_name nil)
  ) ;_ end defun
;;;end of _ba-release-object
  (if (setq msw (vlax-get-or-create-object "Word.Application"))
    (if	(if (vl-catch-all-error-p
	     ;|Пробую узнать активный документ, с отловом ошибкина случай если WORD запушен, но нет открытых документов.|;
	      (setq ActiveDocument
		     (vl-catch-all-apply
		       'vlax-get-property
		       (list msw 'activedocument) ;_ end list
		     ) ;_ end vl-catch-all-apply
	      ) ;_ end setq
	    ) ;_ end vl-catch-all-error-p
	  (setq activedocument nil)
;;;Если вернулась ошибка, то активного док-та нет и функция вернет nil
	  ActiveDocument
;;;Если ошибки не было, то акт. док-т есть, то вернеттся указатель на него.
	) ;_ end if
      (progn (vla-put-visible msw :vlax-true)
;;;Делаем Word видимым
	     (setq work_range (vlax-invoke-method ActiveDocument 'range 0 0))
	     (vlax-invoke-method
	       work_range
	       "insertafter"
	       text ;_ end strcat
	     ) ;_ end vlax-invoke-method
      ) ;_ end progn
      (princ "\nНет активного документа!!!")
    ) ;_ end if
    (princ "\nWORD не запускается!!!")
  ) ;_ end if
  (_ba-release-object work_range)
  (_ba-release-object ActiveDocument)
  (_ba-release-object msw)
)
НО! в таком виде текст вставляется в начало документа, а нужно в текущюю позицию курсора. Подскажите как сделать?
Я так понимаю, что необходимо определить диапазон work_range, при этом привязав его к положению курсора, но как сделать не понимаю =((
Просмотров: 20956
 
Непрочитано 21.04.2006, 11:58
#21
*Voland*

Инженер-технолог
 
Регистрация: 02.12.2004
Сообщений: 31


Получается это только для копирования текста. Я предполагал, что перенесена будет таблица целиком. :cry: Жаль. Хотелось чтобы текст перенесся с таким же форматированием. Все равно спасибо за разъяснение.
*Voland* вне форума  
 
Непрочитано 21.04.2006, 14:46
#22
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Вот что нашел в GOOGLE
http://groups.google.com/group/autod...ef832505b89453

Toolpac есть в DOWNLOADE
http://dwg.ru/dwl/474
http://dwg.ru/dwl/475
http://dwg.ru/dwl/476
VVA вне форума  
 
Непрочитано 06.09.2006, 16:04
#23
luser


 
Регистрация: 20.04.2006
Сообщений: 67


если кто то решал такую проблему отзовитесь.
проблема: в рисунке автокада есть масса блоков формата А4 (лист), для
отчета их нужно постранично вставить в Word (так как отчет в Word), по
условию 1БЛОК.автокада=1СТРАНИЦЕ.Word.
PS. интересует автоматизация этой проблемы (VLISP)
Заранее благодарю.
luser вне форума  
 
Непрочитано 10.02.2011, 09:45
#24
Acad_User


 
Регистрация: 27.10.2009
Сообщений: 1


вставил текст из сообщения http://forum.dwg.ru/showpost.php?p=69476&postcount=20 в файл txt2word.lsp. Загрузил его в AutoCAD 2006. Было сообщение, что txt2word.lsp успешно загружено. Но когда я нажал на кнопку "Закрыть", то появилось сообщение "команда: ; ошибка: излишние cdrs в точесной паре на входе" и команда TAW у меня не работает.

Я что-то сделал неправильно?

Обновление: я разобрался, в чем была проблема. Копировать текст макроса из pdf версии топика - была не самая лучшая идея.

Последний раз редактировалось Acad_User, 11.02.2011 в 10:34.
Acad_User вне форума  
 
Непрочитано 16.05.2011, 16:23
#25
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


Друзья, а как все таки можно заполнять таблицу в ворде? Точнее нужно ее сделать, а потом заполнять, причем изначально создать одну строчку, заполнить, потом если есть что еще писать, то вставить след строку таблицы?
Zaghim вне форума  
 
Непрочитано 17.06.2016, 22:02
#26
AndroiD


 
Регистрация: 06.01.2008
Урал
Сообщений: 144


Есть Lisp который создает вордовский документ, создает в нем одну таблицу, сохраняет документ, закрывает его. Как в этом документе создать две таблицы, расположенные одна под другой и разделенные абзацем?

Код:
[Выделить все]
 (defun DocWord (/)
(vl-load-com)
(setq g_ow (vlax-get-or-create-object "Word.Application.15"))
(setq g_docs (vlax-get-property g_ow 'Documents))
(setq g_doc (vlax-invoke-method g_docs 'Add))

(setq g_r (vlax-invoke-method g_doc 'Range 0 0))
(setq g_tabs (vlax-get-property g_doc 'Tables))
(setq g_tab (vlax-invoke-method g_tabs 'Add g_r 2 3))

(vlax-invoke-method g_doc 'SaveAs "c:\\Users\\Оля\\Desktop\\Word.docx")
(vlax-invoke-method g_ow "Quit")
(vlax-release-object g_ow)
(vlax-release-object g_doc)
(vlax-release-object g_docs)
(vlax-release-object g_r)
(setq g_ow nil g_doc nil g_docs nil g_r nill)
(princ)
)
Если я добавлю к этому коду следующие строки
Код:
[Выделить все]
 (setq g_re (vlax-get-property (vlax-get-property g_tab 'Range) 'End))
(setq g_r (vlax-invoke-method g_doc 'Range g_re g_re))
(vlax-invoke-method g_tabs 'Add g_r 5 3)
то получаю одну таблицу размерностью 7 строк и 3 столбца, а мне необходимо получить две таблицы рамерностью 2х3 и 5х3.

Последний раз редактировалось AndroiD, 17.06.2016 в 22:20.
AndroiD вне форума  
 
Непрочитано 18.06.2016, 09:02
#27
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от AndroiD Посмотреть сообщение
Как в этом документе создать две таблицы, расположенные одна под другой и разделенные абзацем?
использовать шаблон word, в котором сделаны эти две таблицы, и все отформатировано как надо.
Сергей812 вне форума  
 
Непрочитано 18.06.2016, 14:39
#28
AndroiD


 
Регистрация: 06.01.2008
Урал
Сообщений: 144


А с помощью Range это возможно сделать?
AndroiD вне форума  
 
Непрочитано 18.06.2016, 14:56
#29
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от AndroiD Посмотреть сообщение
А с помощью Range это возможно сделать?
Что? Если нужно, чтобы в нужном месте появился вордовский файл с двумя Пустыми таблицами, то здесь методы копирования и переименования файла нужны. В папке ваших шаблонов лежит готовый вордовский файл, и вся задача сводиться к копированию файла в нужное место под требуемым именем.

п.с. В приведенном лиспе начисто проигнорированы локальные переменные, хотя они явно есть - создание и удаление com-объектов идет внутри одной функции.

----- добавлено через ~7 мин. -----
т.е. весь код состоит из одной строчки -
Код:
[Выделить все]
 vl-file-copy %Полное имя файла шаблона% %Полное имя требуемого файла%
это не считая обработчиков ошибки, естественно
Сергей812 вне форума  
 
Непрочитано 18.06.2016, 15:23
#30
AndroiD


 
Регистрация: 06.01.2008
Урал
Сообщений: 144


Мне нужно в одном файле создать несколько таблиц разной размерности, у меня же создается из этих нескольких 1 таблица. Range мне как то поможет их разделить.
AndroiD вне форума  
 
Непрочитано 18.06.2016, 15:27
#31
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от AndroiD Посмотреть сообщение
Мне нужно в одном файле создать несколько таблиц разной размерности, у меня же создается из этих нескольких 1 таблица. Range мне как то поможет их разделить.
Читайте про объектную модель Word - в частности, например, tables.
Сергей812 вне форума  
 
Непрочитано 18.06.2016, 15:56
#32
AndroiD


 
Регистрация: 06.01.2008
Урал
Сообщений: 144


Ответ на свой вопрос я нашел. Не знаю на сколько этот код оптимален, но он работает.

Код:
[Выделить все]
 
(defun DocWord (/)
(vl-load-com)
(setq g_ow (vlax-get-or-create-object "Word.Application.15"))
(setq g_docs (vlax-get-property g_ow 'Documents))
(setq g_doc (vlax-invoke-method g_docs 'Add))

(setq g_r (vlax-invoke-method g_doc 'Range 0 0))
(setq g_tabs (vlax-get-property g_doc 'Tables))
(setq g_tab (vlax-invoke-method g_tabs 'Add g_r 2 3))


(setq g_re (vlax-get-property (vlax-get-property g_tab 'Range) 'End))
(setq g_r (vlax-invoke-method g_doc 'Range g_re g_re))

(vlax-invoke-method g_r 'InsertParagraphAfter)
(vlax-invoke-method g_r 'InsertParagraphAfter)

(setq g_c (vlax-get-property g_doc 'Content))
(setq g_ce (vlax-get-property g_c 'End))
(setq g_ce2 (1- g_ce))
(setq g_r (vlax-invoke-method g_doc 'Range g_ce2 g_ce))

(vlax-invoke-method g_tabs 'Add g_r 5 3)

(vlax-invoke-method g_doc 'SaveAs "c:\\Users\\Оля\\Desktop\\Word.docx")
(vlax-invoke-method g_ow "Quit")
(vlax-release-object g_ow)
(vlax-release-object g_doc)
(vlax-release-object g_docs)
(vlax-release-object g_tab)
(vlax-release-object g_r)
(vlax-release-object g_c)
(setq g_ow nil g_doc nil g_docs nil g_r g_tab nill nill g_c nill)
(princ)
)


Последний раз редактировалось AndroiD, 18.06.2016 в 16:42.
AndroiD вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Текст из autocad в Word в текущее положение курсора. Как?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск