| |  | 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

 Beiträge: 36 Registriert: 09.06.2009 Inventor 2025
|
erstellt am: 25. Okt. 2024 11:19 <-- editieren / zitieren --> Unities abgeben:         
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
      

 Beiträge: 2788 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 25. Okt. 2024 13:12 <-- editieren / zitieren --> Unities abgeben:          Nur für FroSte
|
FroSte Mitglied Bauingenieur

 Beiträge: 36 Registriert: 09.06.2009 Inventor 2025
|
erstellt am: 25. Okt. 2024 17:58 <-- editieren / zitieren --> Unities abgeben:         
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
      

 Beiträge: 2788 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 25. Okt. 2024 22:30 <-- editieren / zitieren --> Unities abgeben:          Nur für FroSte
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

 Beiträge: 36 Registriert: 09.06.2009 Inventor 2025
|
erstellt am: 28. Okt. 2024 12:04 <-- editieren / zitieren --> Unities abgeben:         
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
      

 Beiträge: 2788 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 28. Okt. 2024 16:02 <-- editieren / zitieren --> Unities abgeben:          Nur für FroSte
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 >>)
 |