[Excel] Zwischen 2 Worksheets die Werte vergleichen & in einem 3. Worksheet einfügen

Common engineer

Grünschnabel
Hallo Community!

ich bin neu hier und hoffe auf ein herzlichen empfang ;P
Naja so neu nicht nur als Mitglied ja, das Forum hat mir immer wieder helfen können, doch leider stecke ich hier auf ein Problem...und meine VBA-Kenntnisse sind SEHR spärlich.

Es wird jetzt ne menge Text kommen also BITTE nicht abschrecken, aber die Erfahrung zeigt, wenn man jemanden etwas erklären möchte....sollte man das auch gründlich machen :) Eine Datei wird mit eingefügt!

Inhalt der Zip-Datei im Anhang:
1. Step-Datei erstellen _Ver10.xlsm
2. StepBeispiel.STEP
3. StepBeispiel_FreeCAD_Quader 2 z=25 Quader 3 z=90.STEP

Beschreibung:

Was ich schon habe ist, eine Excel-Datei die automatisch Quader generiert und diese als STEP speichert.
Ein STEP ist ein Dateiformat aus CAD-Systemen, wenn man möchte eine art Normierung, sodass man diese Datei auch unter verschiedene CAD-Systeme sich öffnen lassen kann.
Es werden nach "Namen", "Abmassungen" und "Startkoordinaten(Position)" abgefragt.

NUN wenn man die STEP-Datei z.B. unter dem OpenSource-CAD-Programm "FreeCAD" öffnet und man die Position doch anders haben will, dann sollen die "Positions-Delta-Werte" verglichen werden und die Werte die Verändert wurden übernehmen.

Positions-Delta-Werte:
Wenn man die STEP-Datei via Excel erstellt und diese im FreeCAD öffnet, sieht man ja die erstellten Quader. :)
Was ja auch gut ist.
Nun, wenn man aber z.B. eine Position doch anders haben möchte, kann man das ja im FreeCAD ändern.
Quader anwählen - Daten - Placement - Position. X/Y/Z Werte eintragen welche man möchte.

Nun ist es auch möglich unter FreeCAD die Datei als STEP zu speichern.

Natürlich sind die CARTESIAN_POINTS( CP ) (Angabe der Position und Form des Quaders) Werte zwischen Excel-STEP und FreeCAD-STEP unterschiedlich, wenn eine Änderung stattgefunden hat. Genau diesen Unterschied soll erfasst und übernommen werden als NEUE "Startkoordinate".​

Überlegung:
4 Buttons:
1. STEP-Datei aus Liste erstellen ( Funktioniert )
2. FreeCAD-STEP Datei öffnen ( öffen funktioniert )
3. Positionsübernahme aus FreeCAD
4. Alte STEP-Datei öffnen ( funktioniert )

Unter Button 2:

Inhalt dieser FreeCAD-STEP-Datei in einem neuem Worksheet "FreeCAD_STEP" z.B. einfügen und mit Worksheet "STEP_NEW" vergleichen . Einfügen funktioniert bereits, das Vergleichen jedoch nicht.
Nach dem Vergleich (s.u.), sollen die Delta-Werte auf dem selben Worksheet("Ein_Ausgabe") wo die Buttons sind, ausgegeben werden.

Unter Button 3:
Worksheet ("Ein_Ausgabe") unter der Spalte "Startkoordinaten Quader" die jeweiligen Delta-Werte von "Positionskoordianten FreeCAD" ins "Startkoordinaten Quader" überschrieben werden.

Unter Button 4:
Eine schon erstellte Excel-STEP wieder öffnen und unter Worksheet "STEP_NEW" einfügen. Das klappt ^^

Natürlich werden die vorherigen (alten) Einträgen von den neuen überschrieben. (Worksheet "FreeCAD_STEP" und "STEP_NEW")

Vorgehensweise des Vergleichs:

