E017 如何批量整理行政区划代码
Hi,How are you doing?
我是职场编码(CodeVoc)。
在E000中,我们介绍了Node.js、Ruby、Electron等工具下载安装。
这期,给你演示一下由Electron联合Ruby制作的小工具。
借助Electron官方Demo,我们很容易制作一个工具展示平台。
点击“View Demo”会弹出我们的工具界面。
一、项目需求
这个工具的主要目的是为了批量整理行政区划代码。
它除了可以选择源文件,还可以选择目标文件,
甚至可以监听控制台输出语句,把输出反馈显示在前端文本框内。
点击“写入”按钮,就可以把存储在Excel表格里的源数据,批量整理形成标准的行政区划代码一维数据。
二、界面设计
【html】
生成表单容器:<form></form>
生成布局标签:<div></div>
生成行内标签:<span></span>
生成单行输入框:<input id="input_line">
生成文件选择按钮:
<input type="file" id="input_file">
生成文本框:<textarea id="text"></textarea>
生成普通按钮:<input type="button" id="execute">
【css】
关注四点前白后绿气泡某杺平台,搜索“职场编码”查看源码。
【javascript】
根据ID,选中input_file按钮
var input_line=document.getElementById('input_line')
给input_file按钮,添加"change"事件
input_line.value=document.getElementById('input_file').files[0].path
execute按钮添加单击事件
execute.addEventListener("click",function(){获取参数1,调用})
获取参数1
var input_line=document.getElementById('input_line').value
调用Ruby脚本
const { spawn } = require('child_process')
const ls = spawn('ruby', ['Ruby脚本完整路径',参数1])
监听脚本命令行输出,将接收值即时传入文本框,自动显示最新行
var text=document.getElementById('text')
ls.stdout.on('data', data=>{text.value+=data;
var d = document.getElementById("text").scrollHeight;
document.getElementById("text").scrollTop = d})
三、逻辑梳理
=> 基础语法
引用Ruby标准库
require "win32ole"
创建单参数入口方法
def Excel_disposal_data(pth_source)
接收控制台传单参
Excel_disposal_data(ARGV)
单元格有效行计数、创建二维数组
n=@eap.worksheetfunction.counta(ebk.worksheets(1).columns("a:a"))
n=n/5 #有效行
arr=Array.new(n){[nil]}
设置循环
(0...n).each{|i|
(0...5).each{|j|
}
}
=> 对象模型
创建可视化Excel应用
@eap=WIN32OLE::new("excel.application");@eap.visible=true
打开Excel工作簿
ebk=@eap.workbooks.open(pth_source)
操作columns对象(清空、替换、复制、黏贴)
est.columns("C:E").clearcontents
est.columns("A:B").replace( "cName" ,"")
est.columns("A:B").replace( "code" ,"")
est.columns("A:B").replace( ":" ,"")
est.columns("A:B").replace("\"" ,"")
est.columns("G").copy
est.columns("C").PasteSpecial(-4163) #粘贴值
执行数组写入Excel单元格区域双向操作
arr[i][j] = ebk.worksheets(1).cells(m,1).value
est.range("a1").resize(n,5).value=arr
关注四点前白后绿气泡某杺平台,搜索“职场编码”查看源码。