Краткая информация
Эта функция позволяет экспортировать отформатированный табличный отчет с данными из слоев или отдельных таблиц в документ карты наряду со сведениями о шаблоне отчета, которые содержатся в файле компоновки отчета (.rlf).
Описание
Функция ExportReport обеспечивает механизм автоматизации создания отчетов с помощью слоев или таблиц, созданных в документе карты (.mxd), или слоев из файла слоя (.lyr). Файл компоновки отчета, создаваемый в ArcMap, представляет собой шаблон, в котором хранятся сведения о содержимом отчета и расположении его элементов. Файл компоновки отчета создается вместе с исходными данными в документе карты, формируя выходной отчет. С исходными данными также могут быть связаны соединения и относящаяся к ним табличная информация, содержащаяся в отчете.
Исходные данные должны находится в документе карты (.mxd) или в файле слоя (.lyr), а имена полей в наборе данных должны совпадать с аналогичными именами в файле компоновки отчета, чтобы избежать ошибок при выполнении ExportReport. Файл компоновки отчета можно использовать с разными источниками, при условии, что в источнике данных будут те же имена полей в наборе данных. Если данные похожи, но имена полей в наборе данных отличаются, для повторного сопоставления полей в файле компоновки отчета с другими именами полей в наборе данных источника можно использовать параметр field_map.
ArcMap создает в файле компоновки отчета многочисленные элементы, которые не отображаются при экспорте с помощью функции ExportReport. Вам может потребоваться создать коллекцию специальных шаблонов для создания и экспорта отчетов разных типов.
В группе инструментов отчетов в ArcMap есть кнопка Опции набора данных (Dataset options). С помощью этой кнопки пользователь может выбрать один из четырех способов обработки записей: Все (All), Выборка (Selected Set), Отображаемый экстент (Visible Extent) и Запрос определений (Definition Query). Параметр dataset_option работает аналогичным образом по ключевым словам. Параметр dataset_option со значениями ALL или SELECTED позволит обработать соответствующие записи. Если dataset_option имеет значение DEFINITION_QUERY, то для параметра report_definition_query необходимо указать корректную строку с текстом. Если dataset_option имеет значение EXTENT, то для параметра extent необходимо указать корректный объект Extent.
Как и в интерфейсе пользователя, можно использовать только одно ключевое слово dataset_option за один раз. Например, в пользовательском интерфейсе невозможно обработать только выборку записей или только отображаемый экстент. Это же правило применяется и по отношению к функции ExportReport - за один раз может быть задан только один параметр. Если будет задано несколько параметров, один из них переопределит другой. Однако допускается комбинирование стандартных атрибутов ArcPy с функциями пространственных запросов, если при формировании финального отчета для параметра dataset_option задано значение SELECTED. Пример приведен ниже.
Параметр page_range позволяет создавать отчеты по подмножеству страниц. Это могут быть группы страниц, идущих по порядку (5-12) или вразбивку (3,7). В таких случаях, если при создании отчета для параметра starting_page_number задано значение 1, номера страниц в распечатке будут совпадать со значениями, которые вы вводили (страница 3, страница 7). Это разработано для сценариев, поддерживающих повторную печать и вставку в существующие отчеты только выбранных страниц. Если по условиям сценария номера страниц должны идти подряд, например (страница 1, страница 2, необходимо будет задать в качестве значения параметра starting_page_number номер нужной страницы, а для параметра page_range задать одну страницу. Это значит, что ExportReport необходимо выполнить один раз для каждой страницы – один раз с параметрами starting_page_number = 3, page_range="3" и еще один раз с параметрами starting_page_number = 7, page_range="7".
Параметр field_map используется только в тех случаях, когда имена полей в наборе данных отличаются от source_data и от имен полей, использованных при построении файла компоновки отчета. При создании field_map в словарь необходимо добавлять только поля, непосредственно используемые в отчете. Поля, которых нет в словаре, не будут включены в отчет. Отображенные поля должны иметь одинаковый тип данных, в именах полей в field_map учитывается регистр.
Для построения отчетов можно использовать arcpy.mapping, поэтому в отчет можно включить карту. У изображений в отчете есть свойство Исходное изображение (Source Image). У 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 Options), сохраненное в файле компоновки отчета в диалоговом окне Свойства отчета (Report Properties). Если параметр dataset_option не указан, по умолчанию будет использоваться значение, сохраненное в файле компоновки отчета. Если dataset_option имеет значение DEFINITION_QUERY, то для параметра report_definition_query необходимо указать корректную строку с текстом. Если dataset_option имеет значение EXTENT, то для параметра Extent необходимо указать параметр extent. Поскольку дополнительный параметр, который будет использоваться, определяется ключевым словом dataset_option, допускается указывать только один из этих параметров за один раз, так же, как в пользовательском интерфейсе.
(Значение по умолчанию — 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
Этот скрипт является расширенным вариантом предыдущего и показывает, как пространственная выборка работает в сочетании с атрибутивной выборкой при создании требуемого отчета. Это является обязательным требованием, потому что одновременно можно использовать только одну опцию dataset_option. Результаты объединяются в общую выборку, при этом для параметра dataset_option используется значение SELECTED.
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, и для создания отдельного файла PDF используется ExportReport. Все страницы объединяются в один общий файл 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