界址点号

您所在的位置:网站首页 cad如何生成界址点 界址点号

界址点号

2023-09-30 02:51| 来源: 网络整理| 查看: 265

帮别人写了两个地方的界址点成果表制作工具,实现下面两张图片的样式。

使用arcpy获取要素界址点信息;使用pywin32操作Excel com输出界址点成果表。

db69285c70b04b316b39781cd9cfbaf8.png

4ec3aa5d2de37260c08a9b0ac6572bee.png

其主要的代码片段有3部分。

第一部分,从要素类获取每个要素的界址点信息,包括点号、坐标、距离,把这些信息装入List,注意在每个部分的起点位置距离标记为None。

第二部分,使用PyWin32库通过操作Excel COM,目的是被第三部分调用。

第三部分,将List的信息写入到Excel模板,注意根据模板中每页的行数计算所需的Sheets个数。

前两部分的代码贴到下面,第三部分的代码需要根据实际情况写实现代码。

#!/usr/bin/env python # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import arcpy import os import math,numpy import win32com.client import win32api class ExcelWriter: def __init__(self,filename=None): if os.path.exists(filename): self.xlApp=win32com.client.DispatchEx('Excel.Application') self.filename=filename self.xlWb=self.xlApp.Workbooks.open(filename) def setCurrentSheet(self,index): self.xlWs=self.xlWb.Worksheets(index) def createNewSheetFromSheet1(self,nameofcopy): lastSheet=self.xlWb.Worksheets(self.xlWb.Worksheets.Count) templateSheet=self.xlWb.Worksheets(1) templateSheet.Copy(None,lastSheet) newSheet=self.xlWb.Worksheets(self.xlWb.Worksheets.Count) newSheet.Name=nameofcopy def deleteSheetsExceptSheet1(self): self.xlApp.DisplayAlerts = False sheetsCount=self.xlWb.Worksheets.Count if sheetsCount>1: for i in range(sheetsCount,1,-1): self.xlWb.Worksheets(i).Delete() def clearContentsOfSheet(self,index): self.xlWb.Worksheets(index).Range("A10:G58").ClearContents() def setCell(self,row,col,val): self.xlWs.Cells(row,col).Value=val def mergeCell(self,startRow,startCol,endRow,endCol): self.xlWs.Range(self.xlWs.Cells(startRow,startCol),self.xlWs.Cells(endRow,endCol)).Merge() def saveAs(self,savePath): self.xlWb.SaveCopyAs(savePath.decode('utf-8')) def close(self): self.xlWb.Close() self.xlApp.Quit() def getDistance(pointStartX,pointStartY,pointEndX,pointEndY): p1=numpy.array([pointStartX,pointStartY]) p2=numpy.array([pointEndX,pointEndY]) p3=p2-p1 p4=math.hypot(p3[0],p3[1]) return round(p4,2) def getPointListOfPolygon(row): lst=[] startNum=1 for part in row[0]: countNum=startNum for point in part: if point: if countNum==startNum: lst.append(['J%s'%countNum,round(point.X,3),round(point.Y,3),None] ) countNum+=1 else: lastIndexOflst=len(lst)-1 beforeX=lst[lastIndexOflst][1] beforeY=lst[lastIndexOflst][2] thisX=round(point.X,3) thisY=round(point.Y,3) lst.append(['J%s'%countNum,thisX,thisY,getDistance(beforeX,beforeY,thisX,thisY)] ) countNum+=1 else: lastIndexOflst=len(lst)-1 lst[lastIndexOflst][0]='J%s'%startNum countNum-=1 startNum=countNum lastIndexOflst=len(lst)-1 lst[lastIndexOflst][0]='J%s'%startNum return lst

欢迎关注本人博客,如需源码或定制,可通过博客获取本人联系方式。

yzhyingcool的主页 - 博客园​home.cnblogs.com 820af326bfaa6359000c9e18b0195e7d.png


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3