Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  Inventor VBA
  iLogic: Zeilenweise Lesen aus einer Exceltabelle

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
  
Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung
Autor Thema:  iLogic: Zeilenweise Lesen aus einer Exceltabelle (453 / mal gelesen)
FroSte
Mitglied
Bauingenieur


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

Beiträge: 36
Registriert: 09.06.2009

Inventor 2025

erstellt am: 25. Okt. 2024 11:19    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 habe eine etwas allgemeinere Frage.
Mit den iLogic-Befehlen "GoExcel.FindRow" und "GoExcel.CurrentRowValue" kann man sehr einfach Werte in einer Tabelle suchen und den Inhalt der Zelle lesen.
Für den Befehl "GoExcel.FindRow" gibt man als Suchkriterium den Dateipfad der Tabelle, das Tabellenblatt, die Spaltenüberschrift sowie den Suchwert an z.B. "GoExcel.FindRow(Dateipfad_Tabelle, "Blatt", "Splatentitel", "=", "Suchwert")".
Nun habe ich eine Tabelle mit vielen Zeilen, in der ich bestimmte Zeilen finden möchte. Damit ich gezielt nach Zeilen suchen kann, habe ich mit damit beholfen, dass ich in der Spalte A eine fortlaufende Zeilennummer von 1 bis z.B. 100 erstelle. Somit kann ich in der Spalte A z.B. nach der Nummer 76 suchen und die Werte aus bestimmten Spalten in dieser Zeile lesen.

