サマリー
マップ ドキュメント内のレイヤーまたはスタンドアロン テーブルのデータを使用しているテーブル形式の書式設定済みレポートを、レポート レイアウト ファイル (*.rlf) で提供されるレポート テンプレート情報とともにエクスポートします。
説明
ExportReport 関数には、マップ ドキュメント (*.mxd) で作成されたレイヤーまたはテーブルを使用するか、レイヤー ファイル (*.lyr) 内のレイヤーを使用して、レポートの生成を自動化するメカニズムがあります。ArcMap で作成されるレポート レイアウト ファイルは、レポート内のアイテムのコンテンツと配置に関する情報を保存するテンプレートです。レポート レイアウト ファイルをマップ ドキュメント内のソース データとともに使用することにより、出力レポートが作成されます。ソース データには、レポート内で使用される、関連付けられている結合および関連テーブル情報も含まれる場合があります。
ExportReport を正しく実行するには、ソース データがマップ ドキュメント (*.mxd) またはレイヤー ファイル (*.lyr) 内にすでに存在し、ソース データのデータセット フィールド名がレポート レイアウト ファイルのフィールド名と一致している必要があります。異なるデータ ソースでも、同じデータセット フィールド名が存在していれば、そのデータソースとともにレポート レイアウト ファイルを使用することができます。データが同じでもデータ ソースのフィールド名が異なる場合は、field_map パラメーターを使用して、レポート レイアウト ファイルのフィールドをソース データセットの別のフィールド名にリマップすることができます。
ArcMap 内にレポート レイアウト ファイルで作成されているが、ExportReport 関数を介して直接公開されていないエレメントは数多くあります。異なるレポート シナリオを生成してエクスポートするには、テンプレートのコレクションを個別に作成する必要があります。
ArcMap ユーザー インターフェイスのレポート ツールには、[データセット オプション] という名前のボタンがあります。作成者はここから、[すべて]、[選択セット]、[表示範囲]、および [フィルター設定] の 4 通りの方法から 1 つを選択することができます。dataset_option パラメーターはこのボタンと同じ役割を果たすものであり、キーワードが使用されます。dataset_option を ALL または SELECTED に設定すると、適切なレコードが処理されます。dataset_option を DEFINITION_QUERY に設定した場合は、report_definition_query パラメーターに有効な文字列を指定する必要があります。dataset_option を EXTENT に設定した場合は、extent パラメーターに有効な [範囲] オブジェクトを指定する必要があります。
ユーザー インターフェイスの場合と同様に、一度に 1 つの dataset_option キーワードしか使用できません。たとえば、ユーザー インターフェイスの場合、選択したレコード セットのみ、および表示範囲のレコードのみを処理することはできません。この規則は ExportReport 関数にも適用され、一度に 1 つのパラメーターしか設定できません。複数のパラメーターが設定された場合、パラメーターは互いに上書きされます。ただし、標準の ArcPy 属性と空間検索関数は組み合わせることが可能であり、値が SELECTED の dataset_option パラメーターと併用すると、最終的な目的のレポートを生成することができます。以下にこの例を示しています。
page_range パラメーターでは、ページのサブセットのみを対象にしたレポートを生成できます。これには、連続したページ グループ (5-12) や、不連続のページ セット (3,7) を指定できます。このような場合、starting_page_number を 1 に設定してレポートを生成すると、出力されるページ番号が入力した値と同じになります (Page 3, Page 7)。これは、選択したページ番号だけを再度印刷し、既存のレポートに挿入するシナリオを想定して設計されています。出力されるページ番号を連続させる必要がある場合 (Page 1, Page 2 など)、starting_page_number には対象のページ番号を指定し、page_range には単一のページを設定する必要があります。つまり、ExportReport はページごとに 1 回実行する必要があります。たとえば、starting_page_number = 3, page_range="3" で 1 回実行し、starting_page_number = 7, page_range="7" でもう 1 回実行します。
field_map パラメーターが必要となるのは、source_data のデータセット フィールド名と、レポート レイアウト ファイルの作成に使用されているフィールド名が異なる場合だけです。field_map を作成する際は、レポートで使用されているフィールドだけをディクショナリに追加する必要があります。フィールドがフィールド マップ ディクショナリから削除されると、それらのフィールドはレポートから削除されます。マップされた各フィールドのデータ タイプは同じでなければならないため、field_map のフィールド名では大文字と小文字が区別されます。
arcpy.mapping を使用してレポートを作成すると、レポート内にマップを配置することが可能になります。レポート内のピクチャには、ソース画像と呼ばれるプロパティがあります。arcpy.mapping にはこの値に対するアクセス権限がありませんが、ソース画像の値がディスク上のパスを指している場合、arcpy.mapping はエクスポート操作を使用してディスク上のファイルを更新することが可能であり、レポート エンジンは現在使用可能な画像を使用します。たとえばデータ ドリブン ページの場合、次のページを呼び出す前に arcpy.mapping を使用して、現在の範囲に基づいてピクチャを変更することができます。以下にこの例を示しています。
ArcGIS でのレポートの作成については、次の参考トピックをご参照ください。
構文
ExportReport (report_source, report_layout_file, output_file, {dataset_option}, {report_title}, {starting_page_number}, {page_range}, {report_definition_query}, {extent}, {field_map})
パラメーター | 説明 | データ タイプ |
report_source | Object | |
report_layout_file | レポート レイアウト ファイル (*.rlf) のパスとファイル名を表す文字列 | String |
output_file | 出力ファイルのパスとファイル名を表す文字列。指定したファイル拡張子によって出力形式が決まります。指定できる拡張子/形式は、.htm、.html、.pdf、.rtf、.tif、.tiff、.txt、および .xls です。 | String |
dataset_option | 出力レポートで処理されるデータセット行を表すキーワード。この値により、[レポート プロパティ] ダイアログ ボックス内のレポート レイアウト ファイルに格納されている [データセット オプション] の値が無効になります。dataset_option パラメーターを設定しないと、レポート レイアウト ファイルに格納されている値がデフォルト値として設定されます。dataset_option を DEFINITION_QUERY に設定した場合は、report_definition_query パラメーターに有効な文字列を指定する必要があります。dataset_option を EXTENT に設定した場合は、extent パラメーターに有効な Extent オブジェクトを指定する必要があります。dataset_option キーワードによって、どの追加パラメーターを使用するかが決まるため、ユーザー インターフェイスの場合と同様に、これらのパラメーターは一度に 1 つしか設定できません。
(デフォルト値は次のとおりです USE_RLF) | String |
report_title | レポートのタイトルを表す文字列。レポート レイアウト ファイルのヘッダー セクションに表示されます。 | String |
starting_page_number | 出力レポートの先頭ページに出力されるページ番号を表す数値。この値は、既存のドキュメントの末尾に付加されるレポートのページ番号をオフセットする場合に有効です。 (デフォルト値は次のとおりです 1) | Long |
page_range | ファイルにエクスポートされるレポートのページを識別する文字列 (例: 1, 3, 5–12) | String |
report_definition_query | どの行を出力レポートにエクスポートするかを決める有効なフィルター設定を表す文字列。このパラメーターを設定できるのは、dataset_option パラメーターが DEFINITION_QUERY に設定されている場合に限ります。この値により、レポート レイアウト ファイルに格納されている設定値が上書きされます。report_source レイヤーまたはテーブルにすでにフィルター設定が存在する場合は、レコードの既存のサブセットに report_definition_query が適用されます。 | String |
extent | Extent オブジェクト このパラメーターを設定できるのは、dataset_option パラメーターが EXTENT に設定されている場合に限ります。extent オブジェクトがこのパラメーターに渡されると、範囲と交差するフィーチャに基づいて行が設定されます。 | Extent |
field_map | このパラメーターを指定すると、データ タイプが同じでもフィールド名が異なるデータ ソースでレポート レイアウト ファイルを使用できます。マップされたフィールド名のディクショナリを使用して、レポート レイアウト ファイルのフィールドをデータ ソースの新しいフィールドにリマップします。 field_map ディクショナリ構造の例を次に示します。
| Dictionary |
コードのサンプル
ExportReport の例 1
次のスクリプトは、マップ ドキュメント内のレイヤーの選択フィーチャを使用して、レポートを PDF ファイルにエクスポートします。extent パラメーター名が明示的に入力され、その他のオプション パラメーターはスキップされています。
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "Transportation")[0]
lyr = arcpy.mapping.ListLayers(mxd, "Accidents", df)[0]
arcpy.mapping.ExportReport(lyr,
r"C:\Project\Project.rlf",
r"C:\Project\Output\ProjectReport.pdf",
"EXTENT",
extent=df.extent)
del mxd
ExportReport の例 2
次のスクリプトは上記の例に似ていますが、レイヤー ファイル内のレイヤーを参照として使用しています。
lyr = arcpy.mapping.Layer(r"C:\Project\Layers\Transportation.lyr")
arcpy.mapping.ExportReport(lyr,
r"C:\Project\Project.rlf",
r"C:\Project\Output\ProjectReport.pdf",
"EXTENT",
extent=df.extent)
del mxd
ExportReport の例 3
次のスクリプトは上記の例を拡張したもので、空間選択と属性選択の組み合わせによって目的のレポートを生成する方法を示しています。一度に 1 つの dataset_option しか使用できないため、これが必要となります。この結果、単一の選択肢に結合され、SELECTED パラメーターの値として dataset_option が使用されます。
import arcpy mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd") df = arcpy.mapping.ListDataFrames(mxd, "Transportation")[0] lyr = arcpy.mapping.ListLayers(mxd, "Accidents", df)[0]
#The DataFrame extent object is converted into a polygon feature so it can be used with the SelectLayerByLocation function. dfAsFeature = arcpy.Polygon(arcpy.Array([df.extent.lowerLeft, df.extent.lowerRight, df.extent.upperRight, df.extent.upperLeft]), df.spatialReference) arcpy.SelectLayerByLocation_management(lyr, "INTERSECT", dfAsFeature, "", "NEW_SELECTION") arcpy.SelectLayerByAttribute_management(lyr, "SUBSET_SELECTION", "\"Accidents\" > 3") arcpy.mapping.ExportReport(lyr, r"C:\Project\Project.rlf", r"C:\Project\Output\ProjectReport.pdf", "SELECTED")
del mxd
ExportReport の例 4
次のスクリプトでは、異なるフィールド名を持つ異なるデータセットに対し、既存のレポート レイアウト ファイルを使用します。レポート レイアウト ファイルのタイトルが新しいタイトルで上書きされ、field_map パラメーターでフィールドがリマップされます。
import arcpy mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd") df = arcpy.mapping.ListDataFrames(mxd, "Transportation")[0] lyr = arcpy.mapping.ListLayers(mxd, "Traffic Lights", df)[0] arcpy.mapping.ExportReport(lyr, r"C:\Project\Project.rlf", r"C:\Project\Output\ProjectReport.pdf", report_title="Traffic Light Coordinates", field_map={'Accidents':'LightID','X':'Longitude','Y':'Latitude'})
del mxd
ExportReport の例 5
次のスクリプトは、マップをレポートに挿入する方法を示しています。複数ページのレポートが生成されます。各ページには、現在のデータ フレーム範囲を表示する大きなピクチャと、範囲内のフィーチャに関する情報を提供するレポートが含まれています。各データ フレーム範囲を変更すると、データ フレームが *.emf ファイルにエクスポートされ、ExportReport を使用して単一の PDF が作成されます。すべてのページは、最終的な単一の PDF に結合されます。
import arcpy, os path = os.getcwd() #a relative path allowing for easy packaging
#Create PDF and remove if it already exists pdfPath = path + r"\States_SubRegions.pdf"
if os.path.exists(pdfPath):
os.remove(pdfPath) pdfDoc = arcpy.mapping.PDFDocumentCreate(pdfPath)
subRegionList = ["East North Central", "East South Central", "Middle Atlantic", "Mountain", "New England", "Pacific", "South Atlantic", "West North Central", "West South Central"]
mxd = arcpy.mapping.MapDocument(path + r"\States_SubRegions.mxd") df = arcpy.mapping.ListDataFrames(mxd)[0] lyr = arcpy.mapping.ListLayers(mxd, "States")[0]
pageCount = 1 for region in subRegionList:
#Generate image for each sub region whereClause = "\"SUB_REGION\" = '" + region + "'"
lyr.definitionQuery = whereClause arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", whereClause) df.extent = lyr.getSelectedExtent() arcpy.SelectLayerByAttribute_management(lyr, "CLEAR_SELECTION") arcpy.mapping.ExportToEMF(mxd, path + "\RegionalPicture.emf", df) #single file
#Generate report arcpy.mapping.ExportReport(report_source=lyr, report_layout_file=path + r"\States_SubRegions.rlf", output_file=path + r"\temp" + str(pageCount) + ".pdf", starting_page_number=pageCount)
#Append pages into final output pdfDoc.appendPages(path + r"\temp" + str(pageCount) + ".pdf") os.remove(path + r"\temp.pdf") pageCount = pageCount + 1
pdfDoc.saveAndClose()
del mxd