ExportReport

Резюме

Эта функция позволяет экспортировать отформатированный табличный отчет с данными из слоев и отдельных таблиц в документ карты наряду со сведениями о шаблоне отчета, которые содержатся в выходном файле отчета (.rlf).

Обсуждение

Функция ExportReport предоставляет механизм автоматизации создания отчетов, изначально создаваемых в документе карты (.mxd) с помощью инструментов отчетов в ArcMap. Файл компоновки отчета, создаваемый в ArcMap, представляет собой шаблон, в котором хранятся сведения о содержимом отчета и расположении его элементов. Файл компоновки отчета создается вместе с исходными данными в документе карты, формируя выходной отчет. С исходными данными также могут быть связаны соединения и относящаяся к ним табличная информация, содержащаяся в отчете.

ПримечаниеПримечание:

Функция ExportReport зависит от наличия на компьютере ArcMap. Следовательно, функция ExportReport может выполняться только на компьютерах, на которых установлено ArcMap. ExportReport не запускается с помощью автономных установок ArcGIS Engine или ArcGIS for Server. Кроме того ExportReport не будет работать как служба геообработки.

Исходные данные должны быть в документе карты (.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 с функциями пространственных запросов, если при формировании финального отчета задано значение 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 будет выполняться один раз для каждой страницы. Например, один раз с параметрами 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

Ссылка на объект Layer или TableView.

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 определяет, какой дополнительный параметр использовать, может быть указан только один из этих параметров, так же как и в пользовательском интерфейсе.

  • ALLЗамещает опцию файла компоновки отчета и обрабатывает все записи источника данных.
  • DEFINITION_QUERYЗамещает опцию файла компоновки отчета и создает новый или обновленный определяющий запрос.
  • EXTENTЗамещает опцию файла компоновки отчета и создает новый или обновленный экстент.
  • SELECTEDЗамещает опцию файла компоновки отчета и обрабатывает только выбранные записи.
  • USE_RLFИспользует настройки, сохраненные в файле компоновки отчета.

(Значение по умолчанию — 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:

field_map={'rlf_field1':'data_source_field1', 'rlf_field2':'data_source_field2'}

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

Этот скрипт является расширенным вариантом предыдущего и показывает, как пространственная выборка работает в сочетании с атрибутивной выборкой при создании требуемого отчета. Это является обязательным требованием, так как нельзя использовать несколько опций 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. Пример 3

Это скрипт обрабатывает существующий файл компоновки отчета и несоответствующий ему набор данных с отличающимися именами полей. Алгоритм заменяет название файла компоновки отчета новым и выполняет сопоставление полей, используя параметр 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. Пример 4

Этот скрипт демонстрирует вставку карты в отчет. Создается многостраничный отчет. На каждой странице есть большое изображение текущего фрагмента экстента данных и отчет с информацией о пространственных объектах в экстенте. После изменения всех фрагментов данных экстентов фрагмент данных экспортируется в файл .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
9/11/2013