Zum Inhalt springen

Tabellen - In Formeln Suchen


kpaternoster

Frage

Geschrieben

Kann man in einer Tabelle, in den Formeln einen bestimmten "Text" Suchen und ersetzen?

Zum Beispiel habe ich die Formel "=RUNDEN('Stück Ausstattung ALE':C536)" und möchte in der ganzen Tabelle in jeder Formel in der  "ALE" vorkommt "ALE" durch "FAG" ersetzen.

Ist das irgendwie möglich?

 

Für Vorschläge wäre ich sehr dankbar.

Empfohlene Beiträge

Geschrieben

Vielen Dank linosphere,

wie kann ich diese Formel auf die ganze Spalte 'C' anwenden in der verschiedene Formeln wie:

=RUNDEN('Längen Ausstattung ALE':C19)

=RUNDEN('Stück Ausstattung ALE':C268)

=RUNDEN('Fläche ALE':C154)

...

stehen und überall "ALE" in "FAG" geändert werden soll? Die Tabelle hat ca. 360 Zeilen wäre also gut wenn man das irgendwie automatisch hinbringen würde.

Geschrieben

Ah, jetzt verstehe ich das erst richtig. Du willst eine Suchen-und-Ersetzen-Operation auf die Formeln anwenden, nicht in einer Objektliste einen Text ersetzen?

Vectorworks Landschaft 2024

Mac Studio 2022 M1 Max - macOS Sonoma

Geschrieben

ja genau. Der Hintergrund ist der: Ich habe Massentabellen (eine ALE betreffend, eine FAG Gemeinde betreffend und eine FAG Landkreis) diese Tabellen holen sich die Massen aus den verschiedenen Klassen die Längen der Zäune, die Flächen der Asphaltflächen, die Flächen der Pflasterflächen, Symbolen usw.) und dann habe ich Kostententabellen die sich die Massen aus den Massentabellen holen, und in diesen Kostentabellen möchte ich jetzt nicht mehr die Verknüpfung zur "ALE" Tabelle haben, sondern ersetzen durch die "FAG" Tabelle.

Dass da dann quasi in meiner Spalte C (die Spalte für die Massen) nicht mehr steht =RUNDEN('Längen Ausstattung ALE':C19) sondern =RUNDEN('Längen Ausstattung FAG Gemeinde':C19) und anstelle von=RUNDEN('Linienelemente ALE':E11) soll =RUNDEN('Linienelemente FAG Gemeinde':E11) stehen. 

Geschrieben

Hallo,

 

um normale Einträge (keine Formeln) in Tabellen zu ändernkann man die Funktion "Text -> Suchen und ändern -> Erweiterte Textsuche und -ersetzen" verwenden.

 

Da du aber nur Formeln ändern willst habe ich ein kleines Script geschrieben mit dem man das machen kann:

def ws_formel_suchen_und_ersetzen():
	# user input
	old_string = vs.StrDialog("Alter Text", "Alter Text")
	if old_string == "":
		return(None)
	
	new_string = vs.StrDialog("Neuer Text", "Neuer Text")
	if new_string == "":
		go_on = vs.YNDialog("Fortfahren Zeichen zu löschen?")
		
		if not go_on:
			return(None)
			
	# get ws data
	ws_handle = vs.GetTopVisibleWS()
	currentCellRow, currentCellColumn, topRangeRow, leftRangeColumn, topRangeSubrow, bottomRangeRow, rightRangeColumn, bottomRangeSubrow = vs.GetWSSelection(ws_handle)
	
	# iterate cells
	count = 0
	for row_index in range(topRangeRow, bottomRangeRow + 1):
		
		for column_index in range(leftRangeColumn, rightRangeColumn + 1):
			
			curr_cell_formula = vs.GetWSCellFormulaN(ws_handle, row_index, column_index)
			
			# cases when nothing has to be replaced in formula
			if len(curr_cell_formula) == 0 or curr_cell_formula.find(old_string) == -1 or curr_cell_formula[0] != "=":
				continue
			
			new_cell_formula = curr_cell_formula.replace(old_string, new_string)
			
			vs.SetWSCellFormulaN(ws_handle, row_index, column_index, row_index, column_index, new_cell_formula)
			count += 1
	
	vs.AlertInform("Hinweis", f"Es wurden {count} Formeln geändert", False)
	return(None)


# run script
ws_formel_suchen_und_ersetzen()

 

