Citaat van: dicamillo op do 09 03 2006, 21:28:08
Hey iedereen,
Ik ben ind ingenieur bouwkunde in opleiding en heb een probleempje waar vast en zeker een oplossing voor bestaat. Ik heb in Excel 1 kolom met getallen die op de x-as moeten komen, en 1 kolom met getallen die op de y-as moeten komen. Bestaat er enige oplossing om die gegevens automatisch door CAD te laten tekenen in een grafiek (in lijn vorm, want ik moet de oppervlakte onder die grafiek bepalen)? Heb al geprobeerd met Cadtool maar wil niet lukken.
Alvast enorm bedankt !!!!!!!
Beste Dicamillo,
In de dikke pillen van ir. R. Boeklagen van het CAD College TEC in
Nijmegen stond vroeger een hoofdstuk over ActiveX in Visual LISP voor "Koppeling met Office".
Zie ook http://www.cadcollege.nl/boeken/ voor:
AutoCAD 2002 Comuter ondersteund ontwerpen ISBN 90-72487-29-x
AutoCAD 2004 Comuter ondersteund ontwerpen ISBN 90-72487-37-0
AutoCAD 2005 Comuter ondersteund ontwerpen ISBN 90-72487-41-9.
In het boek voor AutoCAD 2006 staat het hoofdstuk over ActiveX in Visual LISP
voor "Koppeling met Office" er niet meer in.
In het genoemde hoofdstuk wordt gedemonstreerd de koppeling met office aan
de hand van 'Het geheim van de Smid'
Het programma wordt dan zoiets als onderstaand.
(Dat hij daarbij voor
elk lijnsegment het startpunt expliciet aangeeft, is waarschijnlijk
een didactische keuze)
Kijk ook eens op: http://www.atablex.com/htmls/excel-bible.htm
Groetjes HofCAD CSI.
Maak in Excel het bestand C:\temp\smid.xls met
daarin op Tabblad 'Blad1' de onderstaande waarden:
120 120 200 120
200 120 200 240
200 240 120 240
120 240 120 120
120 120 200 240
200 240 160 300
160 300 120 240
120 240 200 120
Maak in Notepad het bestand C:\temp\smid.lsp met
daarin:
(defun C:Smid()
(defun ExcelKoppel ()
;Procedure voor het koppelen van Excel
(if (not (setq Excel (vlax-get-object "Excel.Application")))
(setq Excel (vlax-create-object "Excel.Application"))
)
(vlax-put-property Excel 'Visible :vlax-true)
)
(defun ExcelOpen (Bestand / ExcelBestanden)
;Procedure voor het openen van een Excelbestand
(setq ExcelBestanden (vlax-get-property Excel 'Workbooks))
(setq ExcelBestand
(vlax-invoke-method ExcelBestanden 'Open Bestand)
)
)
(defun ExcelLees (Tabblad Rij Kolom / Bladen Blad Velden Veld Waarde)
;Procedure voor het lezen van een Celwaarde
(setq Bladen (vlax-get-property ExcelBestand 'worksheets))
(setq Blad (vlax-get-property Bladen 'item Tabblad))
(setq Velden (vlax-get-property Blad 'Cells))
(setq Veld (vlax-get-property Velden 'item Rij Kolom))
(setq Waarde (vlax-variant-value Veld))
(setq Waarde (vlax-get-property Waarde 'Value))
(setq Waarde (vlax-variant-value Waarde))
)
(defun Excel_Lijnen (Space tabblad RijStart KolomStart regels / i)
;Procedure voor het tekenen van het huisje
(setq i 1)
(while (<= i regels)
(TekLijn Space
(ExcelLees tabblad (+ RijStart i) (+ KolomStart 1))
(ExcelLees tabblad (+ RijStart i) (+ KolomStart 2))
(ExcelLees tabblad (+ RijStart i) (+ KolomStart 3))
(ExcelLees tabblad (+ RijStart i) (+ KolomStart 4))
)
(setq i (+ i 1))
)
)
(defun TekLijn (Space X1 Y1 X2 Y2 / Punt1 Punt2)
;Procedure voor het tekenen van een lijn
(setq Punt1 (vlax-3d-point (list X1 Y1 0)))
(setq Punt2 (vlax-3d-point (list X2 Y2 0)))
(vla-AddLine Space Punt1 Punt2)
)
;;;******Begin van het programma**********************************
(setq Tabblad "Blad1"
Bestandsnaam "smid"
Bestand (strcat bestandsnaam ".xls")
DirBestand "c:\\temp\\"
DirEXCEL "c:\\progra~1\\micros~1\\office\\"
;; Of bijvoorbeeld DirEXCEL "c:\\Microsoft Office\\Office\\"
)
(if (car (atoms-family 1 '("vl-load-com")))
(vl-load-com)
)
(setq AutoCAD (vlax-get-acad-object))
(setq Pref (vla-get-Preferences AutoCAD))
(setq Screen (vla-get-Display Pref))
(setq Doc (vla-get-ActiveDocument AutoCAD))
(setq MS (vla-get-ModelSpace Doc))
(setq ~cmd (getvar "CMDECHO")
~osm (getvar "OSMODE")
)
(mapcar 'setvar
'("CMDECHO" "OSMODE" "LIMMIN" "LIMMAX" "LIMCHECK")
'(0 0 (0 0) (420 297) 0))
(vla-ZoomAll AutoCAD)
(if (findfile (strcat DirBestand Bestand))
(progn
(ExcelKoppel)
(ExcelOpen (strcat DirBestand Bestand))
(princ
(strcat "\nTekening in AutoCAD is klaar.\n"
"Verander in Excel de waarden en run het programma opnieuw"))
(Excel_Lijnen MS tabblad 0 0 8 )
)
(princ (strcat DirBestand Bestand " niet gevonden.") )
)
(mapcar 'setvar
'("CMDECHO" "OSMODE") (list ~cmd ~osm))
(princ)
)