Мне было поручено создать модель с использованием ArcGIS ModelBuilder, которая сначала выполняет несколько задач геообработки, а затем соединяет таблицу Excel с результатами этих геообработок. Однако модели необходимо сначала открыть файл Excel, чтобы пользователь мог отредактировать его вручную, а затем пользователь сохранит свои изменения и закроет файл. Затем ожидается, что модель присоединит этот файл Excel к таблице атрибутов набора данных (все еще являющейся частью модели), прежде чем модель продолжит выполнение ряда других задач геообработки.
Ниже я приведу схему схемы высокого уровня, чтобы проиллюстрировать это (я понимаю, что начинать с этого может не иметь большого смысла).
Таким образом, модель запустится, выполнит несколько задач геообработки, остановится, чтобы открыть файл Excel, подождет, пока пользователь отредактирует его, сохранит и закроет его, прежде чем возобновить присоединение этого файла Excel к таблице атрибутов, а затем выполнить число других задач геообработки.
Я должен представить, что для этого потребуется включить один или два сценария Python в модель. Хотя сейчас мне просто интересно узнать, возможна ли эта концепция на самом деле или нет.
источник
Ответы:
Похоже, вам нужно больше разрабатывать пользовательский инструмент Python, чем модель в ModelBuilder.
xlwt
или поxlutils
адресу http://www.python-excel.org/ позволит вам написать в файл Excel (XlsxWriter
будет обрабатывать файлы xlsx). Если правки незначительны, вы, вероятно, могли бы включить это в стандартный инструмент ArcToolbox (с некоторым творческим подходом). Если вы используете 10.1+, то вы можете создать Python Add-In или Python Toolbox для работы с графическим интерфейсом.источник
Я думал об этом, и, возможно, я нашел новое решение. Вы настраиваете скрипт Python в наборе инструментов с двумя пользовательскими параметрами, во-первых, местоположением Excel EXE. Это может быть даже разумно закодировано для проверки списка жестких кодов вероятных местоположений файловых путей (Office12, Office13 и т. Д.).
Затем используйте функцию subprocess.call. Есть некоторые действительно интересные вещи об использовании этого метода:
Это одна строка кода!
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)
Единственное, я не уверен на 100%, сработает ли это в конструкторе моделей, это нужно будет протестировать, однако я не понимаю, почему это не так, но, как я уверен, вы знаете, что Arc темпераментный зверь.
источник