Und so funktioniert es:

  • Öffne eine Tabelle in Vectorworks und markiere dort den Bereich in welchem du Formeln ändern willst (Achtung, das Script wird immer in der am obersten geöffneten Tabelle suchen!)
  • Führe das Script aus und gebe den Text ein den du ersetzen möchtest und dann den Text mit dem du den alten Text ersetzen möchtest.
    Es wird dabei zwischen Groß und Kleinschreibung unterschieden.
  • Wenn du den angegebenen Teil des Textes löschen möchtest, dann musst du beim zweiten Dialog (Angabe des neuen Textes) auf Abbrechen klicken und die Meldung die danach kommt bestätigen.
    Exkurs: Das ist eine Eigenheit der Vectorscript Funktion die die Dialogbox erzeugt, dort kann man keinen leeren String eingeben.

Ich will nochmals darauf hinweisen, dass das Script nur in Formeln sucht.

 

Grüße,

Letti

  • Like 2
Geschrieben
vor 12 Minuten schrieb Letti R:

Hallo,

 

um normale Einträge (keine Formeln) in Tabellen zu ändernkann man die Funktion "Text -> Suchen und ändern -> Erweiterte Textsuche und -ersetzen" verwenden.

 

Da du aber nur Formeln ändern willst habe ich ein kleines Script geschrieben mit dem man das machen kann:

def ws_formel_suchen_und_ersetzen():
	# user input
	old_string = vs.StrDialog("Alter Text", "Alter Text")
	if old_string == "":
		return(None)
	
	new_string = vs.StrDialog("Neuer Text", "Neuer Text")
	if new_string == "":
		go_on = vs.YNDialog("Fortfahren Zeichen zu löschen?")
		
		if not go_on:
			return(None)
			
	# get ws data
	ws_handle = vs.GetTopVisibleWS()
	currentCellRow, currentCellColumn, topRangeRow, leftRangeColumn, topRangeSubrow, bottomRangeRow, rightRangeColumn, bottomRangeSubrow = vs.GetWSSelection(ws_handle)
	
	# iterate cells
	count = 0
	for row_index in range(topRangeRow, bottomRangeRow + 1):
		
		for column_index in range(leftRangeColumn, rightRangeColumn + 1):
			
			curr_cell_formula = vs.GetWSCellFormulaN(ws_handle, row_index, column_index)
			
			# cases when nothing has to be replaced in formula
			if len(curr_cell_formula) == 0 or curr_cell_formula.find(old_string) == -1 or curr_cell_formula[0] != "=":
				continue
			
			new_cell_formula = curr_cell_formula.replace(old_string, new_string)
			
			vs.SetWSCellFormulaN(ws_handle, row_index, column_index, row_index, column_index, new_cell_formula)
			count += 1
	
	vs.AlertInform("Hinweis", f"Es wurden {count} Formeln geändert", False)
	return(None)


# run script
ws_formel_suchen_und_ersetzen()

 

Und so funktioniert es:

  • Öffne eine Tabelle in Vectorworks und markiere dort den Bereich in welchem du Formeln ändern willst (Achtung, das Script wird immer in der am obersten geöffneten Tabelle suchen!)
  • Führe das Script aus und gebe den Text ein den du ersetzen möchtest und dann den Text mit dem du den alten Text ersetzen möchtest.
    Es wird dabei zwischen Groß und Kleinschreibung unterschieden.
  • Wenn du den angegebenen Teil des Textes löschen möchtest, dann musst du beim zweiten Dialog (Angabe des neuen Textes) auf Abbrechen klicken und die Meldung die danach kommt bestätigen.
    Exkurs: Das ist eine Eigenheit der Vectorscript Funktion die die Dialogbox erzeugt, dort kann man keinen leeren String eingeben.

Ich will nochmals darauf hinweisen, dass das Script nur in Formeln sucht.

 

Grüße,

Letti

 

 

 

Vielen Dank Letti, 

 

erst mal vielen Dank für deine Mühen. Aber das ist dann das erste mal, dass ich mit Scripte arbeite 😄  Könntest du mir genauer erklären, wie ich mit dem Script umgehen muss? 🙂

 

Vielen, vielen Dank im Voraus.

Geschrieben (bearbeitet)

Hallo,

 