Das Muster, welche 3 CP-Werte ich einmal von Excel und FreeCAD je Bauteil( Eingabe "Name" s.o. ) miteinander Vergleiche, sieht folgendermaßen aus:

Z.B. Ein Vergleich mit 3 generierten Quader

1. Quader(Name1)
1. Vergleich Excel-Wert #38, #51, #107 und FreeCAD-Wert #25, #46, #161...Insgesamt 3 Vergleiche pro Quader (Plausibilisierungsprüfung)
2. Quader(Name2)
4. Vergleich Excel-Wert 202+#38=#240... und FreeCAD-Wert 344+#25=#369...
...Insgesamt 3 Vergleiche pro Quader (Plausibilisierungsprüfung)
3. Quader(Name3)
7. Vegleich Excel-Wert 202+#240=#442... und FreeCAD-Wert 344+#369=#713...
...Insgesamt 3 Vergleiche pro Quader (Plausibilisierungsprüfung) usw.

Die Fettmarkierten-Werte sind die Basis-Werte und die farbigen Werte zeigen das Muster mehr oder weniger wieder.
Die ersten 6 Werte ( 3 Excel 3 FreeCAD ) müssen als feste Konstanten gesetzt werden, dann wird das alte Ergebnis als Addition zum Basiswert genommen und man erhält das neue Ergebnis usw.

Die gefundenen Zeilen sehen immer so aus. ( Positions-Delta-Werte ?x = 10 ?y = -10 ?z = 25, diese stehen in der Klammer von CP.
[FreeCAD-Excel] )
Excel:
#38 = CARTESIAN_POINT ( 'NONE', ( 0.0, 0.0, 100.0 ) ) ;
#51 = CARTESIAN_POINT ( 'NONE', ( 0.0, 50.0, 100.0 ) ) ;
#101 = CARTESIAN_POINT ( 'NONE', ( 100.0, 50.0, 0.0 ) ) ;
FreeCAD:
#25 = CARTESIAN_POINT('',(10.,-10.,125.));
#46 = CARTESIAN_POINT('',(10.,40.,125.));
#161 = CARTESIAN_POINT('',(110.,40.,25.));

ufff...ich weiß ist ne menge Text und ich HOFFE wirklich, das sich jemand das auch durchliest.......

Ich bedanke mich schon einmal im Voraus für eure Hilfe!


MfG
CE
 

Anhänge

Nicht einfach .... ich schaus mir mal an

Eine Frage.
Wie erkennt man ab wo ein neues Projekt startet? Die reihenfolge der Informationen sind ja ueimlich unterschiedlich.
Der Projektname
Beim ExcelStep finde ich den Quader hier
Code:
#38 = CARTESIAN_POINT ( 'NONE',  ( 0.0, 0.0, 100.0 ) ) ;
...
#188 = PRODUCT ( 'Quader 1', 'Quader 1', '', ( #27 ) ) ;
Bei FreeCAD hier
Code:
#7 = PRODUCT('Quader_1','Quader_1','',(#8));
...
#25 = CARTESIAN_POINT('',(10.,-10.,125.));
 
Hallo Yaslaw,

danke dir ersteinmal, dass du dir die Zeit genommen und mein Beitrag gelesen hast ! :)

Wie erkennt man ab wo ein neues Projekt startet?
Im Excel-STEP "StepBeispiel.STEP" ist es relativ einfach.

Im DATA hat pro Quader genau 202-Zeilen(also bei 2 Quader 404 usw.) beginnt mit:
#1 = ORIENTED_EDGE ( 'NONE', *, *, #194, .T. ) ;
endet mit
#202 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'Quader 1', ( #146, #177 ), #173 ) ;
nächster
#203 = ORIENTED_EDGE ( 'NONE', *, *, #396, .T. ) ;
endet mit
#404 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'Quader 2', ( #348, #379 ), #375 ) ; usw.

