Czy ArcGIS ModelBuilder może otworzyć plik Excel do ręcznej edycji, a następnie wprowadzić te zmiany z powrotem do modelu?

10

Zadanie polegało na utworzeniu modelu za pomocą ArcGIS ModelBuilder, który początkowo uruchamia kilka zadań geoprzetwarzania, a następnie dołącza do tabeli Excela w wyniku tych geoprocesów. Jednak model musi najpierw otworzyć plik Excel, aby użytkownik mógł go ręcznie edytować, zanim następnie zapisze zmiany i zamknie plik. Oczekuje się następnie, że model połączy ten plik Excela z tabelą atrybutów zestawu danych (wciąż część modelu), zanim model będzie kontynuował wykonywanie szeregu innych zadań geoprzetwarzania.

Poniżej zamieszczam ogólny zarys schematu, aby pomóc zilustrować tę kwestię (rozumiem, że na początku może to nie mieć sensu).

Model zostanie wstrzymany podczas edycji pliku Excel, a następnie wznowiony po zapisaniu i zamknięciu

Aby model działał, ukończył kilka zadań geoprzetwarzania, wstrzymał się, aby otworzyć plik Excela, czekał, aż użytkownik go edytować, zapisać i zamknąć, przed wznowieniem dołączenia tego pliku Excela do tabeli atrybutów, a następnie uruchomieniem liczby innych zadań geoprzetwarzania.

Wyobrażam sobie, że wymagałoby to włączenia do modelu skryptu Python lub dwóch. Obecnie jestem tylko zainteresowany, czy koncepcja jest rzeczywiście możliwa, czy nie.

the_bonze
źródło
1
Jestem pewien, że ze standardowymi narzędziami do budowania modeli nie będziesz w stanie tego zrobić, ponieważ nie ma sposobu na zatrzymanie modelu, potrzebujesz również jakiegoś wyzwalacza, aby powiedzieć, że użytkownik zamknął program Excel, aby ponownie uruchomić model. Być może uda Ci się to osiągnąć za pomocą jakiegoś skryptu wysłanego do nieskończonej pętli, która patrzy na flagę w pliku tekstowym po utworzeniu osobnego procesu (Excel)? Nigdy tego nie robiłem i nie wiem, jakie są pułapki. Jeśli chcesz zachować to w programie budującym modele, najpierw dokonam edycji programu Excel, a następnie uruchom model.
Hornbydd,
Dzięki @ Horbydd - miałem te same myśli. Sugerowałem najpierw edycję pliku, a następnie uruchomienie modelu, ale powiedziano mi, że musi to być jeden zintegrowany model ...
the_bonze
1
Sądzę, że skrypt może sprawdzić datę i godzinę pliku, aby dowiedzieć się, czy został on edytowany, a następnie wznowić model z tego miejsca? Myślę, że zatrzymanie tego jest problemem.
the_bonze
Tak, konstruktor modeli został zaprojektowany w celu zautomatyzowania przepływu pracy w celu przyspieszenia przetwarzania, nie mając w środku nieokreślonej pauzy, co się stanie, jeśli ten użytkownik pójdzie na przykład na lunch? :) Tak jak ja teraz!
Hornbydd,

Odpowiedzi:

1

Wygląda na to, że musisz opracować bardziej niestandardowe narzędzie Python niż model w ModelBuilder. xlwtlub xlutilsna http://www.python-excel.org/ pozwoli ci pisać do pliku Excela ( XlsxWriterbędzie obsługiwał pliki xlsx). Jeśli zmiany są niewielkie, prawdopodobnie możesz to uwzględnić w standardowym narzędziu ArcToolbox (z pewną kreatywnością). Jeśli korzystasz z wersji 10.1+, możesz utworzyć dodatek do Pythona lub Przybornik Python, aby również działał w GUI.

Chad Cooper
źródło
Czy dodatki Python już oferują zaawansowane opcje GUI w wersji 10.1+? Myślałem, że tylko .NET i Java AddIns zapewniają te ... Python oferuje tylko AddIny bez GUI (polecenia, narzędzia).
Jürgen Zornig,
1
@ JürgenZornig To nie jest takie proste: anothergisblog.blogspot.com/2013/07/…
Chad Cooper
Dzięki @ChadCooper. Muszę zachować model w kreatorze modeli, więc dodatki w języku Python są w porządku, ale model jako jednostka musi być w programie do budowania modeli, a nie w pełni funkcjonalnym narzędziu Python.
the_bonze
@Chad W każdym razie dziękuję za ten fajny samouczek ArcPy / Tkinter Quickstart ... musisz tego spróbować!
Jürgen Zornig
1

Myślałem o tym i możliwe, że znalazłem nowatorskie rozwiązanie. Skonfigurujesz skrypt Pythona w przyborniku z dwoma parametrami użytkownika, po pierwsze lokalizacją pliku Excel EXE. Można to nawet inteligentnie zakodować, aby sprawdzić listę prawdopodobnych lokalizacji ścieżek plików (Office12, Office13 itp.).

Następnie użyj funkcji subprocess.call. Jest kilka naprawdę fajnych rzeczy na temat korzystania z tej metody:

  1. Nie wymaga żadnych zewnętrznych bibliotek
  2. funkcja wywołania nie pozwala na kontynuację skryptu, dopóki program Excel nie zostanie zamknięty
  3. Możesz podać dokument programu Excel jako drugi argument
  4. To jedna linia kodu!

    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)

Jedyne, co mam, nie jestem w 100% pewien, czy to zadziała w kreatorze modeli, trzeba będzie to przetestować, jednak nie rozumiem, dlaczego tak się nie stanie, ponieważ jestem pewien, że Arc jest temperamentna bestia.

James Milner
źródło