05.05.2022 13:09    

fnholhudacan
Merhabalar, geçmiş bayramınızı kutlarım.

Oluşturmuş olduğum dimensionları tek tek seçip, seçtiğim sırada excele aktarmak istiyorum.



Linkleri görebilmek için ÜYE olmalısınız.


Üsteki konudaki lisp layerdeki tüm dimesionları excele aktarıyor.



Linkleri görebilmek için ÜYE olmalısınız.


Bu konudaki lisp ise tek tek seçtiriyor lakin seçmiş olduğum sırada değil de küçükten büyüğe sıralıyor.

Şimdiden çok teşekkür ederim saygılarımla

10.05.2022 11:34    

ProhibiT
Merhaba, daha önce değişik biçimlerde yazıp paylaştığımız konuyla ilgili bu başlığı açan arkadaşımızın isteğini kaşılayacak yeni bir fonksiyon paylaşıyorum. Ayrıtılar kod içinde başlık kısmında ve aşağıda açıklanmıştır.

Kod:

;|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
| D2EC: AutoCAD'de teker teker seçilen Dimension değerleri Excel tablosuna   |
|       aktarılır. Başlangıçta bir Excel Uygulaması açık ise, yeni bir       |
|       Çalışma Sayfası oluşturularak, Ölçü Değerleri aşağı doğru (sütun     |
|       düzeninde) Excel tablosuna yazılarak devam edilir. Excel uygulaması  |
|       açık değilse, yeni bir uygulama açılarak aynı işlemler yapılır.      |
|       Ondalık Basamak Ayracı ve Basamak Sayısı seçilen Dimension           |
|       nesnesinden alınarak Excel hücresine "Genel" biçimiyle yazılır.      |
|        M. Şahin Güvercin (ProhibiT) www.cizimokulu.com  10.05.2022         |
|--------___________________________________________________________---------|;
(defun c:D2EC (/ *error* ExLApp ExLLs ssT oLc dSu sTr sTn NwBk sHt1)
  (defun *error* (er/)
    (if (member er '("Function cancelled" "quit / exit abort"))
      (princ (strcat "\n\t*error*" er)))
    (if ExLLs (progn (vlax-release-object ExLLs)) (setq ExLLs nil))
    (if ExLApp (progn (vlax-release-object ExLApp) (setq ExLApp nil) (gc) (gc)))
    (if ssT (foreach n (ssnamex ssT) (redraw (cadr n) 4)))
    (if odz (setvar "dimzin" odz)) (if ocmd (setvar "cmdecho" ocmd)) (prin1))
  (vl-load-com) (setq ocmd (getvar "cmdecho") odz (getvar "dimzin"))
  (setvar "cmdecho" 0) (setvar "dimzin" 0)
  (setq ExLApp (vlax-get-or-create-object "Excel.Application"))
  (if (setq NwBk (vlax-get-property ExLApp "ActiveWorkbook"))
    (setq sHt1 (vlax-invoke-method (vlax-get-property NwBk "Sheets") "Add"))
    (setq NwBk (vlax-invoke-method (vlax-get-property ExLApp "Workbooks") "Add")
          sHt1 (vlax-get-property (vlax-get-property NwBk "Sheets") "Item" 1)))
  (setq ExLLs (vlax-get-property sHt1 "Cells")
        sTr   (vlax-get-property ExLLs 'Row)
        sTn   (vlax-get-property ExLLs 'Column))
  (princ "\nExcel'e aktarılacak Dimension Nesneleri seçiniz: ")
  (while (setq oLc (ssget ":s" (list (cons 0 "Dimension"))))
    (ssadd (setq oLc (ssname oLc 0)) (if (not ssT) (setq ssT (ssadd)) ssT))
    (redraw oLc 3) (setq oLc (vlax-ename->vla-object oLc))
    (if (not dSu) (progn (setq dSu T)
        (vlax-put-property ExLApp "UseSystemSeparators" :vlax-false)
        (vlax-put-property ExLApp "DecimalSeparator"
          (vlax-get-property oLc 'DecimalSeparator))))
    (setq oLc (rtos (if (= (vlax-get-property oLc 'Measurement) "")
                      (vlax-get-property oLc 'TextOverride)
                      (vlax-get-property oLc 'Measurement))
                    (vlax-get-property oLc 'UnitsFormat)
                    (vlax-get-property oLc 'PrimaryUnitsPrecision)))
    (vlax-put-property ExLLs "Item" sTr sTn oLc) (setq sTr (1+ sTr)))
  (if ssT (foreach n (ssnamex ssT) (redraw (cadr n) 4)))
  (vla-put-visible ExLApp :vlax-true)
  (mapcar 'vlax-release-object (list ExLLs ExLApp))
  (setq ExLLs nil ExLApp nil) (gc) (gc)
  (princ "\nM. Şahin Güvercin - www.cizimokulu.com") (prin1))


Yalnızca Linner (Horizontal, Vertical ve Rotated) Dimension türü nesneler işleme alınır. Angular Dimension nesnesi seçilirse fonksiyon hata ile sonlanır.

Excel'e aktarılacak Dimension seçerken ıskalanırsa (boşluğa tıklanırsa) "crossing" veya "window" seçimi ile birden çok nesne seçilirse; seçim setinin ilk sırasındaki (son oluşturulmuş) Dimension Nesnesi işleme alınarak değeri Excel tablosuna yazılır.

Lisp Fonksiyon (normal veya anormal şekilde) sonlandığında, Excel Uygulaması görünür halde serbest bırakılır, oluşturulan Excel Dosyası kaydedilmez. Excel dosyasındaki verileri başka biçimlerde kullanmak veya kaydetmek tamamen kullanıcı yetki ve sorumluğundadır.

Selam ve saygılarımla herkese kolaylıklar dilerim.

Düzenleme:
1- Travaci arkadaşımızın uyarısı üserine, 10.05.2022 saat 15.35 itibarıyla hata yakalama işlevinde düzenleme yapıldı.
2- 11.05.2022 tarihinde kodlarda son düzenleme yapıldı.

ProhibiT (12.05.2022 08:00 GMT)

10.05.2022 11:56    

fnholhudacan
Çok teşekkür ederim sayın hocam. Bu kod işimi epeyce kolaylaştıracak. Emeğinize sağlık. Selam ve saygılarımla...

11.05.2022 10:28    

ProhibiT
Eeey Ahali! Eeey Yönetim!
Travaci'yı benim başıma hanginiz bela ettiniz?
Neydi hatam, günahım ki cezam bu oldu.
Yukarıda paylaştığım Lisp'i didik didik didikleyip hallaç pamuğu gibi attı.
Değiştirmek, güncellemek zorunda kaldım.

Şaka bir yana bir keresinde de Alumina arkadaşımıza "Kod Zaptiyesi" demiştim. Sağ olsunlar, paylaşımlarımda gördükleri aksaklıkları nezaketlerinden özel mesajla bildiriyorlar. Sonuç olarak, paylaştığımız Lisp'leri kullanan arkadaşlar... iki kere güvendesiniz, bilesiniz istedim.

Selam ve saygılarımla herkese kolaylıklar dilerim.

> 1 <
Copyright © 2004-2022 SQL: 0.928 saniye - Sorgu: 63 - Ortalama: 0.01474 saniye