Чи може ArcGIS ModelBuilder відкрити файл Excel для ручного редагування, а потім подати ці зміни назад у модель?


10

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

Нижче я включаю схематичний контур високого рівня, щоб проілюструвати точку (я розумію, це може не мати великого сенсу починати).

Модель призупиняється під час редагування файлу Excel, після чого відновиться після збереження та закриття

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

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


1
Я майже впевнений, що зі стандартними інструментами для побудови моделей ви цього не зможете зробити, оскільки немає можливості призупинити модель, вам також знадобиться якийсь тригер для запуску, щоб сказати, що користувач закрив Excel, щоб перезапустити модель. Ви можете досягти цього за допомогою якогось сценарію, який надсилається у нескінченний цикл, дивлячись на прапор у текстовому файлі після того, як він породив окремий процес (Excel)? Я ніколи цього не робив і не знаю, що таке підводні камені. Якщо ви хочете зберегти його в модельєрі, я спершу зробив правки Excel, а потім запустіть модель.
Hornbydd

Дякую @Hornbydd - у мене були такі ж думки. Спочатку редагування файлу, а потім запуск моделі - це те, що я запропонував, але мені сказали, що це має бути одна інтегрована модель ...
the_bonze

1
Я думаю, що сценарій міг би подивитися на дату та часовий штамп файлу, щоб знати, чи він був відредагований, а потім відновити модель звідти? Призупинення це проблема, я думаю.
the_bonze

Так, конструктор моделей розроблений для автоматизації робочого процесу для прискорення обробки, не має певної паузи в середині, що станеться, якщо цей користувач, наприклад, піде на обід? :) Так само, як я зараз!
Хорнбідд

Відповіді:


1

Це здається, що вам потрібно розробити більше спеціального інструменту Python, ніж моделі в ModelBuilder. xlwtабо xlutilsна веб- сайті http://www.python-excel.org/ дозволять писати у файл Excel ( XlsxWriterобробляє xlsx файли). Якщо зміни незначні, ви, ймовірно, можете включити це в стандартний інструмент ArcToolbox (з деякою творчістю). Якщо ви використовуєте 10.1+, тоді ви можете створити надбудову Python або панель інструментів Python для роботи графічного інтерфейсу.


Чи надають 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 Quickstart ... доведеться спробувати це!
Юрген Зорніг

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.