一、目前在使用的应用优缺点
作为思维导图轻度使用者,主要用以输出理解思路。日常使用的工具是【幕布】和【语雀】,优缺点如下。
个人使用,更倾向于语雀,受限于使用环境,也有时用到幕布。鉴于上述应用的优缺点,有时候需要相互转换。
最开始想的办法是二者复制粘贴,看是否可实现。结果只有【幕布】转【语雀】能大致实现,但【语雀】转【幕布】无法实现。
可能是编译语言的差异导致,也可能是【幕布】的设定问题,有层级结构的文字贴到【幕布】中都会变成一个层级,哪怕是【幕布】本身的大纲内容,贴到其他地方,再贴回来也会变成一个层级。但两个思维导图工具都可支持“文字分层级输出”,所以最后想的办法是先把文字贴出来,然后借助“Dataload”这种快捷键模拟的工具,实现分级。在后面详述。
二、不同应用之间的转换
1、将【幕布】思维导图导入到【语雀】中的方式
方法:
直接在将【幕布】思维导图在思维导入的预览模式下复制粘贴到【语雀】即可。方法过于简单不放图片。
局限性:
【幕布】的备注在【语雀】中会识别为一个层级,执行完毕后要在【语雀】中找到备注,调整层级(可通过查询“|”尽快定位到备注)
2、将【语雀】思维导图导入到【幕布】中的方式
2021年7月30日更新:
【方法二】
方法思路:
新发现幕布贴到excel中有缩进,通过VBA获取缩进的位数,通过VBA转换为每层级的内容及需要实现层级的TAB键次数。然后按照方法思路一的3&4实现。
可以突破方法一最高9个层级的限制,内容里有“.”不会再受影响了。
可以识别备注栏位,并做备注标记,在导入时先不导出备注,避免层级受影响。
VBA文件转化为幕布.xlsm
VBA技术很差,就是能用的水平,经常就是宏录制一下。用了数组,倒也不是很慢,代码如下。
Sub A新_生成DATALOAD()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ARR, BRR
'将A列去除缩进的格式,内容存放在B列(如果有空行删除,如果有备注,前面加[备注]作为标识)
'将A列缩进位数-2读取并存放在C列
ARR = Range("A1:C" & Cells(Rows.Count, 1).End(xlUp).Row)
For a = 2 To UBound(ARR, 1) - 1
If ARR(a, 1) = "" Then ARR(a, 2) = ""
If ARR(a, 1) <> "" And ARR(a - 1, 1) = "" And ARR(a + 1, 1) = "" Then ARR(a, 2) = "[备注]" & ARR(a, 1)
If ARR(a, 1) <> "" And Not (ARR(a - 1, 1) = "" And ARR(a + 1, 1) = "") Then ARR(a, 2) = ARR(a, 1)
Next a
ARR(1, 2) = ARR(1, 1)
ARR(UBound(ARR, 1), 2) = ARR(UBound(ARR, 1), 1)
For a = 1 To UBound(ARR, 1)
ARR(a, 3) = ActiveSheet.Cells(a, 1).IndentLevel - 2
Next a
m = Cells(Rows.Count, 1).End(xlUp).Row
Range("A1:C" & m) = ARR
'删除空行
Range("B1:B" & Cells(Rows.Count, 1).End(xlUp).Row).Select
Range("B1").Activate
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
'C列值
BRR = Range("C1:E" & Cells(Rows.Count, 1).End(xlUp).Row)
For I = 1 To UBound(BRR, 1)
If BRR(I, 1) < 0 Then BRR(I, 2) = ""
If BRR(I, 1) = 0 Then BRR(I, 2) = "\{DOWN}"
If BRR(I, 1) >= 1 Then
BRR(I, 2) = "\{TAB " & BRR(I, 1) & "}"
BRR(I, 3) = "\{DOWN}"
End If
Next
m = Cells(Rows.Count, 1).End(xlUp).Row
Range("C1:E" & m) = BRR
'将C列删除
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Sub B筛选非备注项()
Selection.AutoFilter
ActiveSheet.Range("$A$1:$H$" & Cells(Rows.Count, 1).End(xlUp).Row).AutoFilter Field:=2, Criteria1:="<>*备注*", _
Operator:=xlAnd
End Sub
Sub C取消筛选()
Selection.AutoFilter
End Sub
具体操作步骤如下
操作步骤 | 注意事项 |
---|---|
1.将语雀的思维导图复制出来,贴入excel表中第一列 | 不要粘贴为值,要保留原格式 |
2.快捷键Alt+F8调用该工作表的宏,执行 | |
3.将第二列第一行作为幕布标题,第二列的第二行以下贴入幕布文档的内容部分 | |
4.打开dataload定义WINDOW(幕布文档)和command group(OTHER),将excel中的的C列及以后的编码贴入DATALOAD | |
5.在幕布文档页定位到内容部分第一行的第一个字前面,切到dataload,点击“→”开始 | |
6.语雀中显示为收缩的,不会自动收缩,要加工后手工处理 |
————
【方法一】
方法思路:
1、将语雀的思维导图贴到WORD中,借助WORD的列表级别,编上号。
2、将word直接贴到excel中,通过编号中的”.”的数量确定需要键入的TAB键次数,通过VBA输出每层级的内容及需要实现层级的TAB键次数。
3、使用快捷键模拟工具Dataload实现TAB键和DOWN键的输入,最终实现在【幕布】中的分层
4、将备注和需要收缩的分层手工进行调整。
VBA文件语雀转化为幕布.xlsm
VBA技术很差,就是能用的水平,经常就是宏录制一下。用了数组,倒也不是很慢,代码如下。
Sub 生成DATALOAD()
Application.ScreenUpdating = False
Dim ARR, BRR
'将A列分列
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:=" ", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
'定义数组
ARR = ActiveSheet.[A1].CurrentRegion
BRR = Range("C1:D" & Cells(Rows.Count, 1).End(xlUp).Row)
'D列值
For I = 1 To UBound(ARR, 1)
BRR(I, 1) = Len(Replace(ARR(I, 1), ".", "..")) - Len(ARR(I, 1))
Next
For I = 1 To UBound(BRR, 1)
If BRR(I, 1) = 0 Then BRR(I, 2) = ""
If BRR(I, 1) >= 1 Then BRR(I, 2) = Excel.Application.WorksheetFunction.Rept("TAB>", BRR(I, 1) - 1) & "\{DOWN}"
Next
m = Cells(Rows.Count, 1).End(xlUp).Row
Range("C1:D" & m) = BRR
'将D列分列
Columns("D:D").Select
Selection.TextToColumns Destination:=Range("D1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:=">", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
TrailingMinusNumbers:=True
'将C列删除
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
Application.ScreenUpdating = True
End Sub
具体操作步骤如下
操作步骤 | 注意事项 |
---|---|
1.将语雀的思维导图复制出来,贴入Word文档,为所有的信息,选择列表级别,如1.1.3 | 1.因为从word贴到excel后会采用”.”进行分列(讲层级排序和层级内容分开),务必保证在word选择”列表级别“前检索是否有”.“,如有,则替换为其他符号,例如顿号。 2.在word中要检查是否有以“=”打头的层级,会导致乱码,请务必替换为”‘=”,否则在excel中拆列后会出现”#NAME?”的情况 |
2.将有列表级别的word贴入excel表中第一列 | |
3.快捷键Alt+F8调用该工作表的宏,执行 | |
4.将第二列第一行作为幕布标题,第二列的第二行以下贴入幕布文档的内容部分 | |
5.打开dataload定义WINDOW(幕布文档)和command group(OTHER),将excel中的的C列及以后的编码贴入DATALOAD | |
6.在幕布文档页定位到内容部分第一行的第一个字前面,切到dataload,点击“→”开始 | |
7.语雀中显示为收缩的,不会自动收缩,要加工后手工处理 |
Dataload工具自己在网上找压缩包即可。