一、目前在使用的应用优缺点

作为思维导图轻度使用者,主要用以输出理解思路。日常使用的工具是【幕布】和【语雀】,优缺点如下。
思维导图-[幕布]和[语雀]之间的转化 - 图1

个人使用,更倾向于语雀,受限于使用环境,也有时用到幕布。鉴于上述应用的优缺点,有时候需要相互转换。
最开始想的办法是二者复制粘贴,看是否可实现。结果只有【幕布】转【语雀】能大致实现,但【语雀】转【幕布】无法实现。
可能是编译语言的差异导致,也可能是【幕布】的设定问题,有层级结构的文字贴到【幕布】中都会变成一个层级,哪怕是【幕布】本身的大纲内容,贴到其他地方,再贴回来也会变成一个层级。但两个思维导图工具都可支持“文字分层级输出”,所以最后想的办法是先把文字贴出来,然后借助“Dataload”这种快捷键模拟的工具,实现分级。在后面详述。

二、不同应用之间的转换

1、将【幕布】思维导图导入到【语雀】中的方式

方法:
直接在将【幕布】思维导图在思维导入的预览模式下复制粘贴到【语雀】即可。方法过于简单不放图片。
局限性:
【幕布】的备注在【语雀】中会识别为一个层级,执行完毕后要在【语雀】中找到备注,调整层级(可通过查询“|”尽快定位到备注)

2、将【语雀】思维导图导入到【幕布】中的方式

2021年7月30日更新:
【方法二】
方法思路:
新发现幕布贴到excel中有缩进,通过VBA获取缩进的位数,通过VBA转换为每层级的内容及需要实现层级的TAB键次数。然后按照方法思路一的3&4实现。
可以突破方法一最高9个层级的限制,内容里有“.”不会再受影响了。
可以识别备注栏位,并做备注标记,在导入时先不导出备注,避免层级受影响。
VBA文件转化为幕布.xlsm
VBA技术很差,就是能用的水平,经常就是宏录制一下。用了数组,倒也不是很慢,代码如下。

  1. Sub A_生成DATALOAD()
  2. Application.ScreenUpdating = False
  3. Application.DisplayAlerts = False
  4. Dim ARR, BRR
  5. '将A列去除缩进的格式,内容存放在B列(如果有空行删除,如果有备注,前面加[备注]作为标识)
  6. 'A列缩进位数-2读取并存放在C
  7. ARR = Range("A1:C" & Cells(Rows.Count, 1).End(xlUp).Row)
  8. For a = 2 To UBound(ARR, 1) - 1
  9. If ARR(a, 1) = "" Then ARR(a, 2) = ""
  10. If ARR(a, 1) <> "" And ARR(a - 1, 1) = "" And ARR(a + 1, 1) = "" Then ARR(a, 2) = "[备注]" & ARR(a, 1)
  11. If ARR(a, 1) <> "" And Not (ARR(a - 1, 1) = "" And ARR(a + 1, 1) = "") Then ARR(a, 2) = ARR(a, 1)
  12. Next a
  13. ARR(1, 2) = ARR(1, 1)
  14. ARR(UBound(ARR, 1), 2) = ARR(UBound(ARR, 1), 1)
  15. For a = 1 To UBound(ARR, 1)
  16. ARR(a, 3) = ActiveSheet.Cells(a, 1).IndentLevel - 2
  17. Next a
  18. m = Cells(Rows.Count, 1).End(xlUp).Row
  19. Range("A1:C" & m) = ARR
  20. '删除空行
  21. Range("B1:B" & Cells(Rows.Count, 1).End(xlUp).Row).Select
  22. Range("B1").Activate
  23. Selection.SpecialCells(xlCellTypeBlanks).Select
  24. Selection.EntireRow.Delete
  25. 'C列值
  26. BRR = Range("C1:E" & Cells(Rows.Count, 1).End(xlUp).Row)
  27. For I = 1 To UBound(BRR, 1)
  28. If BRR(I, 1) < 0 Then BRR(I, 2) = ""
  29. If BRR(I, 1) = 0 Then BRR(I, 2) = "\{DOWN}"
  30. If BRR(I, 1) >= 1 Then
  31. BRR(I, 2) = "\{TAB " & BRR(I, 1) & "}"
  32. BRR(I, 3) = "\{DOWN}"
  33. End If
  34. Next
  35. m = Cells(Rows.Count, 1).End(xlUp).Row
  36. Range("C1:E" & m) = BRR
  37. '将C列删除
  38. Columns("C:C").Select
  39. Selection.Delete Shift:=xlToLeft
  40. Application.ScreenUpdating = True
  41. Application.DisplayAlerts = True
  42. End Sub
  43. Sub B筛选非备注项()
  44. Selection.AutoFilter
  45. ActiveSheet.Range("$A$1:$H$" & Cells(Rows.Count, 1).End(xlUp).Row).AutoFilter Field:=2, Criteria1:="<>*备注*", _
  46. Operator:=xlAnd
  47. End Sub
  48. Sub C取消筛选()
  49. Selection.AutoFilter
  50. 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技术很差,就是能用的水平,经常就是宏录制一下。用了数组,倒也不是很慢,代码如下。

  1. Sub 生成DATALOAD()
  2. Application.ScreenUpdating = False
  3. Dim ARR, BRR
  4. '将A列分列
  5. Columns("A:A").Select
  6. Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
  7. TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
  8. Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
  9. :=" ", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
  10. '定义数组
  11. ARR = ActiveSheet.[A1].CurrentRegion
  12. BRR = Range("C1:D" & Cells(Rows.Count, 1).End(xlUp).Row)
  13. 'D列值
  14. For I = 1 To UBound(ARR, 1)
  15. BRR(I, 1) = Len(Replace(ARR(I, 1), ".", "..")) - Len(ARR(I, 1))
  16. Next
  17. For I = 1 To UBound(BRR, 1)
  18. If BRR(I, 1) = 0 Then BRR(I, 2) = ""
  19. If BRR(I, 1) >= 1 Then BRR(I, 2) = Excel.Application.WorksheetFunction.Rept("TAB>", BRR(I, 1) - 1) & "\{DOWN}"
  20. Next
  21. m = Cells(Rows.Count, 1).End(xlUp).Row
  22. Range("C1:D" & m) = BRR
  23. 'D列分列
  24. Columns("D:D").Select
  25. Selection.TextToColumns Destination:=Range("D1"), DataType:=xlDelimited, _
  26. TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
  27. Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
  28. :=">", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
  29. TrailingMinusNumbers:=True
  30. '将C列删除
  31. Columns("C:C").Select
  32. Selection.Delete Shift:=xlToLeft
  33. Application.ScreenUpdating = True
  34. 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工具自己在网上找压缩包即可。