es gibt mit Sicherheit eine bessere Erklärung irgendwo im Forum, aber ich fasse kurz hier zusammen wie du das Script nutzen kannst:

 

  • Kopiere das Script hier aus dem Forumsbeitrag
  • Gehe in Vectorworks und lege im Zubehörmanager ein neues Script an (Rechtsklick -> Neues Zubehör -> Script)
  • Falls noch keine Scriptpalette (So etwas wie ein Ordner für Scipte) besteht, wird diese zuerst angelegt, dafür einen entsprechenden Namen eingeben
  • Es öffnet sich der Script Editor
  • Stelle ggf. oben die Scriptsprache auf Pyhon Script um
  • Füge in den Scripteditor das zuvor aus dem Forumsbeitrag kopierte Script ein
  • Den Script Editor mit OK schließen
  • Öffne die Scriptpalette, falls diese noch nicht sichtbar ist (Fenster -> Scriptpaletten -> die entsprechende dort auswählen)

Jetzt hast du das Script Erstellt und du könntest es auch ausführen indem du den Namen des Scriptes in der Scriptpalette Doppelklickst (oder Rechtsklick -> Ausführen). Öffne davor aber (in diesem Fall) eine Tabelle und Markiere einen bestimmten Bereich in dem du nach den Formeln suchen möchtest (da du sonst etwas in einer Tabelle unbeabsichtigt ändern könntest).

 

Grüße

Letti

Bearbeitet von Letti R
  • Like 2
Geschrieben
vor 10 Minuten schrieb Letti R:

Hallo,

 

es gibt mit Sicherheit eine bessere Erklärung irgendwo im Forum, aber ich fasse kurz hier zusammen wie du das Script nutzen kannst:

 

  • Kopiere das Script hier aus dem Forumsbeitrag
  • Gehe in Vectorworks und lege im Zubehörmanager ein neues Script an (Rechtsklick -> Neues Zubehör -> Script)
  • Falls noch keine Scriptpalette (So etwas wie ein Ordner für Scipte) besteht, wird diese zuerst angelegt, dafür einen entsprechenden Namen eingeben
  • Es öffnet sich der Script Editor
  • Stelle ggf. oben die Scriptsprache auf Pyhon Script um
  • Füge in den Scripteditor das zuvor aus dem Forumsbeitrag kopierte Script ein
  • Den Script Editor mit OK schließen
  • Öffne die Scriptpalette, falls diese noch nicht sichtbar ist (Fenster -> Scriptpaletten -> die entsprechende dort auswählen)

Jetzt hast du das Script Erstellt und du könntest es auch ausführen indem du den Namen des Scriptes in der Scriptpalette Doppelklickst (oder Rechtsklick -> Ausführen). Öffne davor aber (in diesem Fall) eine Tabelle und Markiere einen bestimmten Bereich in dem du nach den Formeln suchen möchtest (da du sonst etwas in einer Tabelle unbeabsichtigt ändern könntest).

 

Grüße

Letti

 

 

 

Vielen, Vielen Dank. Das ist der Hammer 😄  Genial!! 🙂 

 

Wäre es auch möglich so ein Script zu bekommen mit dem man bestimmte Filter aller Objektlisten in einer Tabelle ändern kann?

(z, B. Filter Ebene anstelle von Ebene "Bauabschnitt1" soll er nach Ebene "Bauabschitt2" filtern)

 

Grüße KP

Geschrieben

Hallo,

 

Zitat

Wäre es auch möglich so ein Script zu bekommen mit dem man bestimmte Filter aller Objektlisten in einer Tabelle ändern kann?

(z, B. Filter Ebene anstelle von Ebene "Bauabschnitt1" soll er nach Ebene "Bauabschitt2" filtern)

 

das ist eine gute Frage. Tendenziell würde ich behaupten, dass es nicht vorgesehen ist, dass man so etwas per Python Script machen kann, allerdings habe ich es noch nicht versucht und kann deshalb nichts definitives dazu sagen. Ich schau bei Gelegenheit (Wochenende) ob ich dazu etwas herausfinden kann.

 

Grüße

Letti

  • Like 1
Geschrieben

Das sollte gut machbar sein, eventuell sogar ausbauen zu einem Umbenennen-Script mit Tabellen-Handling.

 

