1372826956:AAFe2Py65GSQkfGiRnXuOQ-eD9yXcwMv988

Get Excel Lispi ve Lisp Yazımı İncelemesi

GetExcel lispi, (Excel’den AutoCAD‘e) ve (AutoCAD’den Excel‘e) veri aktarmak gerektiği zamanlarda kullanabileceğiniz genel amaçlı bir fonksiyondur.

Bu fonksiyonu yazarken site üyelerimizin kolay takip edilebilmesi için, her alt fonksiyonun başlıklarını çizgi (—–) ile ayırma ve açıklayıcı notlar ekleme yöntemini tercih ettim.

;——————————————————————————-

; Program İsmi: GetExcel.lsp [GetExcel R4]

; Tasarım:   Sertan TÜRKAN (Email: autocad@autocadbeyni.com)

;  (URL: http://www.autocadbeyni.com)

; Date Created: 14-01-2014

; Fonksiyonlar: Excel hücrelerine veri yazmayı ve Excel hücrelerinden veri almayı sağlayan bir çok fonksiyon.

Ana fonksiyonlara Genel Bakış

;——————————————————————————-

; GetExcel – Excel çalışma sayfasındaki değerleri *ExcelData@ list içerisinde depolar.

;   Yazımı:  (GetExcel ExcelFile$ SheetName$ MaxRange$)

;   Örnek: (GetExcel “C:\\Folder\\Filename.xls” “Sheet1” “L30”)

; GetCell – *ExcelData@ list den hücre değerini geri getirir.

;   Yazımı:  (GetCell Cell$)

;   Örnek: (GetCell “H15”)

; Fonksiyonun Kullanım Örneği:

; (defun c:Get-Örnek ()

;   (GetExcel “C:\\Folder\\Filename.xls” “Sheet1” “L30”);<– Edit Dosya ismi.xls

;   (GetCell “H21”);Veya sadece genel *ExcelData@ list argümanını da kullanabilirsiniz.

; );defun

;——————————————————————————-

; OpenExcel – Bir Excel çalışma sayfası açar.

;   Yazımı:  (OpenExcel ExcelFile$ SheetName$ Visible)

;   Örnek: (OpenExcel “C:\\Folder\\Filename.xls” “Sheet1” boşluk)

; PutCell – Değerleri Excel hücrelerinin içerisine koyar.

;   Yazımı:  (PutCell StartCell$ Data$) veya (PutCell StartCell$ DataList@)

;   Örnek: (PutCell “A1” (list “GP093” 58.5 17 “Base” “3′-6 1/4\””))

; CloseExcel – Excel oturumunu kapatır.

;   Yazımı:  (CloseExcel ExcelFile$)

;   Örnek: (CloseExcel “C:\\Klasör\\Dosya ismi.xls”)

; Fonksiyonun Kullanım Örneği:

; (defun c:Put-Örnek ()

;   (OpenExcel “C:\\Klasör\\Dosya ismi.xls” “Sheet1” boşluk);<– Edit Dosya ismi.xls

;   (PutCell “A1” (list “GP093” 58.5 17 “Base” “3′-6 1/4\””));Gerektiği kadar tekrar ettirilir

;   (CloseExcel “C:\\Klasör\\Dosya ismi.xls”);<– Edit Dosya ismi.xls

;   (princ)

; );defun

;——————————————————————————-

; Not: Fonksiyon Başlığında Her Argüman Şartının Gözden Geçirilmesi

;——————————————————————————-

; GetExcel – Excel çalışma sayfasındaki değerleri *ExcelData@ list içerisinde depolar

; Argümanlar: 3

;   ExcelFile$ = Dosya yolu ve dosya ismi

;   SheetName$ = Sayfa ismi veya sayfa ismi belirsiz ise, boşluk

;   MaxRange$ = Veri alınacak maksimum hücre bilgisi veya aktif hücreden A1 hücresine kadar tüm hücrelerden veri almak için boşluk

; Yazım örnekleri:

; (GetExcel “C:\\Temp\\Temp.xls” “Sheet1” “E19”) = C:\Temp\Temp.xls dosyasını Sheet1 çalışma sayfasında açma ve E19 nolu hücreye kadar verileri okuma.

; (GetExcel “C:\\Temp\\Temp.xls” nil “XYZ123”) = C:\Temp\Temp.xls a2tif sayfa üzerinde XYZ123 hücresine kadar tüm verileri okur.

;——————————————————————————-

(defun GetExcel (ExcelFile$ SheetName$ MaxRange$ / Column# ColumnRow@ Data@ ExcelRange^

ExcelValue ExcelValue ExcelVariant^ MaxColumn# MaxRow# Range$ Row# Worksheet)

(if (= (type ExcelFile$) ‘STR)

(if (not (findfile ExcelFile$))

(progn

(alert (strcat “Excel file ” ExcelFile$ ” dosya bulunamadı.“))

(exit)

);progn

);if

(progn

(alert “Excel dosyası belirlenmedi.“)

(exit)

);progn

);if

(gc)

(if (setq *ExcelApp% (vlax-get-object “Excel.Application”))

(progn

(alert “Devam etmek için, tüm Excel çalışma sayfalarını kapatın!“)

(vlax-release-object *ExcelApp%)(gc)

);progn

);if

(setq ExcelFile$ (findfile ExcelFile$))

(setq *ExcelApp% (vlax-get-or-create-object “Excel.Application”))

(vlax-invoke-method (vlax-get-property *ExcelApp% ‘WorkBooks) ‘Open ExcelFile$)

(if SheetName$

(vlax-for Worksheet (vlax-get-property *ExcelApp% “Sheets”)

(if (= (vlax-get-property Worksheet “Name”) SheetName$)

(vlax-invoke-method Worksheet “Activate”)

);if

);vlax-for

);if

(if MaxRange$

(progn

(setq ColumnRow@ (ColumnRow MaxRange$))

(setq MaxColumn# (nth 0 ColumnRow@))

(setq MaxRow# (nth 1 ColumnRow@))

);progn

(progn

(setq CurRegion (vlax-get-property (vlax-get-property

(vlax-get-property *ExcelApp% “ActiveSheet”) “Range” “A1”) “CurrentRegion”)

);setq

(setq MaxRow# (vlax-get-property (vlax-get-property CurRegion “Rows”) “Count”))

(setq MaxColumn# (vlax-get-property (vlax-get-property CurRegion “Columns”) “Count”))

);progn

);if

(setq *ExcelData@ nil)

(setq Row# 1)

(repeat MaxRow#

(setq Data@ nil)

(setq Column# 1)

(repeat MaxColumn#

(setq Range$ (strcat (Number2Alpha Column#)(itoa Row#)))

(setq ExcelRange^ (vlax-get-property *ExcelApp% “Range” Range$))

(setq ExcelVariant^ (vlax-get-property ExcelRange^ ‘Value))

(setq ExcelValue (vlax-variant-value ExcelVariant^))

(setq ExcelValue

(cond

((= (type ExcelValue) ‘INT) (itoa ExcelValue))

((= (type ExcelValue) ‘REAL) (rtosr ExcelValue))

((= (type ExcelValue) ‘STR) (vl-string-trim ” ” ExcelValue))

((/= (type ExcelValue) ‘STR) “”)

);cond

);setq

(setq Data@ (append Data@ (list ExcelValue)))

(setq Column# (1+ Column#))

);repeat

(setq *ExcelData@ (append *ExcelData@ (list Data@)))

(setq Row# (1+ Row#))

);repeat

(vlax-invoke-method (vlax-get-property *ExcelApp% “ActiveWorkbook”) ‘Close :vlax-False)

(vlax-invoke-method *ExcelApp% ‘Quit)

(vlax-release-object *ExcelApp%)(gc)

(setq *ExcelApp% nil)

*ExcelData@

);defun GetExcel

;——————————————————————————-

; GetCell – *ExcelData@ list den hücrenin değerini getirir.

; Argümanlar: 1

;   Cell$ = Cell ID

; Örnek Yazım: (GetCell “E19”) = value of cell E19

;——————————————————————————-

(defun GetCell (Cell$ / Column# ColumnRow@ Return Row#)

(setq ColumnRow@ (ColumnRow Cell$))

(setq Column# (1- (nth 0 ColumnRow@)))

(setq Row# (1- (nth 1 ColumnRow@)))

(setq Return “”)

(if *ExcelData@

(if (and (>= (length *ExcelData@) Row#)(>= (length (nth 0 *ExcelData@)) Column#))

(setq Return (nth Column# (nth Row# *ExcelData@)))

);if

);if

Return

);defun GetCell

;——————————————————————————-

; OpenExcel – Bir Excell çalışma sayfası açar

; Argümanlar: 3

;   ExcelFile$ = Excel dosya ismi veya yeni çalışma sayfası için boşluk

;   SheetName$ = Sheet name or nil for not specified

;   Visible = t for visible or nil for hidden

;  Yazım Örnekleri:

; (OpenExcel “C:\\Temp\\Temp.xls” “Sheet2” t) = C:\Temp\Temp.xls dosyasında Sheet2 çalışma sayfası görünür olarak oturum açar

; (OpenExcel “C:\\Temp\\Temp.xls” nil nil) = Opens C:\Temp\Temp.xls dosyasında aktif çalışma sayfası gizli olarak oturum açar

; (OpenExcel nil “Parça Listesi” nil) =  Yeni bir çalışma sayfası açar ve a Parça Listesi sayfasını gizli olarak yaratır

;——————————————————————————-

(defun OpenExcel (ExcelFile$ SheetName$ Visible / Sheet$ Sheets@ Worksheet)

(if (= (type ExcelFile$) ‘STR)

(if (findfile ExcelFile$)

(setq *ExcelFile$ ExcelFile$)

(progn

(alert (strcat “Excel file ” ExcelFile$ ” bulunamadı.“))

(exit)

);progn

);if

(setq *ExcelFile$ “”)

);if

(gc)

(if (setq *ExcelApp% (vlax-get-object “Excel.Application”))

(progn

(alert “Devam etmek için, tüm Excell çalışma sayfalarını kapatın!“)

(vlax-release-object *ExcelApp%)(gc)

);progn

);if

(setq *ExcelApp% (vlax-get-or-create-object “Excel.Application”))

(if ExcelFile$

(if (findfile ExcelFile$)

(vlax-invoke-method (vlax-get-property *ExcelApp% ‘WorkBooks) ‘Open ExcelFile$)

(vlax-invoke-method (vlax-get-property *ExcelApp% ‘WorkBooks) ‘Add)

);if

(vlax-invoke-method (vlax-get-property *ExcelApp% ‘WorkBooks) ‘Add)

);if

(if Visible

(vla-put-visible *ExcelApp% :vlax-true)

);if

(if (= (type SheetName$) ‘STR)

(progn

(vlax-for Sheet$ (vlax-get-property *ExcelApp% “Sheets”)

(setq Sheets@ (append Sheets@ (list (vlax-get-property Sheet$ “Name”))))

);vlax-for

(if (member SheetName$ Sheets@)

(vlax-for Worksheet (vlax-get-property *ExcelApp% “Sheets”)

(if (= (vlax-get-property Worksheet “Name”) SheetName$)

(vlax-invoke-method Worksheet “Activate”)

);if

);vlax-for

(vlax-put-property (vlax-invoke-method (vlax-get-property *ExcelApp% “Sheets”) “Add”) “Name” SheetName$)

);if

);progn

);if

(princ)

);defun OpenExcel

;——————————————————————————-

; PutCell – Put values into Excel cells

; Argümanlar: 2

;   StartCell$ = Starting Cell ID

;   Data@ = Değer veya değerler listesi

;  Yazım Örnekleri:

; (PutCell “A1” “PARÇA NUMARASI”) = A1 hücresi içerisine PARÇA NUMARASI’nı koyar.

; (PutCell “B3” ‘(“Dim” 7.5 “9.75”)) = B3 hücresinden başlayarak sırasıyla Dim, 7.5 ve 9.75 değerlerini koyar.

;——————————————————————————-

(defun PutCell (StartCell$ Data@ / Cell$ Column# ExcelRange Row#)

(if (= (type Data@) ‘STR)

(setq Data@ (list Data@))

)

(setq ExcelRange (vlax-get-property *ExcelApp% “Cells”))

(if (Cell-p StartCell$)

(setq Column# (car (ColumnRow StartCell$))

Row# (cadr (ColumnRow StartCell$))

);setq

(if (vl-catch-all-error-p

(setq Cell$ (vl-catch-all-apply ‘vlax-get-property

(list (vlax-get-property *ExcelApp% “ActiveSheet”) “Range” StartCell$))

);setq

);vl-catch-all-error-p

(alert (strcat “The cell ID \”” StartCell$ “\” is invalid.”))

(setq Column# (vlax-get-property Cell$ “Column”)

Row# (vlax-get-property Cell$ “Row”)

);setq

);if

);if

(if (and Column# Row#)

(foreach Item Data@

(vlax-put-property ExcelRange “Item” Row# Column# (vl-princ-to-string Item))

(setq Column# (1+ Column#))

);herbiri için

);if

(princ)

);defun PutCell

;——————————————————————————-

; CloseExcel – Excel çalışma sayfalarını kapatma

; Argümanlar: 1

;   ExcelFile$ = Excel saveas filename or nil to Kaydetmeden kapatma

;  Yazım Örnekleri:

; (CloseExcel “C:\\Temp\\Temp.xls”) = C:\Temp\Temp.xls dosyasını kaydetme ve dosyayı kapatma

; (CloseExcel nil) = Kaydetmeden kapatma

;——————————————————————————-

(defun CloseExcel (ExcelFile$ / Saveas)

(if ExcelFile$

(if (= (strcase ExcelFile$) (strcase *ExcelFile$))

(if (findfile ExcelFile$)

(vlax-invoke-method (vlax-get-property *ExcelApp% “ActiveWorkbook”) “Save”)

(setq Saveas t)

);if

(if (findfile ExcelFile$)

(progn

(vl-file-delete (findfile ExcelFile$))

(setq Saveas t)

);progn

(setq Saveas t)

);if

);if

);if

(if Saveas

(vlax-invoke-method (vlax-get-property *ExcelApp% “ActiveWorkbook”)

“SaveAs” ExcelFile$ -4143 “” “” :vlax-false :vlax-false nil

);vlax-invoke-method

);if

(vlax-invoke-method (vlax-get-property *ExcelApp% “ActiveWorkbook”) ‘Close :vlax-False)

(vlax-invoke-method *ExcelApp% ‘Quit)

(vlax-release-object *ExcelApp%)(gc)

(setq *ExcelApp% nil *ExcelFile$ nil)

(princ)

);defun CloseExcel

;——————————————————————————-

; ColumnRow – Sütun ve satır numaralarının listesini getirir.

; Argümanlar: 1

;   Cell$ = Cell ID

; Örnek Yazım: (ColumnRow “ABC987”) = ‘(731 987)

;——————————————————————————-

(defun ColumnRow (Cell$ / Column$ Char$ Row#)

(setq Column$ “”)

(while (< 64 (ascii (setq Char$ (strcase (substr Cell$ 1 1)))) 91)

(setq Column$ (strcat Column$ Char$)

Cell$ (substr Cell$ 2)

);setq

);while

(if (and (/= Column$ “”) (numberp (setq Row# (read Cell$))))

(list (Alpha2Number Column$) Row#)

‘(1 1);şayet herhangi bir sorun oluşursa, ön tanımlı hücre “A1”

);if

);defun ColumnRow

;——————————————————————————-

; Alpha2Number – Karakter dizgisini Sayıya çevirme

; Argümanlar: 1

;   Str$ = String to convert

; Örnek Yazım: (Alpha2Number “ABC”) = 731

;——————————————————————————-

(defun Alpha2Number (Str$ / Num#)

(if (= 0 (setq Num# (strlen Str$)))

0

(+ (* (- (ascii (strcase (substr Str$ 1 1))) 64) (expt 26 (1- Num#)))

(Alpha2Number (substr Str$ 2))

);+

);if

);defun Alpha2Number

;——————————————————————————-

; Number2Alpha – Sayıyı Karakter dizgisine çevirme

; Argümanlar: 1

;   Num# = Çevrilecek sayı

; Örnek Yazım: (Number2Alpha 731) = “ABC”

;——————————————————————————-

(defun Number2Alpha (Num# / Val#)

(if (< Num# 27)

(chr (+ 64 Num#))

(if (= 0 (setq Val# (rem Num# 26)))

(strcat (Number2Alpha (1- (/ Num# 26))) “Z”)

(strcat (Number2Alpha (/ Num# 26)) (chr (+ 64 Val#)))

);if

);if

);defun Number2Alpha

;——————————————————————————-

; Cell-p – Cell$ argümanının geçerli bir hücre olup olmadığını belirleme

; Argümanlar: 1

;   Cell$ = karakter dizgisi belirlenecek olan hücre

;  Yazım Örnekleri: (Cell-p “B12”) = t, (Cell-p “BT”) = nil

;——————————————————————————-

(defun Cell-p (Cell$)

(and (= (type Cell$) ‘STR)

(or (= (strcase Cell$) “A1”)

(not (equal (ColumnRow Cell$) ‘(1 1)))

);or

);and

);defun Cell-p

;——————————————————————————-

; Row+n – Hücre verisinden satır numarasını belirleyerek hücre bilgisini geri göndürür.

; Argümanlar: 2

;   Cell$ = Başlangıç hücresi

;   Num# = Hücreden elde edilen satırların sayısı

;  Yazım Örnekleri: (Row+n “B12” 3) = “B15”, (Row+n “B12” -3) = “B9”

;——————————————————————————-

(defun Row+n (Cell$ Num#)

(setq Cell$ (ColumnRow Cell$))

(strcat (Number2Alpha (car Cell$)) (itoa (max 1 (+ (cadr Cell$) Num#))))

);defun Row+n

;——————————————————————————-

; Column+n – Hücre verisinden sütun numarasını belirleyerek hücre bilgisini geri göndürür.

; Argümanlar: 2

;   Cell$ = Başlangıç hücresi

;   Num# = Hücreden elde edilen sütunların sayısı

;  Yazım Örnekleri: (Column+n “B12” 3) = “E12”, (Column+n “B12” -1) = “A12”

;——————————————————————————-

(defun Column+n (Cell$ Num#)

(setq Cell$ (ColumnRow Cell$))

(strcat (Number2Alpha (max 1 (+ (car Cell$) Num#))) (itoa (cadr Cell$)))

);defun Column+n

;——————————————————————————-

; rtosr – Bir gerçek sayıyı kısa formda bir gerçek sayı dizgisine çevirmek için kullanılır.

; Sondaki tüm 0 (sıfır ların) silinmesi.

; Argümanlar: 1

;   RealNum~ = Kısa formda gerçek sayı dizisine çevrilecek olan gerçek sayı

;Geri dönüş: Gerçek sayının ShortReal$ değişkenine kaydedilen kısa formdaki gerçek sayı dizgisi.

;——————————————————————————-

(defun rtosr (RealNum~ / DimZin# ShortReal$)

(setq DimZin# (getvar “DIMZIN”))

(setvar “DIMZIN” 8)

(setq ShortReal$ (rtos RealNum~ 2 8))

(setvar “DIMZIN” DimZin#)

ShortReal$

);defun rtosr

;——————————————————————————-

(princ);End of GetExcel.lsp

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Açıklama Görünüşleri Hakkında

Revit’te bir modelin belirli bir parçasının büyütülmüş görüntüsüne daha yakından bakabilirsiniz. Bir plana, kesite, detaya …

2 yorumlar

  1. GetExcel.lsp kullanımıyla ilgili detaylı bilgi verirmisiniz

Bir cevap yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Yardıma mı ihtiyacınız var? Chat with us
Bir görüşme başlatmak için lütfen önce gizlilik politikamızı kabul edin.