ArcGIS ModelBuilderはExcelファイルを開いて手動で編集し、それらの編集をモデルにフィードバックできますか?


10

私は、ArcGIS ModelBuilderを使用してモデルを作成し、最初にいくつかのジオプロセシングタスクを実行してから、Excelテーブルをそれらのジオプロセスの結果に結合することを任されています。ただし、ユーザーが編集を保存してファイルを閉じる前に、ユーザーが手動で編集できるように、モデルはまずExcelファイルを実際に開く必要があります。その後、モデルが他の多くのジオプロセシングタスクを続行する前に、モデルがこのExcelファイルをデータセット(まだモデルの一部)の属性テーブルに結合することが期待されます。

ポイントの説明に役立つ高レベルの回路図の概要を以下に含めます(これは、最初はあまり意味がないかもしれませんが理解しています)。

Excelファイルの編集中はモデルが一時停止し、保存して閉じると再開します

したがって、モデルが実行され、いくつかのジオプロセシングタスクを完了し、一時停止してExcelファイルを開き、ユーザーが編集して保存して閉じるのを待ってから、そのExcelファイルを属性テーブルに結合し、数値を実行します。その他のジオプロセシングタスク。

これには、1つまたは2つのPythonスクリプトをモデルに組み込む必要があると想像する必要があります。現在、このコンセプトが実際に可能かどうかを知りたいだけです。


1
標準のモデルビルダーツールでは、モデルを一時停止する方法がないため、これを実行することはできません。また、ユーザーがモデルを再起動するためにExcelを閉じたことを通知するための何らかのトリガーが必要です。別のプロセス(Excel)を起動した後、テキストファイル内のフラグを確認する無限ループに送られるある種のスクリプトでこれを達成できる場合がありますか?私はそれをやったことがなく、落とし穴が何であるかわかりません。モデルビルダーで保持したい場合は、最初にExcelの編集を行ってから、モデルを実行します。
Hornbydd

ありがとう@Hornbydd-私は同じ考えを持っていました。最初にファイルを編集してからモデルを実行することをお勧めしますが、統合されたモデルである必要があると言われています...
the_bonze

1
スクリプトがファイルの日付とタイムスタンプを調べて、ファイルが編集されているかどうかを確認し、そこからモデルを再開できると思いますか。一時停止が問題だと思います。
the_bonze 2013

ええ、モデルビルダーはワークフローを自動化して処理を高速化するように設計されており、途中で不確定な一時停止が発生しません。たとえば、ユーザーが昼食に出かけた場合はどうなりますか?:)今の私のように!
Hornbydd

回答:


1

これは、ModelBuilderのモデルよりも多くのカスタムPythonツールを開発する必要があるようです。xlwtまたはxlutilshttp://www.python-excel.org/(あなたがあなたのExcelファイルに書き込むようになるXlsxWriterのxlsxファイルを処理します)。編集がマイナーである場合、おそらくこれを標準のArcToolboxツールに組み込むことができます(いくつかの創造性があります)。10.1以降を使用している場合は、PythonアドインまたはPythonツールボックスを作成して、GUIを動作させることもできます。


Python AddInsは10.1以降ですでに高度なGUIオプションを提供していますか?.NETとJavaのアドインだけがこれらを提供するものだと思っていました... PythonはGUI(コマンド、ツール)なしでアドインのみを提供します。
ユルゲン・Zornig

1
:JürgenZornigそれのない簡単thaaaat @ anothergisblog.blogspot.com/2013/07/...
チャド・クーパー

@ChadCooperに感謝します。モデルビルダーにモデルを保持する必要があるため、Pythonアドインは問題ありませんが、エンティティとしてのモデルは、本格的なPythonツールではなくモデルビルダーに存在する必要があります。
the_bonze 2013

@Chadとにかく、この素敵なArcPy / Tkinterクイックスタートチュートリアルをありがとう...これを試さなければなりません!
ユルゲン・Zornig

1

私はそれについて考えていました、そして私が新しい解決策を見つけた可能性があります。ツールボックスにPythonスクリプトを設定し、最初にExcel EXEの場所という2つのユーザーパラメータを設定します。これは、ハードコードの可能性のあるファイルパスの場所(Office12、Office13など)のリストをチェックするようにスマートにコーディングすることもできます。

次に、subprocess.call関数を使用します。この方法を使用することに関して、いくつかの本当に素晴らしい点があります:

  1. 外部ライブラリは必要ありません
  2. 呼び出し関数は、Excelが閉じられるまでスクリプトの継続を許可しません
  3. 2番目の引数としてExcelドキュメントを指定できます
  4. コードは1行です。

    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は知っているはずです。気質的な獣。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.