问题描述
因为模型结构中字段名更改,需要修正对应的EXCEL说明文档。
修正规则如下,将原来的连字符形式改成驼峰式。
原始字段 | 修正后字段 |
---|---|
session_id | sessionId |
打开VBA
这里是使用excel自带的VBA进行处理。
在excel里调出VBA的方法如下图所示。在某个表单上右击,并点击”查看代码“。
EXCEl2010的VBA窗口打开如下
解决思路
将原始字段按照符号”_”进行split,将切分后的words,除第一个word之外,其他的word首字母改为大写,然后再将所有的words连接起来。
主要方法
Range(): 代表某一单元格、某一行、某一列、某一选定区域(该区域可包含一个或若干连续单元格区域),或者某一三维区域,如Range(D:D)可以代表D这一整列,Range(D1:D2)表示D列的第一和第二行,其中的数字还可以用变量来替代,具体方法见下面的示例代码。
Split(str[,delimiter[,count[,compare]]])
: str是要拆分的字符串,delimiter是拆分依据的分隔符,count是分隔后的subStrings的最大个数,compare用来指定比较方式,有二进制比较方式和文本比较方式(未深究,不太懂)
Join(List[,delimiter]): 第一个参数List可以是一个Array,第二个参数delimiter是Array中每个字符串连接时的连接符,不填delimiter的话则默认为一个空格” “。
Left(Str, Len): 返回从左边开始,长度为Len的Str的子串。
Right(Str, Len): 返回从右边开始,长度为Len的Str的子串。
不过就我个人经验而言,不建议在代码中写Range(D:D)。我一开始用了Range(D:D),然后在调试时,于Range(D:D)的循环中调用了MsgBox,结果这个MsgBox始终无法结束。
如果想查询VBA中某个方法或是关键字的官方文档,可以google “MSDN VBA” + “方法名/关键字”
代码实现
//Sub: Declares the name, parameters, and code that define a Sub procedure
//这里的Sub的含义是“子过程”
Private Sub replace()
Set Values = ActiveSheet.Range("D2:D102")//将EXCEL D列第2行到第102行的数据存储在Values中
Dim num As Integer//这个num用来记录处理到D列的哪一行
num = 2
For Each Value In Values//遍历Values,D列的某行对应Value
Words = Split(Value, "_")//将Value按照"_"进行拆分
Dim result As String//用来存储Value处理后的结果(即用来记录sessionId)
Dim count As Integer//用来标识是否是拆分后的第一个word
result = ""
count = 0
For Each word In Words
If (count = 0) Then//如果是第一个word,仅做里连接,而不大写首字母
result = Join(Array(result, word), "")
count = count + 1
Else//否则,首字母大写
//UCase(Left(word, 1))用来将首字母大写
//Right(word, Len(word) - 1))用来获取除首字母外的剩余字符
result = Join(Array(result, UCase(Left(word, 1)), Right(word, Len(word) - 1)), "")
count = count + 1
End If
Next
ActiveSheet.Range("D" & num) = result//将num行的值,设置为处理后的结果result
Next
End Sub