Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Übernahme des Inhalts von IFC-Dateien in Excel Tabelle
#11
Hallo Andre,

vielen Dank für Deinen Vorschlag, das klappt sehr gut! Ich nehme an, wenn ich eine andere Klasse als IFCQUANTITYAREA auslesen möchte ändere ich einfach diesen Eintrag!? Werden bei deinem Code derzeit alle vorhandenen Elemente dieses Typs ausgelesen? Wie würde der Code aussehen, wenn ich gerne zwei Klassen gleichzeitig auslesen möchte? Kann im Code zusätzlich fixiert werden, dass die auszulesende Datei im selben Verzeichnis wie das Excel Dokument liegt, wodurch nach Start des Makros diese IFC Datei ohne erneute Auswahl ausgelesen wird?
Antworten Top
#12
Hallo sunny,

ja, das geht alles. Ich schaue es mir heute Abend an.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#13
Hallo sunny,

ja, für andere Einträge gibst Du etwas anderes an. Du musst nur auf die Schreibweise achten, im Beispiel alles in groß.
Wenn Du zwei Klassen gleichzeitig holen willst, dann z.B. mit zwei Suchworten

...
Dim strSearch1$, strSearch2$
...
strSearch1 = "ABC"
strSearch2 = "DEF"
...
If InStr(strLine, strSearch1) > 0 Or InStr(strLine, strSearch2) > 0 Then
...


Das mit dem Verzeichnis und dem Dateinamen geht auch, allerdings müsste dann der Dateiname immer gleich sein. Die Zeile mit Open sähe dann so aus:

...
Open Thisworkbook.Path & "\Meine.IFC" For Input As #1
...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#14
Big Grin 
Hallo,

das mit dem Auslesen auch von mehreren Kategorien klappt gut. Für die weitere Bearbeitung der Daten hätte ich folgende Fragen (siehe Exceldatei als Anlage):

- In den ausgelesenen Klassen gibt es jeweils eine Spalte, deren Inhalt relevant ist, bei IFCSPACE ist es jeweils der Inhalt der Spalte F, bei  IFCQUANTITYAREA der Inhalt der Spalte J. Kann das Einlesen der Daten auf diese Spalten beschränkt werden?

- Kann die Formatierung der Spalte F und Spalte J bereits im Code angepasst werden? Wie im Beispieldokument ersichtlich wird bei Spalte J in Zelle J7 der Buchstaben ü nicht richtig dargestellt (der Eintrag sollte "Küche" heißen) In Spalte F gibt es das Problem bei den Zahlenwerten, die teilweise durch Punkt und teilweise durch Komma getrennt werden (bei Betrachtung der IFC Datei im IFC Viewer werden die Zahlenwerte immer korrekt mit Komma in der IFC Datei dargestellt). Eine genaue Zahlenangabe ist nur mit Komma möglich.

- Wie können Merkmale die den Klassen untergliedert sind angesprochen werden, z.B. IfcQuantityArea - GrossFloorArea 
Die Zahlenwerte der GrossFloorArea wären für mich wichtige Zahlenwerte, die ich gerne aus der IFC Datei auslesen möchte.


Angehängte Dateien
.xlsx   Test.xlsx (Größe: 10,01 KB / Downloads: 5)
Antworten Top
#15
Hallöchen,

in der IFC werden die deutschen Umlaute durch solche Zeichenketten ersetzt. Hast Du da eine Übersicht? Da kann ich das Ersetzen programmieren. ü wird ja eventuell nicht reichen.

Für die "Spalten" müsstest Du genau definieren, der wievielte Wert bei einer Klasse relevant ist. Ich könnte das jetzt für die zwei tun, aber dann fragst Du alle zwei Stunden nach der nächsten Klasse... ?
Auch hier wäre eine Übersicht nicht schlecht.

Dass das mit dem GrossFloorArea müsstest Du genauer beschreiben. Als Wort findet man das ja nicht in der IFC. Es wird vielleicht in der Zeile nach IfcQuantityArea beginnen? Aber wo hört es auf?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#16
Hallo Andre,

vielen Dank für Deine Info! Für das Ersetzen der Umlaute gibt es folgende Zeichenfolgen: ö entspricht in IFC der Zeichenfolge \X2\00D6\X0\ - ü entspricht in IFC der Zeichenfolge \X2\00DC\X0\ - ä entspricht in IFC der Zeichenfolge \X2\00C4\X0\ Es wäre sehr hilfreich, wenn Du in einem Makro das Ersetzen dieser Zeichenfolgen durch die Umlaute einbauen könntest.

Wenn es möglich wäre, das Einlesen der Werte auf gewisse Spalten zu reduzieren, wäre das natürlich gut für mich, beispielhaft anhand von IFCSPACE (=Spalte F) und IFCQUANTITYAREA (Spalte J) den Code zu sehen. Die Anpassung an andere Werte kann ich dann auf Basis dieses Codes selbst durchführen.

