Может ли ArcGIS ModelBuilder открыть файл Excel для ручного редактирования, а затем передать эти изменения обратно в модель?

10

Мне было поручено создать модель с использованием ArcGIS ModelBuilder, которая сначала выполняет несколько задач геообработки, а затем соединяет таблицу Excel с результатами этих геообработок. Однако модели необходимо сначала открыть файл Excel, чтобы пользователь мог отредактировать его вручную, а затем пользователь сохранит свои изменения и закроет файл. Затем ожидается, что модель присоединит этот файл Excel к таблице атрибутов набора данных (все еще являющейся частью модели), прежде чем модель продолжит выполнение ряда других задач геообработки.

Ниже я приведу схему схемы высокого уровня, чтобы проиллюстрировать это (я понимаю, что начинать с этого может не иметь большого смысла).

Модель будет приостановлена ​​во время редактирования файла Excel, а затем возобновлена ​​после сохранения и закрытия

Таким образом, модель запустится, выполнит несколько задач геообработки, остановится, чтобы открыть файл Excel, подождет, пока пользователь отредактирует его, сохранит и закроет его, прежде чем возобновить присоединение этого файла Excel к таблице атрибутов, а затем выполнить число других задач геообработки.

Я должен представить, что для этого потребуется включить один или два сценария Python в модель. Хотя сейчас мне просто интересно узнать, возможна ли эта концепция на самом деле или нет.

the_bonze
источник
1
Я почти уверен, что со стандартными инструментами построения моделей вы не сможете сделать это, поскольку нет способа приостановить модель, вам также понадобится какой-то триггер, чтобы сказать, что пользователь закрыл Excel, чтобы перезапустить модель. Возможно, вам удастся добиться этого с помощью какого-то сценария, отправляемого в бесконечный цикл, который просматривает флаг в текстовом файле после того, как он породил отдельный процесс (Excel)? Я никогда не делал этого и не знаю, какие подводные камни. Если вы хотите сохранить его в Model Builder, я бы сначала выполнил редактирование Excel, а затем запустил модель.
Хорнбидд
Спасибо @Hornbydd - у меня были те же мысли. Сначала я предложил
отредактировать
1
Я полагаю, что скрипт может посмотреть на дату и время файла, чтобы узнать, был ли он отредактирован, а затем возобновить модель оттуда? Приостановка это проблема, я думаю.
the_bonze
Да, конструктор моделей предназначен для автоматизации рабочего процесса, чтобы ускорить обработку, не имея некоторой неопределенной паузы в середине, что произойдет, если этот пользователь уйдет на обед, например? :) Так же, как я сейчас!
Хорнбидд

Ответы:

1

Похоже, вам нужно больше разрабатывать пользовательский инструмент Python, чем модель в ModelBuilder. xlwtили по xlutilsадресу http://www.python-excel.org/ позволит вам написать в файл Excel ( XlsxWriterбудет обрабатывать файлы xlsx). Если правки незначительны, вы, вероятно, могли бы включить это в стандартный инструмент ArcToolbox (с некоторым творческим подходом). Если вы используете 10.1+, то вы можете создать Python Add-In или Python Toolbox для работы с графическим интерфейсом.

Чед Купер
источник
Python AddIns уже предоставляют сложные опции GUI в 10.1+? Я думал, что только .NET и Java AddIns предоставляют эти ... Python предлагает только AddIns без какого-либо GUI (команды, инструменты).
Юрген Цорниг
1
@ JürgenZornig Это не так просто: anothergisblog.blogspot.com/2013/07/…
Чед Купер
Спасибо @ChadCooper. Мне нужно сохранить модель в построителе моделей, чтобы надстройки Python были хорошими, но модель как сущность должна быть в построителе моделей, а не в полноценном инструменте Python.
the_bonze
@Chad В любом случае, спасибо за это хорошее руководство по быстрому старту ArcPy / Tkinter ... попробуйте это!
Юрген Цорниг
1

Я думал об этом, и, возможно, я нашел новое решение. Вы настраиваете скрипт Python в наборе инструментов с двумя пользовательскими параметрами, во-первых, местоположением Excel EXE. Это может быть даже разумно закодировано для проверки списка жестких кодов вероятных местоположений файловых путей (Office12, Office13 и т. Д.).

Затем используйте функцию subprocess.call. Есть некоторые действительно интересные вещи об использовании этого метода:

  1. Не требует никаких внешних библиотек
  2. функция вызова не разрешает продолжение скрипта, пока Excel не закроется
  3. Вы можете указать документ Excel в качестве второго аргумента
  4. Это одна строка кода!

    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 темпераментный зверь.

Джеймс Милнер
источник