Kann ArcGIS ModelBuilder eine Excel-Datei zur manuellen Bearbeitung öffnen und diese Änderungen dann wieder in das Modell einspeisen?

10

Ich wurde beauftragt, mit ArcGIS ModelBuilder ein Modell zu erstellen, das zunächst einige Geoverarbeitungsaufgaben ausführt, bevor ich dann eine Excel-Tabelle mit dem Ergebnis dieser Geoprozesse verknüpfe. Das Modell muss jedoch zuerst die Excel-Datei öffnen, damit der Benutzer sie manuell bearbeiten kann, bevor der Benutzer seine Änderungen speichert und die Datei schließt. Es wird dann erwartet, dass das Modell diese Excel-Datei mit der Attributtabelle eines Datasets (das immer noch Teil des Modells ist) verknüpft, bevor das Modell mit einer Reihe anderer Geoverarbeitungsaufgaben fortfährt.

Ich füge unten eine allgemeine schematische Gliederung hinzu, um den Punkt zu veranschaulichen (ich verstehe, dass dies zunächst nicht viel Sinn macht).

Das Modell wird angehalten, während die Excel-Datei bearbeitet wird, und nach dem Speichern und Schließen fortgesetzt

Das Modell wurde also ausgeführt, einige Geoverarbeitungsaufgaben ausgeführt, eine Pause zum Öffnen einer Excel-Datei eingelegt, darauf gewartet, dass der Benutzer sie bearbeitet, speichert und schließt, bevor die Excel-Datei wieder mit einer Attributtabelle verknüpft und anschließend eine Nummer ausgeführt wird von anderen Geoverarbeitungsaufgaben.

Ich sollte mir vorstellen, dass dazu ein oder zwei Python-Skripte in das Modell integriert werden müssten. Derzeit interessiert mich allerdings nur, ob das Konzept tatsächlich möglich ist oder nicht.

the_bonze
quelle
1
Ich bin mir ziemlich sicher, dass Sie dies mit Standard-Tools zum Erstellen von Modellen nicht tun können, da es keine Möglichkeit gibt, das Modell anzuhalten. Sie benötigen außerdem einen Auslöser, um zu melden, dass der Benutzer Excel geschlossen hat, um das Modell neu zu starten. Möglicherweise können Sie dies mit einer Art Skript erreichen, das in eine Endlosschleife gesendet wird und ein Flag in einer Textdatei betrachtet, nachdem ein separater Prozess (Excel) ausgelöst wurde. Ich habe das noch nie gemacht und weiß nicht, was die Fallstricke sind. Wenn Sie es im Modelbuilder behalten möchten, würde ich zuerst die Excel-Änderungen vornehmen und dann das Modell ausführen.
Hornbydd
Danke @Hornbydd - ich habe die gleichen Gedanken gehabt. Ich habe vorgeschlagen, zuerst die Datei
auszuführen
1
Ich glaube, ein Skript könnte den Datums- und Zeitstempel einer Datei überprüfen, um festzustellen, ob sie bearbeitet wurde, und dann das Modell von dort aus fortsetzen. Es ist das Problem, es anzuhalten, denke ich.
the_bonze
Ja, Model Builder wurde entwickelt, um einen Workflow zu automatisieren, um die Verarbeitung zu beschleunigen. Es gibt keine unbestimmte Pause in der Mitte. Was passiert, wenn dieser Benutzer beispielsweise zum Mittagessen ausgeht? :) Genau wie ich jetzt!
Hornbydd

Antworten:

1

Dies klingt so, als müssten Sie in ModelBuilder mehr ein benutzerdefiniertes Python-Tool als ein Modell entwickeln. xlwtoder xlutilsunter http://www.python-excel.org/ können Sie in Ihre Excel-Datei schreiben ( XlsxWriterbehandelt XLSX-Dateien). Wenn die Änderungen geringfügig sind, können Sie dies wahrscheinlich in ein Standard-ArcToolbox-Tool integrieren (mit etwas Kreativität). Wenn Sie 10.1+ verwenden, können Sie ein Python-Add-In oder eine Python-Toolbox erstellen, in der auch die GUI ausgeführt wird.

Chad Cooper
quelle
Bieten Python AddIns bereits in 10.1+ ausgefeilte GUI-Optionen? Ich dachte, nur .NET und Java AddIns bieten diese ... Python bietet nur AddIns ohne GUI (Befehle, Tools).
Jürgen Zornig
1
@ JürgenZornig Es ist nicht so einfach: anothergisblog.blogspot.com/2013/07/…
Chad Cooper
Danke @ChadCooper. Ich muss das Modell im Model Builder behalten, damit Python-Add-Ins in Ordnung sind, aber das Modell als Entität muss sich im Model Builder befinden und nicht in einem vollständigen Python-Tool.
the_bonze
@Chad Trotzdem danke für dieses nette ArcPy / Tkinter-Schnellstart-Tutorial ... muss es versuchen!
Jürgen Zornig
1

Ich habe darüber nachgedacht und es ist möglich, dass ich eine neuartige Lösung gefunden habe. Sie richten ein Python-Skript in einer Toolbox mit zwei Benutzerparametern ein, zunächst dem Speicherort der Excel-EXE-Datei. Dies könnte sogar intelligent codiert werden, um eine Liste der wahrscheinlich fest codierten Dateipfadspeicherorte (Office12, Office13 usw.) zu überprüfen.

Verwenden Sie als Nächstes die Funktion subprocess.call. Es gibt einige wirklich nette Dinge bei der Verwendung dieser Methode:

  1. Es sind keine externen Bibliotheken erforderlich
  2. Die Aufruffunktion erlaubt keine Fortsetzung des Skripts, bis Excel geschlossen wird
  3. Sie können das Excel-Dokument als zweites Argument angeben
  4. Es ist eine Codezeile!

    import subprocess subprocess.call(["C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE", "Test.xlsx"]) #Replace args with user inputs (sys.argv[1], sys.argv[2] respectively)

Das einzige ist, dass ich nicht 100% sicher bin, ob dies im Modellbauer funktioniert. Dies muss getestet werden. Ich verstehe jedoch nicht, warum dies nicht der Fall ist, aber ich bin mir sicher, dass Sie wissen, dass Arc dies ist ein temperamentvolles Tier.

James Milner
quelle