Das Problem mit IFC ist, das diese Struktur auf die Programmiersprache EXPRESS hin angepaßt ist. Dabei hat  lt. Klassendefinition im Web "GrossFloorArea"  einen Zusammenhang mit "IfcQuantityArea". Nun weiß ich nicht, wie ich diesen Wert mit VBA Code auslesen kann (exemplarisch für weitere Werte). Der Zusammenhang dieses Werts ist unter folgender URL beschrieben:
http://www.buildingsmart-tech.org/ifc/IF...ilding.htm
Antworten Top
#17
Hallöchen,

anbei der neue Code. Die Daten aus F und J werden jetzt in Spalte C eingetragen. Ist das GrossFloorArea eventuell die Summe der einzelnen Zahlen, die der Code übernimmt? Dann brächte man ja nur in Spalte C unten die Summe oder deren Formel einzutragen.

Sub IFC_Einlesen()
'Variablendeklaration 
'String 
Dim strLine$, strCutter$, arrText, strSearch1$, strSearch2$
'Integer 
Dim iCol%
'Long 
Dim lStart&
'Dateneintrag ab Zeile 1 
lStart = 1
'Suchwort, ggf. per Inputbox 
strSearch1 = "IFCQUANTITYAREA"
strSearch2 = "IFCSPACE"
 'Datei Oeffnen mit Dialog 
Open Datei_Dialog For Input As #1
'Schleife bis Dateiende 
Do While Not EOF(1)
  'Zeile einlesen 
  Line Input #1, strLine
  'nur importieren wenn strSearch vorhanden 
  'ggf. Großschreibung verarbeiten 
  If InStr(strLine, strSearch1) > 0 Or InStr(strLine, strSearch2) > 0 Then
    'Klammer und Semikolon am Ende abtrennen 
    strLine = Left(strLine, Len(strLine) - 2)
    'Umlaute ersetzen 
    strReplace strLine
    'Trennzeichen = 
    strCutter = "="
    'Zeilennummer abtrennen 
    arrText = Split(strLine, strCutter)
    'Zeilennummer in Spalte A = 1 eintragen 
    Cells(lStart, 1) = arrText(0)
    'Trennzeichen ( 
    strCutter = "("
    'Suchwort abtrennen 
    arrText = Split(arrText(1), strCutter)
    'Suchwort in Spalte B = 2 eintragen 
    Cells(lStart, 2) = Trim(arrText(0))
    'zu uebernehmende "Spalte" je nach Suchwort festlegen 
    'bea: Array faengt mit Index 0 an 
    If Trim(arrText(0)) = strSearch1 Then iCol = 3 Else iCol = 7
    'Trennzeichen , 
    strCutter = ","
    'Resttext aufteilen 
    arrText = Split(arrText(1), strCutter)
    'Resttext in Spalte C eintragen 
    With Cells(lStart, 3)
      'Resttext eintragen 
      .Value = arrText(iCol)
      'Punkt durch Komma ersetzen 
      'Hinweis: wegen englichem VBA Punkt durch Punkt Smile 
      .Replace What:=".", Replacement:="."
    'Ende Mit dem Bereich ab Spalte C 
    End With
    'Zeile 1 erhöhen 
    lStart = lStart + 1
  'Ende nur importieren wenn strSearch vorhanden 
  End If
'Ende Schleife bis Dateiende 
Loop
'Datei schließen. 
Close #1
End Sub

Private Sub strReplace(ByRef strText As String)
'deutsche Umlaute ersetzen 
'ae 
strText = Replace(strText, "\X2\00C4\X0\", "ä")
'ue 
strText = Replace(strText, "\X2\00D6\X0\", "ö")
'oe 
strText = Replace(strText, "\X2\00FC\X0\", "ü")
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#18
Hallo Andre,


vielen Dank für Deinen Code! Eine kleine Ergänzung wäre noch gut, nämlich dass beide Werte in einer eigenen Spalte stehen, eigentlich so wie in Deinem aktuellen Code aber in eigenen Spalten nebeneinander (nicht in derselben Spalte untereinander). Leider ist GrossFloorArea nicht die Summe der einzelnen Zahlen, die bereits ausgelesen werden. Diese Werte sind wieder in eigenen Klassen gespeichert.
Antworten Top
#19
Halöchen,

"klein" wird die Ergänzung nicht Smile Schaue ich mir heute Abend an.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#20
Hallo Andre,

vielen Dank nochmals für Deinen Code! Eine kleine Ergänzung Deines zuletzt bearbeiteten Codes wäre noch gut, nämlich dass beide Werte in einer eigenen Spalte stehen. Vielleicht kannst Du mir kurz anhand dem Beispiel beschreiben, wie das z.B. bei drei oder vier Klassen angepasst werden müsste.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste