1

Here's the code for the third parameter that list the local printers:

# Third Parameter
printer = arcpy.Parameter(
 displayName="Select a Printer",
 name="printer",
 datatype="String",
 parameterType="Required",
 direction="Input")
# Set a value list for the available local printers
printer.filter.type = "ValueList"
printer.filter.list = arcpy.mapping.ListPrinterNames()

This works and lists all of my local printers. The problem is it can't print the looped MXDs. It looks like python can't find them in the loop according to my arcpy.AddMessage(). Here's the code:

# Get inputs
InputMXD = parameters[0].valueAsText
PDF_Folder = parameters[1].valueAsText
printer = parameters[2].valueAsText
# Set workspace as defined by user
#env.workspace = PDF_Folder
arcpy.env.workspace = r"c:/temp"
#List Names for Inputs
arcpy.AddMessage("PDF_Output: "+PDF_Folder)
arcpy.AddMessage("Printer Name: "+printer)
arcpy.AddMessage("MXDs before Loop: "+InputMXD)
MXDList = arcpy.ListFiles(InputMXD)
arcpy.AddMessage("After MXDList")
arcpy.AddMessage(MXDList)
for MXDPath in MXDList:
 arcpy.AddMessage("MXD Path: " + MXDPath)
 MXD = arcpy.mapping.MapDocument(MXDPath)
 arcpy.AddMessage("MXD: " + MXD)
 arcpy.mapping.PrintMap(MXD, printer)

ArcMessage

It's showing the mxds before the loop, but it isn't printing them once the loop hits. Any ideas? It's showing "[]" when it should be showing what's in the "MXDList".


Update 2

When I use this:

 MXDList = glob.glob(os.path.join(InputMXD, '*.mxd'))

I got the same result as the image above. It's still not running through the loop. Here is my parameter setup for the InputMXD.

 # First parameter
 InputMXD = arcpy.Parameter(
 displayName="Input MXDs",
 name="InputMXD",
 datatype="DEMapDocument",
 parameterType="Required",
 direction="Input",
 multiValue=True)

When I use this code with workspace set to my InputMXD:

 MXDList = arcpy.ListFiles("*.mxd")

I get this result. It doesn't want to list my MXDList.
enter image description here


Updated 3

When I try the newest code with the AddMessage and put my printing code below it the results say this.

enter image description here

Traceback (most recent call last):
 File "", line 104, in execute
 File "c:\program files (x86)\arcgis\desktop10.1\arcpy\arcpy\arcobjects\mixins.py", line 609, in __init__
 assert (os.path.isfile(mxd) or (mxd.lower() == "current")), gp.getIDMessage(89004, "Invalid MXD filename")
AssertionError: Invalid MXD filename.
PolyGeo
65.5k29 gold badges115 silver badges349 bronze badges
asked Feb 6, 2014 at 18:56

1 Answer 1

2

To loop over each value, do something like this:

for mxd in parameters[0].values:
 arcpy.AddMessage("Processing MXD: {}".format(mxd))
 # Do something interesting here
answered Feb 6, 2014 at 19:01
10
  • I have my input for the InputMXD as DEMapDocument. Would I still need to add the (".MXD")? Commented Feb 6, 2014 at 19:18
  • Misread your question. Editing answer. Commented Feb 6, 2014 at 19:20
  • This seems to be working, but I'm having an issue with an invalid MXD file name. Commented Feb 6, 2014 at 20:09
  • Looks like when I run it now it will just give me a C inside of the loop (im guessing from the Cdrive). Do I want it to display the parameters[0].values or parameters[0].valueAsText? Commented Feb 6, 2014 at 20:27
  • If you use parameters[0].valueAsText, do for mxd in parameters[0].valueAsText.split(';'). Commented Feb 6, 2014 at 20:32

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.