MapDocument
Summary
Provides access to map document (.mxd) properties and methods. A reference to this object is essential for most map scripting operations.
Discussion
For a more complete discussion refer to the MapDocument Class help.
Syntax
Parameter | Explanation | Data Type |
mxd_path |
A string that includes the full path and file name of an existing map document (.mxd) or a string that contains the keyword CURRENT. | String |
Data Type | Explanation |
MapDocument |
The MapDocument object provides access to map document properties and methods. A reference to this object is essential for most map scripting operations. |
Code Sample
The following script creates a separate MXD file for each data frame in a map document. The output map documents will be saved in data view mode so when each map document is opened, the corresponding data frame will be active data frame. The script also sets the title property of each output map document. Because this script uses a system path to the map document, it can be executed outside an ArcMap application. Note: Python strings cannot end with a backslash, even when the string is preceded by an r. You must use a double backslash. This becomes important when appending dynamic file names to a folder path.
import arcpy mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd") for df in arcpy.mapping.ListDataFrames(mxd): mxd.activeView = df.name mxd.title = df.name mxd.saveACopy(r"C:\Project\Output\\" + df.name + ".mxd") del mxd
The following script demonstrates how the CURRENT keyword can be used within the Python window. This sample will update the first data frame's name and refresh the table of contents so the change can be see in the application. Paste the following code into the Python window within a new ArcMap document. The three dots to the left of the code block indicate that the lines are a single block of code that will be executed together . You must press the Enter key to execute these lines.
mxd = arcpy.mapping.MapDocument("CURRENT") arcpy.mapping.ListDataFrames(mxd)[0].name = "New Data Frame Name" arcpy.RefreshTOC() del mxd #when pasted into the interactive window it will appear as follows: >>> mxd = arcpy.mapping.MapDocument("CURRENT") ... arcpy.mapping.ListDataFrames(mxd)[0].name = "New Data Frame Name" ... arcpy.RefreshTOC() ... del mxd ...
The following is another simple script that demonstrates the use of the CURRENT keyword within the Python window. Each layer name will be printed to the Python window. Loops are also possible, provided that you maintain the correct indentation. Similar to the example above, paste the code below into the Python window. Again, press the Enter key to execute the lines.
mxd = arcpy.mapping.MapDocument("CURRENT") for lyr in arcpy.mapping.ListLayers(mxd): print lyr.name del mxd #when pasted into the interactive window it will appear as follows: >>> mxd = arcpy.mapping.MapDocument("CURRENT") ... for lyr in arcpy.mapping.ListLayers(mxd): ... print lyr.name ... del mxd ...
The following script will allow secured layers to render correctly by creating an SDE connection in memory before opening a map document that requires password information. This script simply defines the connection information and exports the map document to a PDF file. It is good practice to delete this reference from memory before the script closes.
import arcpy, os #Remove temporary connection file if it already exists sdeFile = r"C:\Project\Output\TempSDEConnectionFile.sde" if os.path.exists(sdeFile): os.remove(sdeFile) #Create temporary connection file in memory arcpy.CreateArcSDEConnectionFile_management(r"C:\Project\Output", "TempConnection", "myServerName", "5151", "myDatabase", "DATABASE_AUTH", "myUserName", "myPassword", "SAVE_USERNAME", "myUser.DEFAULT", "SAVE_VERSION") #Export a map document to verify that secured layers are present mxd = arcpy.mapping.MapDocument(r"C:\Project\SDEdata.mxd") arcpy.mapping.ExportToPDF(mxd, r"C:\Project\output\SDEdata.pdf") os.remove(sdeFile) del mxd