恩皮西硬核数值表(一)目录

发表于2020-03-03
评论4 5k浏览

知乎:胖子策划恩皮西

 

一般情况下一个项目设计数值表也是从目录开始做起,但是在真正做表之前一般会对系统结构和项目定位先做清楚,但是为了方便看表格,我还是先说一下目录。

目录的存在主要是为了自己方便,也是升级了几个版本,最原始,只是表格加上链接,让我快速的找到对应的表格。是下面这个样子的。

v2-878d29d5f13f55da3f20c84132105b09_720w.jpg

但是很快,当表格数量扩张的时候,它就不够方便了,于是自己做了一个目录。就变成下面这个样子了。

v2-1b1e4e4cf5d3ac4a9d2aa5212fdacbd7_720w.jpg


 

这个目录分为几块,主要功能就一个,快速找到对应的表。。以及一些功能按钮。我逐一介绍,如果涉及到其他部分的功能,会在后续的文章中讲解。

一:顶部功能区

v2-7fa5f2d2af8a738ab19643d31f05adb5_720w.png

就是这一部分。

1.1左边三个按钮

是为了查看表格汇总使用的,第一个按钮用于打开三个汇总sheet。分别为

gtKhMw3Dguuh01JgdBa2.png

在项目后期他们的用处就很小了。

第一个表格基本就是罗列了这里面的所有sheet。

v2-ec3cd78cf4441cd43340d50beb094b30_720w.jpg

你可以看到我甚至做了欢迎界面

如果你够好奇的话,我把欢迎界面也给大家看下

v2-87eb5a0441f818e1118faec1f5fe6a19_720w.jpg


 

这是一个毫无卵用的页面,我用了2个页面,通过代码控制,可以让2个界面互相切换,可以让“她”动起来。然而这玩意不仅毫无卵用,还很浪费性能,影响表格打开速度,后面就被我干掉了。这是个插曲。

接下来说字段管理表,这个稍微有点用处,它把真个表里的每个字段都展示出来,可以检查一些字段命名错误或者表格格式错误。表格格式我稍后讲到,因为没有一个规范的表格格式,是没法做出目录的。

6uzL1OmThyAywL0iZDtD.png


 

这里可以看到,我给每个字段设计了一个唯一识别号,是表格名称(不是sheet名称)加上字段名称实现的,这个可以帮我们快速找到指定的字段,后期其他工具对应指定字段的查找也是有用的。

最后一个表格关系表,就没什么用了。就不介绍了。原本是像做一个网状的表格引用关系的可视化图,后来没有时间去实现,对于项目本身也没有什么用处。

1.2启动右键功能

因为右键的功能是基于excel的,而不是基于表格的,所以在更换电脑使用表格时,会没法使用右键的功能。所以增加了这个按钮。右键我通常会增加一些使用频率很高的功能。

q9di8EMB7pPszHhCK4qE.png

可以看到,这里有工具箱,信息,编辑文案,显示路径,文案配色,识别号跳转等功能更,这些功能我在后面会介绍。

1.3更新客户端svn

不管你在什么项目组,总会有一个版本管理工具,可能是svn,可能是git,你总要反复更新,使用频率很高,这里做成一个按钮,方便使用。功能很简单。代码非常简单,但是你要安装svn的时候安装命令行工具才能使用,在安装的时候有一个选项,没有的话重装一下就好了

代码如下。

Sub 更新SVN客户端() code = "cmd.exe /c svn update " & "D:\SVN\Galaxy\client" & "&& pause" Call Shell(code) End Sub

二.中央功能功能区

中央功能区的关键功能只有一个,找到核心表格,这块代码稍微难写一点,可能是我没有找到好写的方法,好在只用写一次,对效率要求也不高,代码不好就算了。

左边三个区域,总表,规划,查看器,规划表,都是手动设置的连接到指定的sheet的。点击就打开,代码也非常简单。

Sub 查看器() 开关某页BYstring ("飞船查看器") 开关某页BYstring ("飞船查看器2") 开关某页BYstring ("怪物查看器") 开关某页BYstring ("英雄查看器") End Sub Function 开关某页BYstring(i As String) If Workbooks(ThisWorkbook.name).Sheets(i).Visible = xlSheetVisible Then Workbooks(ThisWorkbook.name).Sheets(i).Visible = xlSheetHidden Else Workbooks(ThisWorkbook.name).Sheets(i).Visible = xlSheetVisible Workbooks(ThisWorkbook.name).Sheets(i).Select End If End Function

