| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Daten nach Excel exportieren (2575 mal gelesen)
|
gerd3012 Mitglied Planung Haustechnik
Beiträge: 111 Registriert: 24.07.2002
|
erstellt am: 04. Sep. 2002 09:15 <-- editieren / zitieren --> Unities abgeben:
hallo, ich bin auf der Suche nach einer Lisp-Routine, mit der es möglich ist, verschieden Daten nach Excel zu exportieren. Die zu exportierenden Daten kann ich schon durch eine von mir programmierte Lisp-Applikation in eine csv-Datei schreiben. Ich suche jetzt nach einer Möglichkeit, die Daten direkt in eine Excel-Tabelle zu schreiben. Mit der Option, Felder, Spalten, Zeilen usw formatieren zu können, neue Arbeitsblätter anzulegen usw. Gibt es vielleicht ein Programm, das entsprechende Funktionen bereitstellt ? Kann mir da jemand helfen ? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 04. Sep. 2002 10:06 <-- editieren / zitieren --> Unities abgeben: Nur für gerd3012
Hallo Gerd, wenn du die Daten bereits in eine Datei von LISP aus schreibst, dann würde ich an Deiner Stelle folgenden Weg gehen: - Die Daten immer in gleiche csv-Datei(en) schreiben - mittels Makro-Recorder in Excel ein Macro erzeugen, welches die Daten einliest und die Tabelle formatiert. - Excel-Datei unter anderem Namen speichern Das ist meines erachtens der Weg, der am schnellsten zum Ziel führt, und auch recht gut zu bedienen ist. Grüße Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mallorca7 Mitglied Konstrukteur
Beiträge: 165 Registriert: 07.05.2002 Windows 7 Autocad Mechanical 2011
|
erstellt am: 04. Sep. 2002 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für gerd3012
Hi Gerd, mit VBA funktioniert das eigentlich ganz toll, vor allem weil im VBA in Autocad einfach auf Excel zugreifen kann. (Range, Cells ...) Im Verzeichnis von ACAD2000 unter Sample/VBA gibt es ein Beispiel, das sich excellink.dvb nennt. lg Fred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 04. Sep. 2002 12:44 <-- editieren / zitieren --> Unities abgeben: Nur für gerd3012
|
mallorca7 Mitglied Konstrukteur
Beiträge: 165 Registriert: 07.05.2002 Windows 7 Autocad Mechanical 2011
|
erstellt am: 04. Sep. 2002 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für gerd3012
Hi nochmal, anbei ein kleines Beispielprogramm leider eben in VBA wie man Daten nach Excel rüberbringt. Funkt mit Excel2000, ausprobiert mit Acad 2000. Bei einer anderen Excelversion bitte die Nummer ändern (9 ändern in 7,8,10,...) Das Programm schreibt den Dateinamen in A1 Die Layernamen in A2,A3... Gruß Fred Beispielprogramm: Public ExcelVer As Integer Public ExcelServer As Object Sub ExcelConnect() Dim DrawingTest As AcadApplication Set DrawingTest = ThisDrawing.Application ExcelVer = 0 Err.Clear Rem Hier die Version eintragen 7 (97) ,8 (98) ,9 (2000),10(xp) Hoffe das stimmt! Rem Hier wurde Excel 2000 verwendet Set ExcelServer = CreateObject("Excel.Application.9") If Err.Number = 0 Then ExcelVer = 9 End If ExcelServer.WindowState = -4140 ExcelServer.Visible = True Dim objWorksheet As Object, objWorkbook As Object Set objWorkbook = ExcelServer.Workbooks.Add Set objWorksheet = objWorkbook.Sheets(1) Rem schreibt den Zeichnungsnamen in das ExcelSheet objWorksheet.Cells(1, 1).Value = DrawingTest.ActiveDocument.FullName Rem Das programm schreibt alle Layer in die ExcelTabelle For i = 0 To DrawingTest.ActiveDocument.Layers.Count - 1 objWorksheet.Cells(2 + i, 1).Value = DrawingTest.ActiveDocument.Layers.Item(i).Name Next i End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerd3012 Mitglied Planung Haustechnik
Beiträge: 111 Registriert: 24.07.2002
|
erstellt am: 04. Sep. 2002 13:17 <-- editieren / zitieren --> Unities abgeben:
@mallorca7 das klappt ja ganz toll mit den Layern, aber leider habe ich keine ahnung, wie ich die routine mit vba erstellen oder erweitern soll. ich kenn mich ganz gut mit lisp aus, vba ist mir gänzlich unbekannt. ich habe im moment auch nicht die zeit, mich damit zu beschäftigen. optimal wäre schon eine lisp-routine. danke soweit Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mallorca7 Mitglied Konstrukteur
Beiträge: 165 Registriert: 07.05.2002 Windows 7 Autocad Mechanical 2011
|
erstellt am: 05. Sep. 2002 09:56 <-- editieren / zitieren --> Unities abgeben: Nur für gerd3012
Hi nochmal, dann kombiniere doch lisp mit vba! Ich habe mein obiges Makro umgeschreiben, sodaß 2 Subs vorhanden sind. Das 1. startet Excel, das 2. fügt einen Wert in Excel ein nach Zeilen und spalten. Zuerst rufst du in deinem Lisp-Program das Vba-makro auf, daß Excel startet: (command "-vbarun" "ExcelConnect") Dadurch wird nur Excel und ein Arbeitsblatt geöffnet. Zum übergeben von Werten rufst dann in deiner Lisp-Routine folgende zeile auf: (command "-VBARUN" "NachExcel" Variable Zeile Spalte) Anbei lege noch das VBA-Makro und ein Beispiel in Lisp bei, wo du das nochmal verfolgen kannst. Voraussetzung: das vba-makro muß natürlich geladen sein, wenn du es in lisp aufrufst! liebe grüsse Fred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerd3012 Mitglied Planung Haustechnik
Beiträge: 111 Registriert: 24.07.2002
|
erstellt am: 05. Sep. 2002 12:36 <-- editieren / zitieren --> Unities abgeben:
hallo fred, das programm läuft super. Ist es sehr aufwendig, noch Anweisungen einzubauen, mit denen Zellen formatiert werden ? z.B. als Text, Zahl, Fett usw.? kann man evt. neue Arbeitsblätter erzeugen ? Wäre schön, das auch durch Lisp steuern zu können. Ich hoffe, ich mache Dir nicht allzu viele Umstände. bis dann gerd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mallorca7 Mitglied Konstrukteur
Beiträge: 165 Registriert: 07.05.2002 Windows 7 Autocad Mechanical 2011
|
erstellt am: 06. Sep. 2002 11:00 <-- editieren / zitieren --> Unities abgeben: Nur für gerd3012
Hi Gerd, ich habe mein vba-Prgramm nun etwas erweitert. Es sollt nun für Excel 97,98,2000,xp funktionieren. Mit (command "-vbarun" "ExcelConnect") startest Du das ExcelProgramm. Mit (command "-vbarun" "NeueDatei") wird ein neues Excelsheet angelegt. Mit (command "-vbarun" "VorhandeneDatei" "c:/temp/test.xls") wird die vorhandene Exceldatei test.xls im Verzeichnis c:\temp geöffnet. Leider mußt Du für den Verzeichnistrennstrich ein "/" eingeben und nicht "\". Falls die Datei nicht gefunden wird, wird ein neues Excelsheet geöffnet. Mit (command "-vbarun" "NachExcel" Variable Zeile Spalte) schreibst Du deine LispWerte nach Excel, wie gehabt. Mit (command "-vbarun" "NeueFonts" Zeile Spalte Textstilname Fontstil Schriftgröße Farbe)kann der Text verändert werden. (siehe Beispiel) Mit (command "-vbarun" "NeueFarbe" Zeile Spalte Rot Grün Blau Pattern PatternColorIndex) kann die Farbe und die Füllung der zelle eingestellt werden. Die Farbe mußt Du in Rot,Grün,Blau eingeben mit Werten jeweils von 0..255 Für das Raster verwendest Du die vordefinierten Variablen xlPattern.... Für den Rasterfarbenindex gibt es Farben von 1..56 Mit (command "-vbarun" "Rahmen" Zeile Spalte linientyp liniendicke rot grün blau) kannst Du den Rahmen in einer Zelle einstellen (Rechteckrahmen) Mit (command "-vbarun" "Rahmenlinie" Zeile Spalte linienort linientyp liniendicke rot grün blau) kannst du eine einzelne Linie setzen. linienort ist: xlEdgeLeft, xlEdgeRight,xlEdgeBottom, xlEdgeTop linientyp ist: xlContinuos, xlDashDot, xlDot .... liniendicke ist: xlHairline, xlThin, xlMedium, xlThick Die Farbe wieder mit rot, grün und blau Anteil Am besten ist es aber ein bestehendes Excelsheet zu verwenden oder zu basteln mit der jweiligen Formatierung und nur die Werte über das Lispprogramm einspielen zu lassen. Ich hoffe das hilft dir vorerst einmal weiter, liebe grüsse Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerd3012 Mitglied Planung Haustechnik
Beiträge: 111 Registriert: 24.07.2002
|
erstellt am: 06. Sep. 2002 11:48 <-- editieren / zitieren --> Unities abgeben:
!! KLASSE !! schreibst du noch weiter ? ist es möglich, Befehle für "neue Datei", "neue Arbeitsblätter" einzuarbeiten ? evt. mit Parameterübergabe für Dateiname und/oder Arbeitsblattname ? ansonsten schonmal herzlichsten Dank gerd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mallorca7 Mitglied Konstrukteur
Beiträge: 165 Registriert: 07.05.2002 Windows 7 Autocad Mechanical 2011
|
erstellt am: 09. Sep. 2002 14:10 <-- editieren / zitieren --> Unities abgeben: Nur für gerd3012
Hi, anbei ein paar neue Funktionen für den Transport nach Excel: (command "-vbarun" "NeueDatei" "c:/temp/test.xls") kann nun den Dateinamen übergeben (command "-vbarun" "VorhandeneDatei" "c:/temp/test.xls") öffnet die vorhandene Datei (command "-vbarun" "DNeueDAtei" "c:/temp/test.xls") öffnet eine neue Datei durch Auswahl im Fileopen Dialogfenster von Excel, die Parameterübergabe funktioniert noch nicht richtig. (command "-vbarun" "DVorhandeneDatei" "C:/temp/test.xls") soll die vorhandene Datei öffnen, zeigt aber sicherheitshalber den Excel Datei öffnen Dialog an, funktioniert noch nicht,weiß noch nicht warum. (command "-vbarun" "NeuesBlatt" "Blattnamen") erstellt einen neues Arbeitsblatt und gibt ihm einen Namen (command "-vbarun" "ZFormat" Zeile Spalte "@") gibt der Zelle ein Format, @ .. Text, 0.00 Zahl, d/ mmm/ yy ist das Datum Ich bin allerdings noch in der Testphase, kann sein, daß noch nicht alles so funktioniert, vor allem das Abfangen von Fehlern gehört noch integriert. Weiß nicht ob ich die Übergabe der Dateinamen richtig verstanden habe, muß allerdings noch ein bißchen Hand anlegen für den Feinschliff. Anbei wieder das aktuelle vba-makros mit den lisp-Beispielen, lg Fred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mallorca7 Mitglied Konstrukteur
Beiträge: 165 Registriert: 07.05.2002 Windows 7 Autocad Mechanical 2011
|
erstellt am: 09. Sep. 2002 14:32 <-- editieren / zitieren --> Unities abgeben: Nur für gerd3012
|
mallorca7 Mitglied Konstrukteur
Beiträge: 165 Registriert: 07.05.2002 Windows 7 Autocad Mechanical 2011
|
erstellt am: 10. Sep. 2002 09:54 <-- editieren / zitieren --> Unities abgeben: Nur für gerd3012
Hi, so jetzt sollte eigentlich alles funtionieren. Ich habe noch erweitert, daß man Excel schliessen kann: (command "-vbarun" "Schliessen") Eine weitere wichtige Funktion ist Von Excel, damit kann von Excel Werte zu Autocad übertragen: (command "-vbarun" "VonExcel" Zeile Spalte) Der Wert wird in der Systemvariable Users1 abgelegt. In Lisp holt man sich den Wert dann über (setq Variable (getvar "Users1")) So das müßte es dann so weit eigentlich sein. liebe grüsse fred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerd3012 Mitglied Planung Haustechnik
Beiträge: 111 Registriert: 24.07.2002
|
erstellt am: 19. Sep. 2002 10:15 <-- editieren / zitieren --> Unities abgeben:
hallo mallorca7, ich hatte in den letzten Tagen ziemlich viel stress und bin ganz darüber hinweg gekommen, mich bei noch einmal zu bedanken. Deine Routine ist KLASSE !! In Teilen hab ich Sie schon implementiert, nur habe ich mein Programm leider noch nicht nicht weiter schreiben können. Also nochmal danke. bis dann gerd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerd3012 Mitglied Planung Haustechnik
Beiträge: 111 Registriert: 24.07.2002 Architecture 2024, MEP 2024, Windows 10, Linear, CATS, Revit MEP 2022
|
erstellt am: 17. Okt. 2002 09:55 <-- editieren / zitieren --> Unities abgeben:
hallo @mallorca7 ich hätte noch mal eine Frage zu VB. Ist es möglich, da ich ja immer noch keine Ahnung von VB habe, Dialogboxen in VB zu erstellen, und die Ein- und Ausgaben mit Autolisp zu verknüpfen ? Is nur so ne Idee, da die Erstellung von Dialogen doch wesentlich einfacher ist. Oder ist der Aufwand viel zu hoch ? danke schonmal
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mallorca7 Mitglied Konstrukteur
Beiträge: 165 Registriert: 07.05.2002 Windows 7 Autocad Mechanical 2011
|
erstellt am: 28. Okt. 2002 11:01 <-- editieren / zitieren --> Unities abgeben: Nur für gerd3012
Hi gerd, leider ich habe erst jetzt Zeit zu antworten, mußte zuvor noch schnell eine Halle zeichnen mit x-steel, habe dabei wieder mal ein Wochenende durchgearbeitet, nur weil ein "Manager" wieder mal draufkommt daß er übermorgen Pläne braucht. Aber nun zur Sache: Natürlich kannst Du Dialogboxen in VBA erstellen. Die Ein- und Ausgaben können in Lisp weitergeführt werden, wie Du es ja bereits mit den Befehlen oben gemacht hast. Aber vielleicht gibst du mir noch konkrete Hinweise, dann kann ich das ins VBA-Makro einarbeiten. lg Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerd3012 Mitglied Planung Haustechnik
Beiträge: 111 Registriert: 24.07.2002
|
erstellt am: 28. Okt. 2002 11:17 <-- editieren / zitieren --> Unities abgeben:
hallo fred, meine frage war eher allgemeiner natur. ich habe mich mal wieder mit einer Dialogbox gequält und habe mir das Programm ObjectDCL angesehen (macht nen klasse eindruck). Da kam mir die Idee, sowas evt. durch VB zu erledigen. So in der Art, dass diverse Eingaben pauschal auszuwerten sind, wie z.B. Edit-, Listboxen usw. Also Eingabe in VB-Dialog, Übergabe der Eingabe nach Lisp, Auswertung in Lisp und Übergabe in den Dialog. Wahrscheinlich viel zu aufwendig ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mallorca7 Mitglied Konstrukteur
Beiträge: 165 Registriert: 07.05.2002 Windows 7 Autocad Mechanical 2011
|
erstellt am: 28. Okt. 2002 15:33 <-- editieren / zitieren --> Unities abgeben: Nur für gerd3012
Hi Gerd, weiß nicht ob ich dich richtig verstanden habe. Anbei ein vba und lisp makro, beide laden und lisp makro ausführen (test). Das Textfeld im Dialog wird abgefragt und je nach Ergebnis in Lisp geändert, danach wird wird wieder Dialog in vba aufgrufen mit dem abgeänderten Text. Auf diese Weise geht es natürlich mit allen Steuerelementen. Aber war das was Du Dir gedacht hattest? liebe grüsse manfred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |