【办公自动化】Excel“一键”生成国土“三调”转换代码

之前发了两片通过代码“一键”转换国土“三调”数据的文章,
《【办公自动化】国土“三调”用地分类“一键”转南京分类》
《【办公自动化】国土“三调”用地分类“一键”转国标分类》
有同学提出作为规划工作者不会python怎么办?答曰可以自学呀!
其实电脑装有Excel和Word就能“一键”搞定!

1、Excel“一键”开始

  • 打开我们提供的用地转换对照表Excel(后文提供)
  • 快捷键 Alt+F11 打开了Excel的VB编辑器
    在这里插入图片描述
  • 点文件 > 导入文件…
  • 对话框中选到 VB转代码.bas 文件 (后文提供),打开
  • 按F5 或者点绿色箭头运行,出现下面宏对话框,有宏名称就加载正确
    在这里插入图片描述
  • 点运行,会自动弹出一个Word,里面是生成的Python代码,已全选,复制去GIS粘贴就行,简单吧。
    在这里插入图片描述
    注意:这里代码是通过判断表中A列,返回C+D列中数据生成的,其他列无关,需要的同学自行修改Excel。
    在这里插入图片描述

2、GIS部分操作再啰嗦一下

  • 打开GIS,打开属性表,添加字段layer,类型文本;
  • 右击字段,打开字段计算器…,选Python,勾选显示代码块,在其中粘贴脚本代码,在Layer= 下面填入 plan_name(!DLBM!) 调用函数;
  • 点保存就生成了cal文件,以后可以加载使用一键转换;
  • 点确定就生成了转换后的Layer数据。
    在这里插入图片描述
    若需要CAD文件,自行导出CAD,CAD中就形成了国土空间规划的用地图层。

3、VB版代码

之前文章中提供的是python版本生成代码,用python生成python格式上更方便写,但在Excel中运行VBA,不需要读取文件,不需要安装python环境,不需要安装库,就是生成代码比python略微复杂一些,供交流学习!

Public Sub make_code()
Dim wdapp As Object

'生成函数定义,筛选处理含K类型。通过chr(10)换行,注意python退让格式
cord = "def plan_name(name): " & Chr(10) & "    if 'K' in name:" & Chr(10) & "        name = name[:-1]" & Chr(10)

'循环生成判断代码
For Row = 2 To Cells(Rows.Count, "a").End(xlUp).Row
    Name = Cells(Row, "c") + Cells(Row, "d")
    If Row = 2 Then
    cord = cord & "    if name == '" & Cells(Row, "a") & "' : " & Chr(10) & "        return '" & Name & "'" & Chr(10)
    Else
    cord = cord & "    elif name == '" & Cells(Row, "a") & "' : " & Chr(10) & "        return '" & Name & "'" & Chr(10)
    End If
Next
'生成代码结尾,没有else结尾gis中会报错
cord = cord & "    else:" & Chr(10) & "        return  'check '"

Set wdapp = CreateObject("word.application")  '链接WORD用于显示结果方便复制
wdapp.Documents.Add    '新建WORD页面
wdapp.Visible = True      '显示页面
wdapp.Selection = cord  '写入代码并选择

End Sub

附一个python版本供对比,还是python简洁:

import pandas as pd
url = "sandiao-gb.xlsx" #excel地址
#读取EXCEL对照表
df = pd.read_excel(url,dtype='object')  #强制object这样所有的数据成了字符串

#生成定义函数,转换带K类用地,用\n换行,这里注意换行后的python对其格式
cord = 'def plan_name(name): \n    if \'K\' in name:\n        name = name[:-1]\n' 

#循环生成判断代码
for i in range(df.shape[0]):
    name = df.iloc[i,2]+df.iloc[i,3]
    if i  == 0 :
        cord = cord + '    if name == \'%s\' : \n        return \'%s\' \n' %(df.iloc[i,0], name)
    else:
        cord = cord + '    elif name == \'%s\' : \n        return \'%s\' \n' %(df.iloc[i,0], name)
        
#生成代码结尾,没有else结尾gis中会报错        
cord = cord  +'    else:\n        return \'check\' \n'

print(cord)  #python就是可以直接显示!

8月12日最新发布GIS转换工具箱,转换文件已停止更新
对原转换文件感兴趣的同学可以点击下方网盘链接
链接:https://pan.baidu.com/s/1fIaDrvwfElGWeqtqwAyZWg
提取码:0817

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

规划酱

谢谢鼓励!一起自动化!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值