Delete column before exporting to excel

6824
16
Jump to solution
04-29-2016 09:14 AM
CCWeedcontrol
Occasional Contributor III

I have a script that creates a excel file but i need it to delete the "OID" field prior to exporting to excel, is this possible or does it have to be done after the export?

I have tried the following, it runs fine and i don't get error.

# Process: Make Feature Layer (2)
arcpy.MakeFeatureLayer_management("In_memory\Blah", "In_memory\Blah3")

#fields = arcpy.ListFields("In_memory\Blah3", "OID")
#if len(fields) != 1:
#    arcpy.DeleteField_management("OID")
    
fields = [f.name for f in arcpy.ListFields("In_memory\Blah3")]

for i,f in enumerate(fields):
    if f == 'OID':
        del fields

# Process: Table Select
arcpy.TableToExcel_conversion("In_memory\Blah3",Listing_xls)
0 Kudos
16 Replies
WesMiller
Regular Contributor III

If you are using mail merge it will hurt nothing to leave the OID field in place.

0 Kudos
BlakeTerhune
MVP Regular Contributor

Something like this might work.

# Get list of usable field names (exclude OID and SHAPE fields)
fieldNames = [
    f.name for f in arcpy.ListFields(inputTable)
    if f.type != "Geometry" and f.editable == True
]
DanPatterson_Retired
MVP Emeritus

so you are saying switching to a gdb increases the number of fields you need to delete?? excel macro time

0 Kudos
CCWeedcontrol
Occasional Contributor III

Yes when changing to a geodatabase and exporting it exports the area and shape fields.

I was using a macro but i got tired of having to open the export and run the macro.

0 Kudos
JoshuaBixby
MVP Esteemed Contributor
fc = "C:/Temp/Default.gdb/Blah"   
desc = arcpy.Describe(fc)
flds = [fld.name for fld in desc.fields]
flds_remove = [desc.OIDFieldName,
              desc.shapeFieldName,
              desc.areaFieldName,
              desc.lengthFieldName]
for fld in flds_remove:
    flds.remove(fld)
arcpy.MakeQueryTable_management(fc, "tmp_view", "NO_KEY_FIELD", "", flds)   
#Result 'tmp_view'   
arcpy.TableToExcel_conversion("tmp_view", r"C:/Temp/fc_dump.xls")   
#Result 'C:/tmp/fc_dump.xls' 
arcpy.Delete_management("tmp_view")

If you want it to work with tables as well as feature classes, you would need to add some code to check for a shape field before adding it to flds_remove; otherwise, an error will be generated.

CCWeedcontrol
Occasional Contributor III

Worked. Thanks.

0 Kudos
JoshuaBixby
MVP Esteemed Contributor

If my or someone else's answer addressed your issue, please mark it correct so others know it has been answered.

0 Kudos