Jetzt meine Frage:
Kann man das auch ohne die Spalte A mit einer laufenden Nummer erreichen, indem man die Zeilennummer (und auch Spaltenbezeichnungen "A", "B", "C", .... ""AA", "AB", ...) von Excel verwendet?

Ich möchte eigentlich nicht in einer vorhandenen Tabelle eine Splate mit der Zeilennummer einfügen müssen.

Danke für eine Antworten.
Gruß Stephan

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2788
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 25. Okt. 2024 13:12    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 FroSte 10 Unities + Antwort hilfreich

Moin

Wenn du die Zelladresse kennst, kannst du mit GoExcel.CellValue auf eine Zelle oder mit GoExcel.CellValues auf eine Zellrange zugreifen.

------------------
MfG
Ralf

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

FroSte
Mitglied
Bauingenieur


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

Beiträge: 36
Registriert: 09.06.2009

Inventor 2025

erstellt am: 25. Okt. 2024 17:58    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 Ralf,
Du bist ja sehr umtriebig hier im Forum. Das ist sehr schön und bewundernswert. Vielen Dank dafür.

OK, das mit den GoExcel.CellValue habe ich verstanden. Das funktionier auch.

Eine andere Frage:
Wie kann man die Anzahl der nicht leren Zeilen/Zellen in einer bestimmten Spalte in einer Exceldatei ermitteln?
Ich habe es mit folgendem Code versucht, was aber nicht funktioniert, sofern keine Zahlen in der Spalte stehen, sondern Text. Auch taucht der gleiche Text mehrmals in den Zeilen auf, so dass ich nicht nach dem letzten Wort der Spalte suchen kann.

Code:

Zeilen_Tabelle = GoExcel.FindRow(Tabelle, "Blatt", "Spaltentitel", ">=", "")

Das "" wird nicht gefunden, da Inventor bei der letzten leeren Zeile aufhört zu lesen. Zurückgegeben wird dann der Wert -1.

Danker für die Unterstützung.

Gruß Stephan

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2788
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 25. Okt. 2024 22:30    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 FroSte 10 Unities + Antwort hilfreich

Moin

Ich hab jetzt einfach mal deine schon vorhandenen Variablennamen aus dem anderen Thread verwendet und das Tabellenblatt "Tunnelbau" und Spalte L genommen. Wenn ich das richtig gesehen habe, beginnt in Zeile 3 der Datenbereich, darüber ist Spaltenkopf. Die Funktion GoExcel.CellValues hat die für diesen Fall äußerst brauchbare Eigenschaft leere Zellen zu überspringen. Die Länge des zurückgegebenen Arrays ist also die gesuchte Anzahl nichtleerer Zellen.

Code:

Public Sub Main()

'**********************************************************************************************************
'Dateiauswahl für Exceltabelle mit benutzerdefinierten Projekt-Eigenschaften für Bauteile oder Baugruppen
'**********************************************************************************************************
Dim oFileDlg_Tabelle As Inventor.FileDialog = Nothing
ThisApplication.CreateFileDialog(oFileDlg_Tabelle)

Try
oFileDlg_Tabelle.Filter = "Excel Files (*.xls;*.xlsx;*.xlsm)|*.xls;*.xlsx;*.xlsm"
oFileDlg_Tabelle.DialogTitle = "Auswahl Excel-Tabelle mit projektspezifischen Eigenschaften Pfaffensteigtunnel aus BIMQ"
oFileDlg_Tabelle.InitialDirectory = ThisDoc.Path
oFileDlg_Tabelle.CancelError = True
oFileDlg_Tabelle.ShowOpen()

If oFileDlg_Tabelle.FileName <> "" Then
    Eigenschaftentabelle = oFileDlg_Tabelle.FileName
    'MessageBox.Show("Es wurde die folgende Datei mit Eigenschaften ausgewählt:" & Chr(13) & Chr(13) & Eigenschaftentabelle, "Dialog Auswahl getätigt")
End If

Catch
    MessageBox.Show("Keine Datei ausgewählt. Das Programm wird beendet.", "Dialog Abbruch")
    Exit Sub
End Try

'***********************************
'Anzahl Zeilen in Tabelle ermitteln
'***********************************

GoExcel.TitleRow = 2
GoExcel.FindRowStart = 3

Dim Zeilen_Tabelle As Integer
Dim Anzahl_Eigenschaften As Integer

Zeilen_Tabelle = GoExcel.FindRow(Eigenschaftentabelle, "Tunnelbau", "Nummer", "<=", 50000)
Anzahl_Eigenschaften = Zeilen_Tabelle - 2

Dim iCount As Integer = GoExcel.CellValues(Eigenschaftentabelle, "Tunnelbau", "L3", "L" & Zeilen_Tabelle).Count

'alternativ, wenn die Werteliste ebenfalls benötigt wird
'Dim aValues As ArrayList=GoExcel.CellValues(Eigenschaftentabelle, "Tunnelbau", "L3", "L" & Zeilen_Tabelle)
'Dim iCount As Integer = aValues.Count

MsgBox("Anzahl nichtleerer Zellen in Spalte L: " & iCount)

End Sub


Relevant ist eigentlich nur die Zeile

Code:

Dim iCount As Integer = GoExcel.CellValues(Eigenschaftentabelle, "Tunnelbau", "L3", "L" & Zeilen_Tabelle).Count

Der Rest ist nur damit das Beispiel lauffähig ist.

------------------
MfG
Ralf

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

FroSte
Mitglied
Bauingenieur


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

Beiträge: 36
Registriert: 09.06.2009

Inventor 2025

erstellt am: 28. Okt. 2024 12:04    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 Ralf,

danke, für die Hilfe und den Code.

Du gehst aber davon aus, dass die Zeilennummer in der Spalte A mit dem Spaltentitel "Nummer" vorhanden ist.

Code:

Zeilen_Tabelle = GoExcel.FindRow(Eigenschaftentabelle, "Tunnelbau", "Nummer", "<=", 50000)
Anzahl_Eigenschaften = Zeilen_Tabelle - 2

Wenn die Spalte "Nummer" nicht existiert, muss ich in dei Variable "Zeilen_Tabelle" eine entsprechend große Zahl definieren, so dass ich sicher gehen kann, das die letzte Zeile mit einem Inhalt kleiner ist, richtig?

Das sehe dann so aus:

Code:

Zeilen_Tabelle = 50000
Anzahl_Eigenschaften = Zeilen_Tabelle - 2

Dim iCount As Integer = GoExcel.CellValues(Eigenschaftentabelle, "Tunnelbau", "F3", "F" & Zeilen_Tabelle).Count

'alternativ, wenn die Werteliste ebenfalls benötigt wird
'Dim aValues As ArrayList=GoExcel.CellValues(Eigenschaftentabelle, "Tunnelbau", "F3", "F" & Zeilen_Tabelle)
'Dim iCount As Integer = aValues.Count

MsgBox("Anzahl nichtleerer Zellen in Spalte F: " & iCount)


 


Oder gibt es da noch eine andere Lösung/Möglichkeit?

Danke und Gruß Stephan

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2788
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 28. Okt. 2024 16:02    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 FroSte 10 Unities + Antwort hilfreich

Moin

Es gibt Möglichkeiten z.B. mit UsedRange den Bereich zu finden der in einer Spalte benutzt wird. Aber dazu reicht GoExcel nicht, dazu müsstest du eine richtige Excelinstanz starten. Das bringt andere Probleme mit sich, z.B. das die ganzen GoExcel statements nicht mehr funktionieren. Ich würde es dabei belassen eine Zeilennummer fix festzulegen, die mit Sicherheit größer ist als die letzte beschriebene Zelle. Man kann mal testen wieviel Zeitunterschied es macht, wenn man für die Zeilenanzahl 1.000, 5.000, 10.000 und 50.000 nimmt. Ist der vernachlässigbar klein, würde ich zum größten tendieren.

------------------
MfG
Ralf

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)2025 CAD.de | Impressum | Datenschutz