基本就是显示出来。右边的区域就稍微复杂一点,首先,把表格分类为系统。在中间区域把所有的系统显示出来。然后实现,点击,在右边把该系统的所有表格显示出来。

这些代码稍微有些复杂。

在实现这个功能之前,我们需要对表格有一定的规范要求。你可以制定自己的规范标准,我在这里说下我是如何制定的。

我的每个数据表大致是这样的。

v2-58c3cade1040630c547c628f2eadc22d_720w.jpg


 

1. 设置返回按钮,功能为隐藏该sheet

2. 设置到处按钮,功能为到处数据成制定文件,这里是csv到指定的文件夹给程序使用,它同时包含了提交功能,会自动提交到svn,这部分在导出部分再说。

3. 提供说明信息按钮,点击后跳转到一个说明sheet对这个表格进行说明,稍后展示,主要是说明这个表格的规范,枚举等。

4. 表格名称,它固定的在B1单元格

5. 系统名称,它固定在D1单元格

6. 表格类型,它固定在F1单元格

7. 预留行4,第四行为字段类型,在后面会用到,说明字段的内容。主要有,功能,文案(做多语言时需要),美术(改动频率较低),数值(改动频率较高)

8. 预留行5,这是一个外键,和格式说明,如果这个字段来自其他表格,这里要说明,如

U88DqqmcGOnXtnrfqSwA.png

这里可以看到,这个字段应该填写4个技能id,前三个来自主动技能ID,最后一个来自被动技能ID,这里填写的数据应该在对应的表格对应的字段找到,不然你就填错了。

9. 预留行6,对于外键的中文说明。基本上是对预留行5的中文解释

10. 预留行7,这是字段的标准名称,它是被程序识别的名称,也是从这一行起,后面才是到处的数据内容。

11. 预留行8,这里是字段的中文名称,主要是帮助理解。

12. 预留行9,这里是字段的类型,程序识别用,自己也会识别,有可能会存在和程序商议的特殊字符格式。

13. 后续的才是表格的数据内容。


 

关于规范3,我们这个例子是英雄表,英雄表的说明是这样的

v2-7564657c39c26d173881de29015d1fb7_720w.jpg


 

这里束缚了某些字段能填的值和意义。这里必须记录,不然会完全忘记,例如种族,我们能填写0-4,但是含义很容易忘记,如果及时的更新在说明表里,就可以任何时候查看。

基于上面的表格格式,我们可以遍历整个数据表,找出所有的系统和所有的表格。

先看刷新目录,它的功能是删掉前面的系统标签,然后遍历整个表,重新生成所有的系统标签。下面是刷新目录按钮的代码。

Sub 自动化目录() num = 1 Dim 系统字典 Set 系统字典 = CreateObject("Scripting.Dictionary") Dim 系统 As Worksheet For Each 系统 In ActiveWorkbook.Sheets If 系统字典.exists(系统.Range("D1").Value) Then ElseIf 系统.Range("D1").Value = "" Then Else 系统字典.Add 系统.Range("D1").Value, num num = num + 1 End If Next '清除原有按钮 For Each s In ActiveWorkbook.Sheets("目录和说明").Shapes If 系统字典.exists(s.name) Then s.Delete Else 's.Delete End If Next num2 = 1 按钮行数 = 7 '这段代码有毒 For Each a In 系统字典 If (a = "") Then Else ' '位置X,位置Y,宽,高 ActiveSheet.Shapes.AddShape(msoShapeRectangle, 250 + 120 * Int((num2 - 1) / 按钮行数), 140 + 32 * ((num2 - 1) Mod 按钮行数), 100, 25) _ .Select 'Selection.OnAction = "'打开系统""" & (a) & """'" Selection.ShapeRange.ShapeStyle = msoShapeStylePreset13 Selection.ShapeRange(1).OnAction = "自动化分级目录" Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = a With Selection.ShapeRange(1).TextFrame2.TextRange.Font .NameComplexScript = "微软雅黑" .NameFarEast = "微软雅黑" .name = "微软雅黑" End With Selection.ShapeRange(1).name = a End If 'message = message & a & vbLf num2 = num2 + 1 Next End Sub

这样就能够生成一个中间的系统列表标签了。如下

v2-bc1b70ba236e4ba35819fe1b70029643_720w.jpg


 

很古老的代码了,我后续的项目也在沿用,代码都不需要修改。刷新目录按钮给后续的系统页签增加了OnAction = "自动化分级目录"功能,这段代码我也贴出来,它是为了实现点击系统页签展示页面页签存在的。

Sub 自动化分级目录() '************获取系统名称******************************** c = Application.Caller ActiveSheet.Shapes(c).Select 系统名 = Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text '******************************************************** '**************搜索表格********************************** Dim 表格字典 Set 表格字典 = CreateObject("Scripting.Dictionary") Dim 表格总字典 Set 表格总字典 = CreateObject("Scripting.Dictionary") Dim 表格管理区域 As Range Set 表格管理区域 = ActiveWorkbook.Sheets("表格管理表").Range("A10:E500") For Each 表格 In ActiveWorkbook.Sheets If 表格.Cells(1, 4).Value = 系统名 Then 表格字典.Add 表格.name, 表格.Cells(1, 4).Value Else End If If 表格总字典.exists(表格.name) Then Else 表格总字典.Add 表格.name, 表格.Cells(1, 4) End If Next num2 = 1 按钮行数 = 15 '*******************清除原有按钮************************* For Each s In ActiveWorkbook.Sheets("目录和说明").Shapes If 表格总字典.exists(s.name) Then s.Delete Else 's.Delete End If Next '******************************************************** '********************************************************* '这段代码有毒 ' ActiveSheet.Shapes.AddShape(msoShapeRectangle, 780, 100, 100, 23) _ ' .Select ' 'Selection.OnAction = "'打开系统""" & (a) & """'" ' ' ' Selection.ShapeRange.ShapeStyle = msoShapeStylePreset16 ' Selection.ShapeRange(1).OnAction = "打开系统" ' Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "打开全部" ' Selection.ShapeRange(1).Name = 系统名 ActiveSheet.Range("o6").Value = 系统名 Dim MyT As Long MyT = timeGetTime For Each a In 表格字典 If (a = "") Then Else '位置X,位置Y,宽,高 ActiveSheet.Shapes.AddShape(msoShapeRectangle, 650 + 180 * Sin(num2 * 3.165 / 20 + 3.14 / 5), 250 - 200 * Cos(num2 * 3.14 / 20 + 3.14 / 5), 120, 25) _ .Select 'Selection.OnAction = "'打开系统""" & (a) & """'" Selection.ShapeRange(1).IncrementRotation -50 + num2 * 8 Selection.ShapeRange.ShapeStyle = msoShapeStylePreset17 Selection.ShapeRange(1).OnAction = "打开表格" Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = a Selection.ShapeRange(1).name = a With Selection.ShapeRange(1).TextFrame2.TextRange.Font .NameComplexScript = "微软雅黑" .NameFarEast = "微软雅黑" .name = "微软雅黑" End With End If 'message = message & a & vbLf num2 = num2 + 1 'Do 'DoEvents 'Loop Until timeGetTime - MyT >= num2 ' 等于 5000/1000 = 5 秒 Next ActiveSheet.Range("A1").Select End Sub

这样就能够实现中右部分的功能了。如下:

6DbrNjtgR7LHl24YhzwH.png

代码里有一段被我注释了这段代码有毒的代码,那段代码在逻辑上似乎是正确的,但是会导致excel无法保存。我研究很久也没弄清楚是为什么,假装它是一个excel存在的关于图片的bug,然后我采用了另一种方法实现,不过有兴趣的可以研究一下,然后找到原因给我留言。

三:底部功能区

这部分主要是储存和设置一些文件路径,给svn和导出使用的,增加了一个方便更改的按钮。主要是其他同事在使用表格的时候,本机的路径和你的不一样,就无法正确使用到处和svn相关功能,所以增加了这部分。

好了到这里基本介绍完了全部的目录相关的功能。

  • 允许他人重新传播作品,但他人重新传播时必须在所使用作品的正文开头的显著位置,注明用户的姓名、来源及其采用的知识共享协议,并与该作品在磨坊上的原发地址建立链接
  • 可对作品重新编排、修改、节选或者以作品为基础进行创作和发布
  • 不可将作品进行商业性使用
  • 需在以作品基础上创作的演绎作品上适用相同类型的知识共享许可条款

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: