Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
tuanha8896

Nhờ sửa lisp tìm đối tượng giữa cad và excell

Các bài được khuyến nghị

em có tải được lisp tìm đối tượng được xuất từu cad qua excell... lisp hiện tìm được đối tượng khi giá trị handle xuất ra ở cột A... Em xin nhờ các anh chị trong diễn đàn hướng dẫn sửa lisp khi mà giá trị handle ở cột khác với ạ.... 

25.SelectObjectByHandle(Tra).lsp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
14 giờ trước, tuanha8896 đã nói:

em có tải được lisp tìm đối tượng được xuất từu cad qua excell... lisp hiện tìm được đối tượng khi giá trị handle xuất ra ở cột A... Em xin nhờ các anh chị trong diễn đàn hướng dẫn sửa lisp khi mà giá trị handle ở cột khác với ạ.... 

25.SelectObjectByHandle(Tra).lsp

Mình chỉnh lại cho bạn cột đầu tiên của vùng chọn nhé

Lisp này bạn lấy trên nhóm zalo Autolisp hỗ trợ vẽ cad sao không hỏi ở đó để mọi người hỗ trợ kịp thời.

;;;;;chon doi tuong theo handle tu excel
(defun C:tra ( / 
    CheckActiveCell
	CheckCloseApp
    Ename
	Handle
	ListAddress
    ListRowInvalid
    ListStringAddress
	NumRow
	NumRowEnd
	NumRowStart
	SelectionSet
	StringAddress
	StringAddressTotal
	VlaAppExcel
	VlaWorkbooks
	VlaRange
	VlaSheet)

	(setq CheckActiveCell (SHIE_CHECKACTIVECELL))
	(setq SelectionSet (ssadd))
	(if CheckActiveCell
		(progn
			(setq VlaAppExcel (vlax-get-or-create-Object "Excel.Application"))
			(vlax-put-property VlaAppExcel "Visible" :vlax-true)
			(setq VlaWorkbooks (vlax-get-property VlaAppExcel "Workbooks"))
			(setq CheckCloseApp (= (vla-get-count VlaWorkbooks) 0))
			(setq VlaRange (vlax-get-property VlaAppExcel "Selection"))
			(setq VlaSheet (vlax-get-property VlaAppExcel "ActiveSheet"))
			(if VlaRange
				(progn
					(setq StringAddressTotal (vlax-get-property VlaRange "Address" :vlax-false :vlax-false 1 :vlax-false :vlax-false))
					(setq ListStringAddress (SHIE_STRING_TO_LIST_NO_TRIM StringAddressTotal ","))
					(foreach StringAddress ListStringAddress
						(setq ListAddress (SHIE_STRINGADDRESS_TO_LISTADDRESS StringAddress))
						(setq NumRowStart (nth 1 ListAddress))
						(setq Row (nth 2 ListAddress))
						(setq NumRowEnd (nth 3 ListAddress))
						(if (not NumRowEnd)
							(setq NumRowEnd NumRowStart)
						)
						(setq NumRow NumRowStart)
						(while (<= NumRow NumRowEnd)
							(setq StringAddress (SHIE_LISTADDRESS_TO_STRINGADDRESS (list Row NumRow)))
							(setq VlaRange (vlax-get-property VlaSheet "Range" StringAddress))
							(setq Handle (vlax-variant-value (vlax-get-property VlaRange "Text")))
							(setq Ename (handent Handle))
							(if Ename
								(setq SelectionSet (ssadd Ename SelectionSet))
								(setq ListRowInvalid (cons NumRow ListRowInvalid))
							)
							(setq NumRow (+ NumRow 1))
						)
					)
					(sssetfirst Nil SelectionSet)
				)
			)
        )
    )
	(if (= (sslength SelectionSet) 0)
		(alert "There is no valid data selected from excel!")
    )
	(if ListRowInvalid
		(princ (strcat "\nThere is no valid data in row: " (SHIE_LIST_TO_STRING (mapcar '(lambda (x) (itoa (+ x 1))) ListRowInvalid) ",")))
    )

	(princ)
)
-------------------------------------------------------------------------------------------------------------------
(defun SHIE_CHECKACTIVECELL ( / 
	CheckActiveCell
	CheckCloseApp
	VlaAppExcel
	VlaRangeActive
	VlaWorkbooks)

	(setq VlaAppExcel (vlax-get-Object "Excel.Application"))
	(if VlaAppExcel
		(progn
			(setq VlaRangeActive (vlax-get-property VlaAppExcel "Selection"))
			(if VlaRangeActive
				(setq CheckActiveCell T)
			)

			(setq VlaWorkbooks (vlax-get-property VlaAppExcel "Workbooks"))
			(setq CheckCloseApp (= (vla-get-count VlaWorkbooks) 0))
			(if CheckCloseApp
				(progn
					(vlax-invoke-method VlaAppExcel "Quit")
					(vlax-release-object VlaAppExcel)
				)
			)
		)
	)
	CheckActiveCell
)
-------------------------------------------------------------------------------------------------------------------
(defun SHIE_STRINGADDRESS_TO_LISTADDRESS ( StringAddress / 
	ListStringAddressCell
	ListAddress)

	(setq ListStringAddressCell (SHIE_STRING_TO_LIST_NEW StringAddress ":"))
	(setq ListAddress (apply 'append (mapcar 'SHIE_STRINGADDRESSCELL_TO_LISTADDRESSCELL ListStringAddressCell)))
	ListAddress
)
--------------------------------------------------------------------------------------------------------------------
(defun SHIE_STRINGADDRESSCELL_TO_LISTADDRESSCELL ( StringAddressCell / 
	Char
	ListAddressCell
	Pos
	PosBase
	PosTotal)

	(setq PosTotal (strlen StringAddressCell))
	(setq Pos 1)
	(while
		(and
			(not PosBase)
			(<= Pos PosTotal)
		)
		(setq Char (substr StringAddressCell Pos 1))
		(if (member Char (list "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"))
			(setq PosBase Pos)
		)
		(setq Pos (+ Pos 1))
	)
	(setq ListAddressCell
		(list
			(SHIE_STRINGCOLUMN_TO_NUMCOLUMN (substr StringAddressCell 1 (- PosBase 1)))
			(- (atoi (substr StringAddressCell PosBase)) 1)
		)
	)
	ListAddressCell
)
-------------------------------------------------------------------------------------------------------------------
(defun SHIE_LISTADDRESS_TO_STRINGADDRESS ( ListAddress /
	NumLength
	StringAddress)

	(setq NumLength (length ListAddress))
	(if (= NumLength 2)
		(setq StringAddress
			(strcat
				(SHIE_NUMCOLUMN_TO_STRINGCOLUMN (nth 0 ListAddress))
				(itoa (+ (nth 1 ListAddress) 1))
			)
		)
	)
	(if (= NumLength 4)
		(setq StringAddress
			(strcat
				(SHIE_NUMCOLUMN_TO_STRINGCOLUMN (nth 0 ListAddress))
				(itoa (+ (nth 1 ListAddress) 1))
				":"
				(SHIE_NUMCOLUMN_TO_STRINGCOLUMN (nth 2 ListAddress))
				(itoa (+ (nth 3 ListAddress) 1))
			)
		)
	)
	StringAddress
)
--------------------------------------------------------------------------------------------------------------------
(defun SHIE_STRINGCOLUMN_TO_NUMCOLUMN ( StringColumn / 
	Base
	NumColumn
	ListTemp)

	(setq Base 1)
	(setq ListTemp (reverse (mapcar '(lambda (x) (- x 64)) (vl-string->list StringColumn))))
	(setq NumColumn 0)
	(foreach Temp ListTemp
		(setq NumColumn (+ NumColumn (* Temp Base)))
		(setq Base (* Base 26))
	)
	(setq NumColumn (- NumColumn 1))
)
--------------------------------------------------------------------------------------------------------------------
(defun SHIE_NUMCOLUMN_TO_STRINGCOLUMN ( NumColumn /
	NumMod
	StringColumn)

	(setq NumColumn (+ NumColumn 1))
	(setq StringColumn "")
	(while (> NumColumn 0)
		(setq NumMod (rem NumColumn 26))
		(setq StringColumn
			(strcat
				(if (= NumMod 0) "Z" (chr (+ NumMod 64)))
				StringColumn
			)
		)
		(if (= NumMod 0)
			(setq NumColumn (- (/ NumColumn 26) 1))
			(setq NumColumn (/ NumColumn 26))
		)
	)
	StringColumn
)
-------------------------------------------------------------------------------------------------------------------
(defun SHIE_LIST_TO_STRING ( ListString Sep / StringValue)
	(setq StringValue (car ListString))
	(foreach StringTemp (cdr ListString)
		(setq StringValue (strcat StringValue Sep StringTemp))
	)
	StringValue
)
--------------------------------------------------------------------------------------------------------------------
(defun SHIE_STRING_TO_LIST_NEW (Stg Del / ListString)
	(setq ListString (SHIE_STRING_TO_LIST_NO_TRIM Stg Del))
	(setq ListString (mapcar '(lambda (x) (vl-string-trim " " x)) ListString))
	(setq ListString (mapcar '(lambda (x) (vl-string-trim "\t" x)) ListString))
	ListString
)
-------------------------------------------------------------------------------------------------------------------
(defun SHIE_STRING_TO_LIST_NO_TRIM (Stg Del / LenDel StgTemp Pos StgSub StgSubTemp ListString)
	(if Stg
		(progn
			(setq LenDel (strlen Del))
			(setq StgTemp Stg)
			(while (setq Pos (vl-string-search Del StgTemp))
				(setq StgSub (substr StgTemp 1 Pos))
				(setq StgTemp (substr StgTemp (+ Pos 1 LenDel)))
				(setq StgSubTemp StgSub)
				(if (/= StgSubTemp "")
					(setq ListString (cons StgSub ListString))
				)
			)
			(setq StgSub StgTemp)
			(setq StgSubTemp StgSub)

			(if (/= StgSubTemp "")
				(setq ListString (cons StgSub ListString))
			)
			(if (not ListString)
				(setq ListString (list Stg))
			)
			(setq ListString (reverse ListString))
		)
	)
	ListString
)

 

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Dạ cảm ơn anh ạ... Tại em tải về mà không nhớ là tải ở đâu ạ... Anh có thêm chú thích tại các vị trí sửa để sau này có thể sửa tùy thích vị trí cột handle không ạ

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×