日本語

操作手順: Python スクリプトを使用して複数の MXD のテキスト エレメントを同時に変更

概要

マップ ドキュメント (MXD) を操作する場合、データの変更または改訂のためにテキスト エレメントを置換または更新する必要が生じることがあります。 Python の text.Split() 関数を使用すると、各 MXD 内のテキストを個別に更新するのではなく、複数の MXD のテキスト エレメントを同時に置き換えることができるので、時間を節約できます。

手順

ArcMap で Python スクリプトを使用して、MXD の古いテキスト エレメントと新しいテキスト エレメントを格納する 2 つのテキスト リストを作成し、最初のリストと一致するテキスト エレメントを 2 つ目のリスト内の対応するテキストに変更します。 そのための手順は次のとおりです。

  1. スクリプト ツールの追加」ドキュメントに示された手順を使用して、カスタム ツールを作成します。 テキスト エディターで以下の Python コードを保存して、このファイルをツールのスクリプト ファイルとして追加します。
import arcpy
from arcpy import env
import os
arcpy.env.overwriteOutput = True

#set path to the relevant folder
arcpy.env.workspace = Input_Workspace = arcpy.GetParameterAsText(0)
Output_Workspace = arcpy.GetParameterAsText(1)
Old_Text = arcpy.GetParameterAsText(2)
oldList = Old_Text.split(', ') #set the comma as separator for multiple inputs
New_Text = arcpy.GetParameterAsText(3)
newList = New_Text.split(', ')

#list the mxds of the workspace folder
for mxdname in arcpy.ListFiles("*.mxd"):    
    arcpy.AddMessage(mxdname)
#set the variable
    mxd = arcpy.mapping.MapDocument(Input_Workspace + "\\" + mxdname)
#replace elements that occur in the map document
    for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):
        counter = 0
        for text in oldList:
            if text in elm.text:
                elm.text = elm.text.replace(text, newList[counter])
                arcpy.AddMessage('{} changed'.format(elm.text))
                counter = counter + 1
            else:
                counter = counter + 1

    mxd.saveACopy(Output_Workspace + "\\" + mxdname)
上記の Python コードには、ツール パラメーター (Input_WorkspaceOutput_WorkspaceOld_TextNew_Text) に対応する 4 つの GetParameterAsText インスタンスが含まれています。 [スクリプトの追加] ダイアログ ボックスで、次の例を使用してパラメーターを設定し、[完了] をクリックします。

The parameters of the tool
  1. [カタログ] ウィンドウで、カスタム ツールの名前をダブルクリックしてツールを開きます。
  2. ツール ウィンドウが開いたら、MXD を含むフォルダー (ワークスペース) を追加し、出力フォルダーを指定して、[Old_Text] フィールドに置換元のテキスト、[New_Text] フィールドに更新後のテキストをそれぞれ入力します。 各テキスト文字列はカンマで区切ります (次の図を参照)。
The parameters of the custom tool
注意:
このスクリプトは、名前のアルファベット順に MXD を反復処理します。 テキスト エレメントの更新時には、アルファベット順が最初の MXD から開始されるので、必要に応じて変更を実行できます。
注意:
[Old_Text] にテキストを入力するときには、置換元のテキスト エレメントが各 MXD に表示される内容と正確に一致していることを確認します。 一致していない場合は、スクリプトがテキストを認識せず、出力の MXD に変更が反映されません。
  1. [OK] をクリックして、このツールを実行します。 更新後の MXD が作成され、指定した出力フォルダーに保存されます。

関連情報