在ArcMap中可以制作Python加载项来添加一些功能实用的小工具。
学习Python加载项可以参考:

使用python制作ArcGIS插件(1)工具介绍使用python制作ArcGIS插件(2)代码编写使用python制作ArcGIS插件(3)ArcPy的使用说明使用python制作ArcGIS插件(4)界面交互使用python制作ArcGIS插件(5)其他技巧使用python制作ArcGIS插件(6)案例分析

下图的小班编号工具就是Python加载项

python word 设置编号格式 python自动编号_图层

 点击启用工具,在下拉列表中选好要编号的图层和字段,输入起始编号后回车就可以点击编号工具开始编号了
起始编号值默认为1,每点击一个小班会把编号值计算到选好的字段中,然后编号值会加1

下面是小班编号工具Python加载项中config.xml的代码:

<ESRI.Configuration xmlns="http://schemas.esri.com/Desktop/AddIns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Name>xiaobanbianhao</Name><AddInID>{5eb1c9bf-e5bb-4c0e-98ff-4e6abcb61f42}</AddInID><Description>xiaobanbianhaogongjv</Description><Version>0.1</Version><Image>Images\58e54c7f1eb7c7f6.png</Image><Author>ZX</Author><Company>GIS</Company><Date>12/13/2021</Date><Targets><Target name="Desktop" version="10.1" /></Targets><AddIn language="PYTHON" library="xiaobanbianhao_addin.py" namespace="xiaobanbianhao_addin"><ArcMap>
    <Commands>
        <Button caption="启用" category="xiaobanbianhao" class="ButtonClass1" id="xiaobanbianhao_addin.button1" image="Images\2021-12-15_102733.png" message="启用小班编号工具" tip="启用工具"><Help heading="启用工具">启用小班编号工具</Help></Button>
        <ComboBox caption="图层" category="xiaobanbianhao" class="ComboBoxClass1" id="xiaobanbianhao_addin.combobox1" itemSizeString="WWWWWW" message="选择要编号的图层" rows="4" sizeString="WWWWWW" tip="选择图层"><Help heading="选择图层">选择要编号的图层</Help></ComboBox>
        <ComboBox caption="字段" category="xiaobanbianhao" class="ComboBoxClass2" id="xiaobanbianhao_addin.combobox2" itemSizeString="WWWWWW" message="选择要编号的字段" rows="4" sizeString="WWWWWW" tip="选择字段"><Help heading="选择字段">选择要编号的字段</Help></ComboBox>
        <ComboBox caption="起始编号" category="xiaobanbianhao" class="ComboBoxClass3" id="xiaobanbianhao_addin.combobox3" itemSizeString="WWWWWW" message="在框中输入编号起始值,默认值为1" rows="4" sizeString="WWWWWW" tip="输入起始编号"><Help heading="输入起始编号">在框中输入编号起始值,默认值为1</Help></ComboBox>
        <Tool caption="编号工具" category="xiaobanbianhao" class="ToolClass5" id="xiaobanbianhao_addin.tool1" image="Images\2021-12-13_153614_16.png" message="从起始编号开始,点击小班依次编号" tip="点击小班编号"><Help heading="点击小班编号">从起始编号开始,点击小班依次编号</Help></Tool>
        </Commands>
    <Extensions>
        </Extensions>
    <Toolbars>
        <Toolbar caption="小班编号" category="xiaobanbianhao" id="xiaobanbianhao_addin.toolbar" showInitially="true"><Items><Button refID="xiaobanbianhao_addin.button1" /><ComboBox refID="xiaobanbianhao_addin.combobox1" /><ComboBox refID="xiaobanbianhao_addin.combobox2" /><ComboBox refID="xiaobanbianhao_addin.combobox3" /><Tool refID="xiaobanbianhao_addin.tool1" /></Items></Toolbar>
        </Toolbars>
    <Menus>
        </Menus>
    </ArcMap></AddIn></ESRI.Configuration>

下面是小班编号工具Python加载项中『Install』文件夹下xiaobanbianhao_addin.py的代码:

import arcpy
import pythonaddins

class ZX:
    tucengming=""    #图层名
    ziduanming=""    #字段名

class ButtonClass1(object):    #启用工具按钮
    def __init__(self):
        self.enabled = True
        self.checked = False    #按钮初始状态没有被选中
    def onClick(self):    #点击按钮启用图层组合框并为图层组合框下拉列表赋值
        list1=[]
        mxd = arcpy.mapping.MapDocument("CURRENT")    #获取当前工程
        for lyr in arcpy.mapping.ListLayers(mxd):    #获取当前工程所有图层
            list1.append(lyr.name)    #把图层名(图层对象lyr的name属性)追加到列表list1
        combobox1.enabled = True    #启用图层组合框(图层组合框的变量名为combobox1,与config.xml中id="xiaobanbianhao_addin.combobox1"中的combobox1相同)
        combobox1.items = list1    #为图层组合框下拉列表赋值
        combobox1.refresh()    #刷新图层组合框
        arcpy.RefreshActiveView()


class ComboBoxClass1(object):    #图层组合框
    def __init__(self):
        self.items = []    #初始状态时组合框下拉列表
        self.editable = True
        self.enabled = False    #图层组合框初始状态没有启用
        self.dropdownWidth = 'ZZZZZ'    #几个相同的字符表示组合框下拉列表的长度为几
        self.width = 'XXXXXXXXX'    #几个相同的字符表示组合框的宽度为几
        self.value="ZX"    #初始状态时组合框内显示的字符
    def onSelChange(self, selection):    #点击组合框下拉列表选项时触发
        self.value=selection    #组合框内显示的内容赋值为下拉列表选中内容
        self.refresh()    #刷新
        list2=[]
        ZX.tucengming = selection    #ZX类tucengming属性赋值为下拉列表选中内容
        mxd = arcpy.mapping.MapDocument("CURRENT")    #获取当前工程
        lyr=arcpy.mapping.ListLayers(mxd,ZX.tucengming)[0]    #获取当前工程图层名为ZX.tucengming属性值的图层
        if lyr.supports("DATASOURCE") and lyr.supports("DESCRIPTION"):    #测试lyr图层是否支持图层的完整路径和描述两种属性
            lyr_dataSource=lyr.dataSource    #获取图层的完整路径
            lyr.description="1"    #图层的描述属性赋值为1,这个属性是可读写属性,相当于全局变量,用来记录小班号
            fields = arcpy.ListFields(lyr_dataSource)    #获取lyr图层要素的所有字段
            for field in fields:    #遍历lyr图层要素的每一个字段
                list2.append(field.name)    #将字段名追加到列表list2
            combobox2.enabled = True    #启用字段组合框(字段组合框的变量名为combobox2,与config.xml中id="xiaobanbianhao_addin.combobox2"中的combobox2相同)
            combobox2.items = list2    #为字段组合框下拉列表赋值
            combobox2.refresh()    #刷新字段组合框
            tool1.enabled = False    #禁用编号工具(限制必须选好图层选好字段才开始编号)
            combobox3.enabled = False    #禁用起始编号组合框
    def onEditChange(self, text):
        pass
    def onFocus(self, focused):
        pass
    def onEnter(self):
        pass
    def refresh(self):
        pass

class ComboBoxClass2(object):    #字段组合框
    def __init__(self):
        self.items = []    #初始状态时组合框下拉列表
        self.editable = True
        self.enabled = False    #字段组合框初始状态没有启用
        self.dropdownWidth = 'ZZZZZ'    #几个相同的字符表示组合框下拉列表的长度为几
        self.width = 'XXXXXXX'    #几个相同的字符表示组合框的宽度为几
        self.value="ZX"    #初始状态时组合框内显示的字符
    def onSelChange(self, selection):    #点击组合框下拉列表选项时触发
        self.value=selection    #组合框内显示的内容赋值为下拉列表选中内容
        self.refresh()    #刷新
        ZX.ziduanming = selection    #ZX类ziduanming属性赋值为下拉列表选中内容
        tool1.enabled = True    #启用编号工具(编号工具的变量名为tool1,与config.xml中id="xiaobanbianhao_addin.tool1"中的tool1相同)
        combobox3.enabled = True    #启用起始编号组合框(起始编号组合框的变量名为combobox3,与config.xml中id="xiaobanbianhao_addin.combobox3"中的combobox3相同)
        combobox3.refresh()    #刷新起始编号组合框
    def onEditChange(self, text):
        pass
    def onFocus(self, focused):
        pass
    def onEnter(self):
        pass
    def refresh(self):
        pass

class ComboBoxClass3(object):    #起始编号组合框
    def __init__(self):
        self.items = []    #初始状态时组合框下拉列表,这个组合框采用输入起始编号后回车触发,下拉列表会一直为空
        self.editable = True
        self.enabled = False    #起始编号组合框初始状态没有启用
        self.dropdownWidth = 'ZZZZZ'    #几个相同的字符表示组合框下拉列表的长度为几
        self.width = 'XXXXX'    #几个相同的字符表示组合框的宽度为几
        self.value = "1"    #初始状态时组合框内显示的字符
    def onSelChange(self, selection):
        pass
    def onEditChange(self, text):
        pass
    def onFocus(self, focused):
        pass
    def onEnter(self):    #在组合框中输入起始编号后回车触发
        self.refresh()    #刷新
        mxd = arcpy.mapping.MapDocument("CURRENT")    #获取当前工程
        lyr=arcpy.mapping.ListLayers(mxd,ZX.tucengming)[0]    #获取当前工程图层名为ZX.tucengming属性值的图层
        lyr.description=self.value    #图层的描述属性赋值为输入的起始编号
        arcpy.RefreshActiveView()    #刷新当前工程
    def refresh(self):
        pass

class ToolClass5(object):    #编号工具
    def __init__(self):
        self.enabled = False    #编号工具初始状态没有启用
        self.shape = "NONE"    #编号工具通过点击获取地图x,y坐标与小班交互,不需要画出形状
    def onMouseDown(self, x, y, button, shift):
        pass
    def onMouseDownMap(self, x, y, button, shift):    #捕捉并返回鼠标按下时所在的地图x,y坐标
        mxd = arcpy.mapping.MapDocument("CURRENT")    #获取当前工程
        lyr=arcpy.mapping.ListLayers(mxd,ZX.tucengming)[0]    #获取当前工程图层名为ZX.tucengming属性值的图层
        bianhao=lyr.description    #变量bianhao赋值为lyr图层的描述属性值
        pointGeom = arcpy.PointGeometry(arcpy.Point(x, y), mxd.activeDataFrame.spatialReference)    #根据返回的x,y坐标新建点几何对象
        arcpy.SelectLayerByLocation_management(lyr, "INTERSECT", pointGeom)    #按位置选择图层,选出与新建点几何对象相交的lyr图层小班
        arcpy.CalculateField_management(lyr, ZX.ziduanming,bianhao, "VB")    #对lyr图层计算字段,为选出的字段赋值小班编号
        bianhao_shuzi=int(bianhao)    #把小班编号字符转数字
        bianhao_shuzi+=1    #小班编号加1
        xinbianhao=str(bianhao_shuzi)    #把小班编号数字转字符
        lyr.description=xinbianhao    #将lyr图层的描述属性值赋值为加1后小班编号
        arcpy.SelectLayerByAttribute_management(lyr, "CLEAR_SELECTION")    #清除lyr图层选择
        arcpy.RefreshActiveView()    #刷新当前工程
    def onMouseUp(self, x, y, button, shift):
        pass
    def onMouseUpMap(self, x, y, button, shift):
        pass
    def onMouseMove(self, x, y, button, shift):
        pass
    def onMouseMoveMap(self, x, y, button, shift):
        pass
    def onDblClick(self):
        pass
    def onKeyDown(self, keycode, shift):
        pass
    def onKeyUp(self, keycode, shift):
        pass
    def deactivate(self):
        pass
    def onCircle(self, circle_geometry):
        pass
    def onLine(self, line_geometry):
        pass
    def onRectangle(self, rectangle_geometry):
        pass

代码中使用图层可读写的description(描述)属性保存小班编号,这个属性的作用相当于全局变量
图层可读写属性包括:

brightness——亮度——整型
contrast——对比度——整型
credits——版权信息——字符型
definitionQuery——定义查询——字符型
description——描述——字符型
labelClasses——标注类——标注类型
maxScale——最大(显示)比例——双精度型
minScale——最小(显示)比例——双精度型
name——图层名——字符型
showLabels——显示标注——布尔型
transparency——透明度——整型
visible——图层可见——布尔型

具体可以参考帮助文档
不是所有的图层都支持这些属性,可以使用supports方法预先进行测试

小班编号工具在ArcMap10.8中可以运行,其他版本没有测试
下载地址如下:

小班编号工具