Das Umbenennen des Objekts also gleich mit ins Script nehmen. Ich hab so etwas ähnliches mit Massenumbenennung im Einsatz um dokumentübergreifend die Namen von referenzierten Objekten konsistent zu halten. Das geht recht gut mit vs.SetName(). Wenn ein Name schon vorhanden ist macht der Befehl nichts. Du kannst also nicht aus Versehen Objekte ganz verlieren. Am besten baust du aber eine Rückmeldung für diesen Fall ein.

Mit TargetSprdSheet() wechselst du das aktive Spreadsheet. Du kannst also gleich durch alle Spreadsheets der Bibliothek laufen und Zellen nach dem Begriff durchsuchen.

Die Listenkriterien sind findest du mit dem Spaltenindex 0. Es sollte also ausreichen bei deinem Script bei Spaltenindex 0 zu beginnen mit durchlaufen.

Vectorworks 2025 - Architektur - Win 11

Geschrieben

Hallo,

 

@herbieherb ich hatte als Test schon probiert den String in Spalte 0 von den Database rows zu ändern. Das geht auch, allerdings hatte ich es auf die Schnelle nicht geschafft die neu gefilterten Objete in den entsprechenden Subrows darzustellen. Stattdessen werden keine Subrows mehr angezeigt und ein Recalculate Worksheet bringt auch nichts. Wenn ich dann aber in die Filtereinstellungen der Database row gegangen bin war dort die Änderung zu sehen und bin ich dann aus der Filtereinstelung mit Ok wieder raus werden die Subrows auch dargestellt.

 

Grüße

Letti

Geschrieben (bearbeitet)

Das hier funktioniert bei mir in ganz einfacher Testumgebung:
 

new_name = "Datenbank-1"
ws_handle = vs.GetTopVisibleWS()
vs.SetWSCellFormula(ws_handle, 1, 0, 1, 0, f"=DATABASE(R IN ['{new_name}'])")
vs.RecalculateWS(ws_handle)
Bearbeitet von herbieherb

Vectorworks 2025 - Architektur - Win 11

Geschrieben

Hallo,

 

stimmt, mit Datenbanken geht das.

Ich hatte testweise in meiner Zeichnung ein paar Rechtecke und ein paar Kreise und wollte zwischen =RECHTECK und =KREIS wechseln und das geht (zumindest bei mir) nicht.

Ich vermute mal, dass das mit Datenbanken geht, da dort der Name der Datenbank als String eingegeben wird während KREIS oder RECHTECK interpretiert werden müssen (vermutlich wird im Hintergrund die Bezeichnung in einen entsprechenden Objekttypindex umgewandelt und das wird durch Recalculate nicht angestoßen)?

 

Grüße

Letti

Geschrieben

Hallo,

 

ich lag mit meiner Einschätzung daneben, es ist problemlos möglich die Objektlisten per Script zu ändern.

Mein Fehler in der Bedienung bestand darin, dass ich RECHTECK durch KREIS ersetz habe, allerdings hätte ich T=RECHTECK durch ST=KREIS ersetzen müssen damit es funktioniert.

 

Ich werde das Script in den kommenden Tagen so umbauen, dass man auch die Objektlisten damit ändern kann.

 

Grüße

Letti

  • Like 2
  • Lieben 2
Geschrieben

Hallo,

 

anbei könnt ihr die neue Version von dem Script herunterladen.

WS formula search and replace.vsm

 

Ich habe das Script zu einem Menübefehl mit entsprechendem Dialog umgeschrieben. Dort kann man jetzt auswählen wo man suche möchte, in der gesamten Tabelle, oder nur im ausgewählten Bereich und man kann angeben welche Art von Formeln man ändern möchte, normale Formeln oder auch die Filterformeln von Objektlisten.

 

Wenn ihr Fehler findet oder der Menübefehl etwas anderes macht, als das was ihr erwartet habt, dann schreibt mir das bitte, sodass ich mich darum kümmern kann.

 

Über jegliches anderes Feedback oder Wünsche freue ich mich natürlich auch.

 

Grüße

Letti

  • Like 2
Geschrieben
vor 16 Stunden schrieb Letti R:

Hallo,

 

anbei könnt ihr die neue Version von dem Script herunterladen.

WS formula search and replace.vsm 19.93 kB · 0 Downloads

 

Ich habe das Script zu einem Menübefehl mit entsprechendem Dialog umgeschrieben. Dort kann man jetzt auswählen wo man suche möchte, in der gesamten Tabelle, oder nur im ausgewählten Bereich und man kann angeben welche Art von Formeln man ändern möchte, normale Formeln oder auch die Filterformeln von Objektlisten.

 

