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).
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.
źródło
Odpowiedzi:
Wygląda na to, że musisz opracować bardziej niestandardowe narzędzie Python niż model w ModelBuilder.
xlwt
lubxlutils
na http://www.python-excel.org/ pozwoli ci pisać do pliku Excela (XlsxWriter
bę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.źródło
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:
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.
źródło