Beim FreeCAD-STEP "StepBeispiel_FreeCAD_Quader 2 z=25 Quader 3 z=90.STEP" sieht die Angelegenheit etwas anderes aus....leider...und ist auch etwas komplexer.
Jedoch was man SICHER sagen kann ist, dass die ALLE CP-Werte zu Quader 1[ #7 = PRODUCT('Quader_1','Quader_1','',(#8)); ] zwischen Quader 1 und Quader 2[ #355 = PRODUCT('Quader_2','Quader_2','',(#356)); ] sind.
Dementsprechend sind ALLE CP-Werte zu Quader 2[ #355 = PRODUCT('Quader_2','Quader_2','',(#356)); ] zwischen Quader 2 und Quader 3[ #699 = PRODUCT('Quader_3','Quader_3','',(#700)); ] usw.
Um das besser zu veranschaulichen habe ich eine Excel-Datei angefügt + nochmal 2 FreeCAD-STEP Dateien.

Bei der einen Datei wurde nur ein Quader abgebildet
Bei der zweiten Datei wurden zwei Quader abgebildet

Wenn noch Fragen sind nur zu!
Wenn es nötig ist könnte ich im FreeCAD-STEP genauer schauen. Doch erste Eindrücke sagen aus, das es nicht so ist wie Excel-STEP einfach 202*2 bei zwei Quadern oder 202*3 bei 3 Quadern usw. , sonder wenn man das so machen würde in FreeCAD-STEP kommt als Ergebnis immer 7(1 Quader), 14(2 Quader), 21(3 Quader), 28(4 Quader) ...usw mehr an Abzahl von Zeilen raus als es tatsächlich auch hat. Siehe Anhang ;)

Ich glaube aber mit der Aussage, dass ALLE Notwendigen CP-Werte bei meheren Quader, immer zwischen beiden
#Zahl = PRODUCT(xxxxx) sich befinden, kann man da doch sicher was machen, oder?

Gruß
CE
 

Anhänge

Soweit so gut. Die Projekte mit ihren certs auslesen ist nicht weiter schwer.
Aber wie will man die nun vergleichen?

Ich habe folgendes mal draussen.
Excel
Code:
Quader 1
#14=>(0.0, 0.0, 0.0)
#38=>(0.0, 0.0, 100.0)
#40=>(0.0, 50.0, 0.0)
#43=>(0.0, 0.0, 0.0)
#47=>(100.0, 0.0, 0.0)
#48=>(0.0, 50.0, 0.0)
#51=>(0.0, 50.0, 100.0)
#55=>(0.0, 50.0, 0.0)
#59=>(0.0, 0.0, 100.0)
#63=>(100.0, 50.0, 0.0)
#66=>(0.0, 50.0, 100.0)
#71=>(100.0, 50.0, 0.0)
#73=>(0.0, 0.0, 0.0)
#76=>(100.0, 0.0, 0.0)
#86=>(0.0, 50.0, 100.0)
#91=>(0.0, 50.0, 100.0)
#96=>(0.0, 50.0, 0.0)
#101=>(100.0, 50.0, 0.0)
#107=>(0.0, 0.0, 100.0)
#109=>(100.0, 50.0, 100.0)
#110=>(0.0, 50.0, 0.0)
#125=>(0.0, 50.0, 100.0)
#126=>(100.0, 0.0, 100.0)
#128=>(100.0, 50.0, 100.0)
#129=>(0.0, 50.0, 0.0)
#130=>(0.0, 0.0, 0.0)
#131=>(100.0, 50.0, 0.0)
Quader 2
#216=>(0.0, 0.0, 0.0)
#240=>(25.0, 50.0, 50.0)
#242=>(25.0, 75.0, 0.0)
#245=>(25.0, 50.0, 0.0)
#249=>(75.0, 50.0, 0.0)
#250=>(25.0, 75.0, 0.0)
#253=>(25.0, 75.0, 50.0)
#257=>(25.0, 75.0, 0.0)
#261=>(25.0, 50.0, 50.0)
#265=>(75.0, 75.0, 0.0)
#268=>(25.0, 75.0, 50.0)
#273=>(75.0, 75.0, 0.0)
#275=>(25.0, 50.0, 0.0)
#278=>(75.0, 50.0, 0.0)
#288=>(25.0, 75.0, 50.0)
#293=>(25.0, 75.0, 50.0)
#298=>(25.0, 75.0, 0.0)
#303=>(75.0, 75.0, 0.0)
#309=>(25.0, 50.0, 50.0)
#311=>(75.0, 75.0, 50.0)
#312=>(25.0, 75.0, 0.0)
#327=>(25.0, 75.0, 50.0)
#328=>(75.0, 50.0, 50.0)
#330=>(75.0, 75.0, 50.0)
#331=>(25.0, 75.0, 0.0)
#332=>(25.0, 50.0, 0.0)
#333=>(75.0, 75.0, 0.0)
Quader 3
#418=>(0.0, 0.0, 0.0)
#442=>(100.0, 0.0, 10.0)
#444=>(100.0, 10.0, 0.0)
#447=>(100.0, 0.0, 0.0)
#451=>(175.0, 0.0, 0.0)
#452=>(100.0, 10.0, 0.0)
#455=>(100.0, 10.0, 10.0)
#459=>(100.0, 10.0, 0.0)
#463=>(100.0, 0.0, 10.0)
#467=>(175.0, 10.0, 0.0)
#470=>(100.0, 10.0, 10.0)
#475=>(175.0, 10.0, 0.0)
#477=>(100.0, 0.0, 0.0)
#480=>(175.0, 0.0, 0.0)
#490=>(100.0, 10.0, 10.0)
#495=>(100.0, 10.0, 10.0)
#500=>(100.0, 10.0, 0.0)
#505=>(175.0, 10.0, 0.0)
#511=>(100.0, 0.0, 10.0)
#513=>(175.0, 10.0, 10.0)
#514=>(100.0, 10.0, 0.0)
#529=>(100.0, 10.0, 10.0)
#530=>(175.0, 0.0, 10.0)
#532=>(175.0, 10.0, 10.0)
#533=>(100.0, 10.0, 0.0)
#534=>(100.0, 0.0, 0.0)
#535=>(175.0, 10.0, 0.0)
FreeCAD:
Code:
Quader_1
#12=>(0.E+000, 0.E+000, 0.)
#23=>(0.E+000, 50., 100.)
#25=>(0.E+000, 0.E+000, 100.)
#28=>(0.E+000, 50., 100.)
#34=>(0.E+000, 50., 0.)
#46=>(0.E+000, 50., 100.)
#58=>(0.E+000, 50., 0.)
#61=>(0.E+000, 50., 0.)
#74=>(0.E+000, 50., 100.)
#86=>(0.E+000, 0.E+000, 0.)
#89=>(0.E+000, 50., 0.)
#102=>(0.E+000, 50., 0.)
#115=>(0.E+000, 0.E+000, 0.)
#128=>(0.E+000, 0.E+000, 100.)
#143=>(100., 50., 100.)
#145=>(100., 0.E+000, 100.)
#148=>(100., 50., 100.)
#161=>(100., 50., 0.)
#174=>(0.E+000, 50., 100.)
#196=>(0.E+000, 0.E+000, 100.)
#219=>(100., 50., 0.)
#221=>(100., 0.E+000, 0.)
#224=>(100., 50., 0.)
#245=>(100., 50., 0.)
#267=>(100., 0.E+000, 0.)
#292=>(0.E+000, 50., 0.)
#314=>(0.E+000, 0.E+000, 0.)
Quader_2
#367=>(25., 75., 75.)
#369=>(25., 50., 75.)
#372=>(25., 75., 75.)
#378=>(25., 75., 25.)
#390=>(25., 75., 75.)
#402=>(25., 75., 25.)
#405=>(25., 75., 25.)
#418=>(25., 75., 75.)
#430=>(25., 50., 25.)
#433=>(25., 75., 25.)
#446=>(25., 75., 25.)
#459=>(25., 50., 25.)
#472=>(25., 50., 75.)
#487=>(75., 75., 75.)
#489=>(75., 50., 75.)
#492=>(75., 75., 75.)
#505=>(75., 75., 25.)
#518=>(25., 75., 75.)
#540=>(25., 50., 75.)
#563=>(75., 75., 25.)
#565=>(75., 50., 25.)
#568=>(75., 75., 25.)
#589=>(75., 75., 25.)
#611=>(75., 50., 25.)
#636=>(25., 75., 25.)
#658=>(25., 50., 25.)
Quader_3
#711=>(100., 10., 100.)
#713=>(100., 0.E+000, 100.)
#716=>(100., 10., 100.)
#722=>(100., 10., 90.)
#734=>(100., 10., 100.)
#746=>(100., 10., 90.)
#749=>(100., 10., 90.)
#762=>(100., 10., 100.)
#774=>(100., 0.E+000, 90.)
#777=>(100., 10., 90.)
#790=>(100., 10., 90.)
#803=>(100., 0.E+000, 90.)
#816=>(100., 0.E+000, 100.)
#831=>(175., 10., 100.)
#833=>(175., 0.E+000, 100.)
#836=>(175., 10., 100.)
#849=>(175., 10., 90.)
#862=>(100., 10., 100.)
#884=>(100., 0.E+000, 100.)
#907=>(175., 10., 90.)
#909=>(175., 0.E+000, 90.)
#912=>(175., 10., 90.)
#933=>(175., 10., 90.)
#955=>(175., 0.E+000, 90.)
#980=>(100., 10., 90.)
#1002=>(100., 0.E+000, 90.)
 

Anhänge

Zuletzt bearbeitet:
Hi Yaslaw,

kannst mir ruhig dutzen ;) so alt bin ich nicht

