| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Daten in Excel-Zellen schreiben (1229 mal gelesen)
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 26. Sep. 2008 16:15 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich hab ein Programm daß mir Daten (aus einer Massenermittlung) in Excel reinschreibt. Initialisieren tu ich damit: (if (setq excel (vlax-get-object "excel.application")) (progn (setq excelworkbook (if excel (vlax-get-property excel "ActiveWorkbook" ) ) excelsheet (if excelworkbook (vlax-get-property excelworkbook "ACTIVESHEET" ) ) excelcells (if excelsheet (vlax-get-property excelsheet "CELLS" ) ) ) ) (alert "Excel nicht gefunden") ) Und schreiben tu ich damit (in zwei verschachtelten Foreach-Schleifen): (vlax-put-property excelcells "ITEM" zeile spalte data) Und jetzt kommts: Das Ganze geht nicht besonders schnell, aber wenn ich bei dem Vertikalen Scrollbalken in Excel unten auf den Pfeil klicke und halte gibt das Ding richtig Gas und ist schätzungsweise 10 mal schneller. Ich kan ja im Excel zusehen wie die Zellen Ausgefüllt werden. Ist doch verrückt oder ? Fühlt sich so an als würde das an Excel liegen. Wartet Excel da auf irgendwas ? Will mich Excel ärgern ? Ich möchte ja nur daß es von alleine schnell geht. Kann man das irgendwie beschleunigen ohne im Excel auf den Scrollbalken klicken zu müssen ? Oder verwende ich eine "langsame" Funktion ? Danke Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 26. Sep. 2008 16:34 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
|
Ex-Mitglied | |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 27. Sep. 2008 13:44 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
Zitat: Original erstellt von Rabbit 007: Hallo Hier in dem Beitrag waren mal jede Menge Infos von mir drin, jetzt steht bei mir zumindest immer Ex-Mitglied vielleicht kann das ja ein Moderator wieder hinbekommen.
Als Moderator hat mein keinen Zugriff auf Server, Datenbanken ect .. da mußt du dich an einen Administrator (AndreasK oder Albert) wenden. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 28. Sep. 2008 15:31 <-- editieren / zitieren --> Unities abgeben:
Hi Rabbit 007, hab ich schon gesehen daß da "Ex-Mitglied" steht . Den Rest hab ich auch schon durch. Aber das mit den Arrays werd ich mir mal reintun. Wenn ich ne Frage hab meld ich mich. Danke erstmal Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 29. Sep. 2008 10:54 <-- editieren / zitieren --> Unities abgeben:
@Rabbit007 ich bekomme die Meldung: ; Fehler: no function definition: C:SPALTE-NACH-EXCEL bzw. ; Fehler: no function definition: SPALTE-NACH-EXCEL wenn ichs ohne c: versuche. Ich glaub da stimmt was nicht . Ich hab auch noch einige Fragen zu Arrays. Wie bau ich mir ein Array mit den Werten die ich nach Excel übertragen möchte? Welchem Excel-Objekt übergebe ich das Array ? Wie übergebe ich das Array ? Und wenn ich noch eine Frage vergessen hab, weil ich davon noch keine Ahnung hab, brauche ich die Antwort darauf natürlich auch Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 29. Sep. 2008 11:57 <-- editieren / zitieren --> Unities abgeben:
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 29. Sep. 2008 12:14 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
Hi, ist zwar word aber schau dir mal die C:\Programme\AutoCAD????\Sample\VisualLISP\typelib.lsp ...sofern vorhanden vllt. hilft es (fand es für das Verständnis recht anschaulich) hab sowas auch mal für Excel gesehen... nur wo??? mfg Heiko Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 29. Sep. 2008 14:28 <-- editieren / zitieren --> Unities abgeben:
So - ein Array kann ich erstellen und mit Werten füllen. Aber wo schicke ich das jetzt hin daß das in Excel erscheint ? Und wie schicke ich das da hin ? Und wie muß das Array denn aussehen ? Einfach nur ein Array aus Strings ? Oder muß ich da noch was konvertieren ? Ich würd ja selbst danach suchen, aber ich weis nicht wo. Danke Andreas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 29. Sep. 2008 14:46 <-- editieren / zitieren --> Unities abgeben:
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 29. Sep. 2008 14:50 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
|
Ex-Mitglied | |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 29. Sep. 2008 16:52 <-- editieren / zitieren --> Unities abgeben:
mensch Dorfy, das ist der Knaller !!! Diese zwei Zeilen sinds: (setq rngobj (vlax-get-property excelsheet 'range range_size)) (vlax-put-property rngobj 'value2 matrix) Die Geschwindigkeit hat sich von Minuten auf Sekunden geändert (Testlauf). Genau kann ichs noch nicht sagen, ich muß das erst mal fertigschreiben. Ich hab leider nur 10Us. Danke auch an Rabbit 007, aber Dorfy war schneller. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 30. Sep. 2008 08:18 <-- editieren / zitieren --> Unities abgeben:
Ist schon fertig. Hab schon gemerkt daß vlax-safearray-fill nur Lust hat wenn Liste und Array zusammenpassen. Bin grade noch dabei den Range auf das Array passend zu machen und dann sollte das doch laufen. Das komplette Tool ist eigentlich eine Schnittstelle zwischen ACAD und Excel. Blöcke mit Attributen, Multilinien, Polylinien, Texte, MTexte mit Layer und allem drum und dran, und natürlich meine eigenen EEDs in Excel übertragen und, bei Änderungen, auch wieder zurück ins ACAD. Wird also öfters für die unterschiedlichsten Pläne gebraucht. Deshalb hat ja auch die Geschwindigkeit so genervt. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 30. Sep. 2008 09:50 <-- editieren / zitieren --> Unities abgeben:
Auch Morgen, Ich weis ja wie groß das Array ist (ich habs ja selbst gemacht). Der Bereich für den Range muß ja genau so groß sein. Da ich meine Daten in Excel immer an der selben Stelle starten lasse brauche ich nur das Ende zu ermitteln. Sieht bei mir im Moment noch etwas "aufgebläht" aus, ich werd die Ermittlung der Spaltenbezeichnung noch durch eine Funktion ersetzen, aber erst mal muß es funktionieren Kosmetik kommt dann noch. (setq rngobj (vlax-get-property excelsheet 'range (strcat "A2:" (nth (1- (vlax-safearray-get-u-bound excel_array 2)) '("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "AA" "AB" "AC" "AD" "AE" "AF" "AG" "AH" "AI" "AJ" "AK" "AL" "AM" "AN" "AO" "AP" "AQ" "AR" "AS" "AT" "AU" "AV" "AW" "AX" "AY" "AZ" "BA" "BA" "BC" "BD" "BE" "BF" "BG" "BH" "BI" "BJ" "BK" "BL" "BM" "BN" "BO" "BP" "BQ" "BR" "BS" "BT" "BU" "BV" "BW" "BX" "BY" "BZ" "CA" "CB" "CC" "CD" "CE" "CF" "CG" "CH" "CI" "CJ" "CK" "CL" "CM" "CN" "CO" "CP" "CQ" "CR" "CS" "CT" "CU" "CV" "CW" "CX" "CY" "CZ" "DA" "DB" "DC" "DD" "DE" "DF" "DG" "DH" "DI" "DJ" "DK" "DL" "DM" "DN" "DO" "DP" "DQ" "DR" "DS" "DT" "DU" "DV" "DW" "DX" "DY" "DZ" "EA" "EB" "EC" "ED" "EE" "EF" "EG" "EH" "EI" "EJ" "EK" "EL" "EM" "EN" "EO" "EP" "EQ" "ER" "ES" "ET" "EU" "EV" "EW" "EX" "EY" "EZ" "FA" "FB" "FC" "FD" "FE" "FF" "FG" "FH" "FI" "FJ" "FK" "FL" "FM" "FN" "FO" "FP" "FQ" "FR" "FS" "FT" "FU" "FV" "FW" "FX" "FY" "FZ" "GA" "GB" "GC" "GD" "GE" "GF" "GG" "GH" "GI" "GJ" "GK" "GL" "GM" "GN" "GO" "GP" "GQ" "GR" "GS" "GT" "GU" "GV" "GW" "GX" "GY" "GZ" "HA" "HB" "HC" "HD" "HE" "HF" "HG" "HH" "HI" "HJ" "HK" "HL" "HM" "HN" "HO" "HP" "HQ" "HR" "HS" "HT" "HU" "HV" "HW" "HX" "HY" "HZ" "IA" "IB" "IC" "ID" "IE" "IF" "IG" "IH" "II" "IJ" "IK" "IL" "IM" "IN" "IO" "IP" "IQ" "IR" "IS" "IT" "IU" "IV" ) ) (itoa (1+ (vlax-safearray-get-u-bound excel_array 1))) ) ) )
Funktioniert einwandfrei, muß nur noch hübsch gemacht werden .
Gruß Andreas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 30. Sep. 2008 10:11 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 30. Sep. 2008 10:19 <-- editieren / zitieren --> Unities abgeben:
Klar Hatte heute morgen mein Hirn noch nicht hochgefahren . Ich hatte das auch schon mal, finds aber auch net ... Gruß Andreas [Diese Nachricht wurde von Andreas Kraus am 30. Sep. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 30. Sep. 2008 10:23 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 30. Sep. 2008 10:23 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
jaja ... probiert es mit sowas: (setq SPALTE 35) (setq SPALTE (if(>(/ SPALTE 26)0) (strcat (chr(+(/ SPALTE 26) 64)) (chr(+(rem SPALTE 26) 64)) ) (chr(+(rem SPALTE 26)64)) ) ) versteh nicht, was es da zu suchen oder zu finden gibt .. ok .. es sei denn , man gehört zur Copy&Paste-Fraktion ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 30. Sep. 2008 11:24 <-- editieren / zitieren --> Unities abgeben:
@CADmium so funktionierts auch mit Spaltennummern die durch 26 teilbar sind: (setq spalte 27) (setq spalte (if (> (/ spalte 27) 0) (strcat (chr (+ (/ spalte 26) 64)) (chr (+ (rem spalte 26) 64)) ) (chr (+ (rem spalte 27) 64)) ) ) Gruß Andreas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 30. Sep. 2008 11:28 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
|
Ex-Mitglied | |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 30. Sep. 2008 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
Anmerkung : prinzipiell bei Bereichs-Tests: statt (and (>= SPALTE 1) (<= SPALTE 256)) besser (<= 1 SPALTE 256) und wenn einen Test, dann ist vorher auch (=(type SPALTE)'INT) sinvoll... ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |