arcpy 生成界址点成果表Excel主要实现方法介绍

受邀研究了一下arcpy生成界址点成果表,如有需要定制工具或源码可以联系作者。


2020年11月补充

实现了一个新的模板,详见ArcGIS生成界址点成果表Excel的主要实现方法(arcpy) – 知乎 zhihu.com)


以下是原文

工具与结果如下:

主要实现方式

1.通过getPointListOfPolygon方法获取一个面的节点信息集合

def getDistancepointStartX,pointStartY,pointEndX,pointEndY):
    p1=numpy.array[pointStartX,pointStartY])
    p2=numpy.array[pointEndX,pointEndY])
    p3=p2-p1
    p4=math.hypotp3[0],p3[1])
    return roundp4,2)

def getPointListOfPolygonrow):
    lst=[]
    startNum=1
    for part in row[0]:
        countNum=startNum
        for point in part:
            if point:
                if countNum==startNum:
                    lst.append[‘J%s%countNum,roundpoint.X,3),roundpoint.Y,3),None] )
                    countNum+=1
                else:
                    lastIndexOflst=lenlst)-1
                    beforeX=lst[lastIndexOflst][1]
                    beforeY=lst[lastIndexOflst][2]
                    thisX=roundpoint.X,3
                    thisY=roundpoint.Y,3)  
                    lst.append[‘J%s%countNum,thisX,thisY,getDistancebeforeX,beforeY,thisX,thisY)] )
                    countNum+=1
            else:
                lastIndexOflst=lenlst)-1
                lst[lastIndexOflst][0]=‘J%s%startNum
                countNum-=1
                startNum=countNum
        lastIndexOflst=lenlst)-1
        lst[lastIndexOflst][0]=‘J%s%startNum
    return lst

 2.通过COM读取Excel模板表,进行写入另存操作,Excel操作类如下。

通过COM操作Excel需要安装pywin32,coder要对Excel的对象模型比较熟悉,建议研究一下Excel-VBA或者Excel-C#以熟悉。

class ExcelWriter:
    def __init__self,filename=None):
        if os.path.existsfilename):
            self.xlApp=win32com.client.DispatchEx‘Excel.Application’)
            self.filename=filename
            self.xlWb=self.xlApp.Workbooks.openfilename)
    def setCurrentSheetself,index):
        self.xlWs=self.xlWb.Worksheetsindex)
    def createNewSheetFromSheet1self,nameofcopy):
        lastSheet=self.xlWb.Worksheetsself.xlWb.Worksheets.Count)
        templateSheet=self.xlWb.Worksheets1)
        templateSheet.CopyNone,lastSheet)
        newSheet=self.xlWb.Worksheetsself.xlWb.Worksheets.Count)
        newSheet.Name=nameofcopy
    def deleteSheetsExceptSheet1self):
        self.xlApp.DisplayAlerts = False
        sheetsCount=self.xlWb.Worksheets.Count
        if sheetsCount>1:
            for i in rangesheetsCount,1,-1):
                self.xlWb.Worksheetsi).Delete)
    def clearContentsOfSheetself,index):
        self.xlWb.Worksheetsindex).Range“A5:G53”).ClearContents)
    def setCellself,row,col,val):
        self.xlWs.Cellsrow,col).Value=val
    def mergeCellself,startRow,startCol,endRow,endCol):
        self.xlWs.Rangeself.xlWs.CellsstartRow,startCol),self.xlWs.CellsendRow,endCol)).Merge)
    def saveAsself,savePath):
        self.xlWb.SaveAssavePath.decode‘utf-8’))
    def closeself):
        self.xlWb.Close)
        self.xlApp.Quit)

Published by

风君子

独自遨游何稽首 揭天掀地慰生平