Also ich habe mal deine Datei angeschaut...und muss recht sagen, ich blicke da nicht so ganz durch, denke aber dass das noch kommen wird. Weil, so nehme ich es mal an, du noch am testen bist :)

Was ich gemerkt habe, fehlen beim FreeCAD je Quader 2 CP-Einträge (Siehe Excel die ich hochgeladen habe) meine aber für den Vergleich sollen diese Eintäge nicht wichtig sein. Es fehlen immer die letzten 2 Einträge eines Quaders.

zum Vergleich:

1. Quader 1
Excel-Wert
#38
#51
#107
FreeCAD-Wert
#25
#46
#161
Insgesamt 3 Vergleiche pro Quader (Plausibilisierungsprüfung)

2. Quader 2
Excel-Wert
202+#38=#240
202+#51=#253
202+#107=#309
FreeCAD-Wert
344+#25=#369
344+#46=#390
344+#161=#505
Insgesamt 3 Vergleiche pro Quader (Plausibilisierungsprüfung)

3. Quader 3
Excel-Wert
202+#240=#442 usw.
FreeCAD-Wert
344+#369=#713 usw.
Insgesamt 3 Vergleiche pro Quader (Plausibilisierungsprüfung) usw.

Der Vergleich würde dann folgendermaßen ausehen(aus deinem Code):
Excel-STEP#Zahl_ESTEP=>(X_ESTEP,Y_ESTEP,Z_ESTEP) //E...Excel
FreeCAD-STEP#Zahl_FCSTEP=>(X_FCSTEP,Y_FCSTEP,Z_FCSTEP) //FC...FreeCAD
Rot:Excel-STEP
Grün:FreeCAD-STEP

#38=>(0.0, 0.0, 100.0) VERGLEICHEN MIT #25=>(0.E+000, 0.E+000, 100.)
#51=>(0.0, 50.0, 100.0)
VERGLEICHEN MIT #46=>(0.E+000, 50., 100.)
#107=>(0.0, 0.0, 100.0) VERGLEICHEN MIT #161=>(100., 50., 0.)

2. Quader und weitere identisch (s.o. wie man auf die CP-Werte bekommt)

Verglichen wird dann, was in der Klammer steht:
X_FCSTEP minus X_ESTEP = Delta-Wert
Y_FCSTEP minus Y_ESTEP = Delta-Wert
Z_FCSTEP minus Z_ESTEP = Delta-Wert

Aber wie will man die nun vergleichen?
Oder was meinst du genau?

MfG
CE
 
Zuletzt bearbeitet von einem Moderator:
Oder was meinst du genau?
Woher weiss man, dass #38 mit #25 verglichen werden muss?
Warum nicht die #14 mit der #12?

Excel: Warum nur die #38,#51 und #107. Was ist mit den anderen?
#14 = CARTESIAN_POINT ( 'NONE', ( 0.0, 0.0, 0.0 ) ) ;
#38 = CARTESIAN_POINT ( 'NONE', ( 0.0, 0.0, 100.0 ) ) ;
#40 = CARTESIAN_POINT ( 'NONE', ( 0.0, 50.0, 0.0 ) ) ;
#43 = CARTESIAN_POINT ( 'NONE', ( 0.0, 0.0, 0.0 ) ) ;
#47 = CARTESIAN_POINT ( 'NONE', ( 100.0, 0.0, 0.0 ) ) ;
#48 = CARTESIAN_POINT ( 'NONE', ( 0.0, 50.0, 0.0 ) ) ;

#51 = CARTESIAN_POINT ( 'NONE', ( 0.0, 50.0, 100.0 ) ) ;
...


Und woher weiss man, mit welchen aus FreeCAD verglichen werden soll?
 
:)
Da muss ich ganz tief in die Kiste greifen, wenn du es genau wissen möchtest, aber kein Thema.

Also, eine STEP-Datei sind immer mit CARTESIAN_POINT, VERTEX_POINT, LINE, EDGE_CURVE usw. aufgebaut. Genau mit dem angaben lässt sich ein z.B. Quader abbilden.

Diese vielen anderen CP-Werte sind Werte die eine Verknüpfung haben zu den oben genannten Entities.
Ein Entity ist eine Eigenschaft. Objekte aus der realen Welt, werden als Baugruppen oder Bauteile dargestellt. CP ist eine Entity.

Und eben genau diese Punkt, sind bei beiden STEPs "IDENTISCH", identisch heißt, bei einer Änderung erkennt man auch die Veränderung im FreeCAD-STEP.

Code:
Und woher weiss man, mit welchen aus FreeCAD verglichen werden soll?
Das habe ich auch mehr oder weniger beschlossen, dass das die Werte sind.

Gruß
CE
 
Wo im Excel seh ich diese Zuordnung? .
Wie genau meinst du das?

Wenn du die Excel-Datei öffnest, dann hast du zwei Tabellenblätter mit "STEP_NEW" und "FreeCAD_STEP".
In den beiden Sheets stehen dann die jeweiligen CP-Werte.

Ich meine das was du rausgelesen hast, Beitrag #4, sieht ja schonmal gut aus. Mit dem, könnte man doch die Werte in der Klammer vergleichen, oder nicht?

Mfg
CE
 
Zuletzt bearbeitet:
Sorry, ich blick doch nicht durch.
Irgendwo müsstest du die Zordnung #38->#24 hinterlegt sein.
Wenn nicht, kannst du eine Automatisierung vergessen. Dann ists einfacher von Hand die Daten auszulesen und abzugleichen.
Ein Programm muss eine Logik haben um herauszufinden welche Daten es nehmen soll. Und wenn diese Information deinem Bauchgefühl entspricht, dann musst du das Resultat deines Bauchgefühles dem Programm mitteilen.

Tipp:
Setze dich zuerst einmal damit auseinander, wie die Logik sein soll. Vorher ist jede Zeile Code eine Zeile zu viel.
 
Zurück