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 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.
quelle
Antworten:
Dies klingt so, als müssten Sie in ModelBuilder mehr ein benutzerdefiniertes Python-Tool als ein Modell entwickeln.
xlwt
oderxlutils
unter http://www.python-excel.org/ können Sie in Ihre Excel-Datei schreiben (XlsxWriter
behandelt 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.quelle
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:
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.
quelle