Wenn ihr Fehler findet oder der Menübefehl etwas anderes macht, als das was ihr erwartet habt, dann schreibt mir das bitte, sodass ich mich darum kümmern kann.

 

Über jegliches anderes Feedback oder Wünsche freue ich mich natürlich auch.

 

Grüße

Letti

 

 

Hallo Letti, 

 

vielen dank für deine Mühen 🙂 das ist jetzt so eine Erleichterung! Dankeschön echt 😄 

Liebe Grüße

 

 

 

Geschrieben
Am 23.3.2025 um 15:32 schrieb Letti R:

Über jegliches anderes Feedback oder Wünsche freue ich mich natürlich auch.

 

Besten Dank für das Script. Gibt es eine Möglichkeit alle Tabellen aufzulisten und dann eine Auswahl zu treffen in welchen Tabellen man suchen und ersetzten will?

VWX24 SP8 | Architektur | MacOS 13.5 | M2 Max

Geschrieben

Hallo,

 

leider kann ich das Problem nicht nachvollziehen, da das Script bei mir auch in VWX 2026 funktioniert.

Kannst du mir etwas mehr Informationen geben woran es genau scheitert. Gibt es z.B. eine Fehlermeldung beim Ausführen? Oder ist der Menübefehl in der Arbeitsumgebung nicht mehr eingebunden?

 

Grüße

Letti

Geschrieben

Ich habe das Script in den "Plug-Ins-Ordner" von 2026 kopiert und die Arbeitsumgebung angepasst damit es unter Extras zu finden ist. Wenn ich die Funktion nun ausführen möchte (ich habe eine Tabelle geöffnet) kommt folgende Meldung

 

 

 

 

image.png.1afebe6d022f96edefabc10c1eabb784.png

Geschrieben (bearbeitet)

Hallo,

 

ich habe endlich mal wieder Zeit gefunden und den Vorschlag von @inderfab versucht umzusetzen. Der Menübefehl wurde für Vectorworks 2026 gemacht. Eine Version für Vectorworks 2025 habe ich ebenfalls angehängt.

Anbei könnt ihr die neue Version des Menübefehls herunterladen:

 

2026:

WS formula search and replace.vsm

 

2025:

WS formula search and replace.vsm

 

Das sind die Neuerungen:

  • Der Menübefehl listet jetzt alle Tabellen des aktuellen Dokuments auf, sodass man die auswählen kann, in denen man etwas in den Formeln ersetzen möchte.
    Wenn ihr ein oder mehrere Tabellen geöffnet habt, dann ist in der Liste die vorderste Tabelle vorausgewählt. Sind alle Tabellen geschlossen, dann ist keine Tabelle in der Liste vorausgewählt und ihr müsst händisch eine Auswahl vornehmen.
    Der Zellbereich in dem gesucht werden soll, kann für jede Tabelle einzeln festgelegt werden. Dazu müsst ihr auf das "X" bzw. das "-" vor der Spalte "Suchebereich" klicken (kennt sich jemand mit dem scripten von list browsern aus und kann mir sagen, ob / wie es möglich ist multistates pro zeile und nicht nur pro spalte zu haben?)
  • Ich habe auch noch eine Checkbox hinzugefügt mit der man einstellen kann, dass die Suche in den Formeln nicht zwischen Groß-, und Kleinschreibung unterscheidet.
  • Zuletzt gibt es jetzt auch eine Checkbox mit der einstellbar ist, dass der Suchtext als Regex interpretiert wird.

 

Dinge die ich aus Zeitgründen nicht umgesetzt habe:

  • Vorschau der Ersetzungen im Dialogfenster (ähnlich Excel). Unsicher ob umsetzbar.
  • Verschiedene Breiten des Dialogfensters für Windows und Mac, aufgrund Scrollbalken. Nur kosmetisch.
  • Bild mit Haken statt "X" und "-" für die Auswahl. Nur kosmetisch.

 

Über Feedback, Fehler und Anregungen bin ich wie immer dankbar.

 

 

Grüße,

Letti

Bearbeitet von Letti R
  • Like 4
  • Lieben 1

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden
  • Forenstatistik

    • Themen insgesamt
      26,8Tsd
    • Beiträge insgesamt
      139,3Tsd
×
×
  • Neu erstellen...