Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Excel, verwendeter Bereich (zur Information)

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Excel, verwendeter Bereich (zur Information) (1449 mal gelesen)
Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 26. Apr. 2013 10:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,
Ich hab was rausgefunden.
Vielleicht brauchts ja jemand.
Für die direkte Kommunikation mit Excel ist folgendes hier im Forum zu finden (nur mal das woraufs ankommt)

;Initialisieren
(setq excel (vlax-get-object "Excel.Application"))
(setq excelworkbook (vlax-get-property excel "Activeworkbook"))
(setq excelsheet (vlax-get-property excelworkbook "Activesheet"))

Und jetzt gleich zum Problem:
Wenn ich das hier verwende um den verwendeten Bereich auszulesen

(vlax-variant-value
  (vlax-get-property
    (vlax-get-property excelsheet "UsedRange")
    "VALUE"
  )
)

funzt das einwandfrei wenn im Excel in mehr als einer Zelle etwas drinsteht.
Aber wenn NUR EINE ZELLE einen Inhalt hat (ich schreib mal eine Überschrift in A1) dann bekomme ich kein Safearray (das ich auswerten kann) sondern einen String mit dem Zelleninhalt.
Und zwar egal wo diese Zelle ist.
Und wenn ich dann das Safearray auswerten will, bekomme ich eine Fehlermeldung.
Also wenn ich in H50 was reinschreibe bekomme ich den Inhalt von H50 geliefert, aber weis nichts über den verwendeten Bereich.

Wenn ich aber, je nach dem was ich brauche, folgendes auslese, klappt das.
Ich hab jedenfalls noch keinen Fall gehabt bei dem es nicht ging.

(setq startzeile
      (vlax-get-property
(vlax-get-property
  (vlax-get-property excelsheet "UsedRange")
  "ROWS"
)
"Row"
      )
)

(setq zeilen (vlax-get-property
      (vlax-get-property
(vlax-get-property excelsheet "UsedRange")
"ROWS"
      )
      "COUNT"
    )
)

(setq startspalte
      (vlax-get-property
(vlax-get-property
  (vlax-get-property excelsheet "UsedRange")
  "Columns"
)
"COLUMN"
      )
)

(setq spalten (vlax-get-property
(vlax-get-property
  (vlax-get-property excelsheet "UsedRange")
  "Columns"
)
"COUNT"
      )
)

Aus den Werten kann man dann berechnen was man braucht.
Viel Spass damit.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Comos User
Mitglied



Sehen Sie sich das Profil von Comos User an!   Senden Sie eine Private Message an Comos User  Schreiben Sie einen Gästebucheintrag für Comos User

Beiträge: 112
Registriert: 23.03.2010

erstellt am: 26. Apr. 2013 14:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

Hallo Klaus,

ich kenne mich zwar wenig mit Lisp dafür aber sehr gut mit EXCEL aus.

1. Der UsedRange eines Excel(WorkSheets) ist, wie der Name vermuten läßt, der belegte Bereich. Definiert als der keinste zusammenhängende Bereich welcher alle Zellen enthällt welche nicht leer (Empty) sind.

2. Der Value eine Bereiches ist ein (in der Regel) zweidimensionales Array mit den Werten der einzelnen Zellen. Dabei gibr es zwei Besonderheiten. Wenn der Bereich nur eine Spalte enthällt ist das array eindimensional, wenn der Bereich nur eine Zelle enthällt wird kein Array geliefert, sondern nur der Inhalt (der Zelle) als Variant.

3. Aus dem Array kann man in keinem Fall die 'Lage' des zugehörigen Bereichs ermitteln, sondern nur dessen Größe. Nur wenn A1 belegt ist kommt man über die Dimensionen des Array's an das Ende des Bereichs.

4. Mit der Funktion Address erhällt man Größe und Lage des Bereichs als String, die Funktion verarbeitet mehrere optionale Parameter, mit denen man die Ausgabe steuern kann (Z1S1/A1; realtiv/absolut; externe Bezüge; usw). Mit Regex (keine Ahnung ob und wie das in Lisp geht) kann man dann die interessierenden Werte in einem Rutsch ermitteln.

5. Die Properties Row und Column kann man an jedem Range abfragen, man erhällt die jeweils erste Zeile/Spalte.
also:

Code:
(setq startspalte
      (vlax-get-property
(vlax-get-property
  )
"COLUMN"
      )
)
sollte besser sein (weil kürzer)

Viel Spass noch beim Lispeln mit EXCEL
Gruß
Peter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 26. Apr. 2013 20:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Peter,
diesen Codeschnipsel mit "VALUE" hab ich hier nur rengeschrieben weil der in den anderen Beitägen über dieses Thema hier im Forum verwendet wurde.

Die Erklärung zu "UsedRange" hatte ich bis jetzt noch nicht so gelesen (keine Ahnung warum)

Danke, die ist gut. Jetzt weis ich auch warum das vorher nicht so gut ging.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Meldin
Mitglied



Sehen Sie sich das Profil von Meldin an!   Senden Sie eine Private Message an Meldin  Schreiben Sie einen Gästebucheintrag für Meldin

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 27. Apr. 2013 10:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

Hallo Andreas,
Zitat:
Also wenn ich in H50 was reinschreibe bekomme ich den Inhalt von H50 geliefert, aber weis nichts über den verwendeten Bereich. 

Doch natürlich du musst ihn nur einmal prüfen mit vlax-variant-type.
Hier mal ein holpriger Ansatz.
Code:
(defun c:EXTEST (/)
  (if (setq Excelappli (vlax-get-object "excel.application"))

    (if (setq
  xlsSheet (vlax-get-property
    (vlax-get-property Excelappli "ActiveWorkbook")
    "ACTIVESHEET"
  )
)
      (progn
(setq ExcelUsedRange
      (vlax-get-property
(vlax-get-property xlsSheet "UsedRange")
"VALUE"
      )
)
(if (= (vlax-variant-type ExcelUsedRange) 0)
  (alert "Tabelle ist leer!")
  (if (= (vlax-variant-type ExcelUsedRange) 8204)
;;; Hier safearray bearbeiten
    (setq RangeAdresse
  (vlax-get-property
    (vlax-get-property xlsSheet "UsedRange")
    "Address"
    :vlax-true
    :vlax-true
    :vlax-false
  )
    )
;;; Hier Zelle bearbeiten
    (setq RangeAdresse
  (vlax-get-property
    (vlax-get-property xlsSheet "UsedRange")
    "Address"
    :vlax-true
    :vlax-true
    :vlax-false
  )
    )
  )
)
      )
    )
  )
)


------------------
Gruß Wolfgang

Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz