一、目前在使用的应用优缺点
作为思维导图轻度使用者,主要用以输出理解思路。日常使用的工具是【幕布】和【语雀】,优缺点如下。![思维导图-[幕布]和[语雀]之间的转化 - 图1](/uploads/projects/xiaoyang17@kte3mw/6c47829b26c5dff174368ef38491b521.jpeg)
个人使用,更倾向于语雀,受限于使用环境,也有时用到幕布。鉴于上述应用的优缺点,有时候需要相互转换。
最开始想的办法是二者复制粘贴,看是否可实现。结果只有【幕布】转【语雀】能大致实现,但【语雀】转【幕布】无法实现。
可能是编译语言的差异导致,也可能是【幕布】的设定问题,有层级结构的文字贴到【幕布】中都会变成一个层级,哪怕是【幕布】本身的大纲内容,贴到其他地方,再贴回来也会变成一个层级。但两个思维导图工具都可支持“文字分层级输出”,所以最后想的办法是先把文字贴出来,然后借助“Dataload”这种快捷键模拟的工具,实现分级。在后面详述。
二、不同应用之间的转换
1、将【幕布】思维导图导入到【语雀】中的方式
方法:
直接在将【幕布】思维导图在思维导入的预览模式下复制粘贴到【语雀】即可。方法过于简单不放图片。
局限性:
【幕布】的备注在【语雀】中会识别为一个层级,执行完毕后要在【语雀】中找到备注,调整层级(可通过查询“|”尽快定位到备注)
2、将【语雀】思维导图导入到【幕布】中的方式
2021年7月30日更新:
【方法二】
方法思路:
新发现幕布贴到excel中有缩进,通过VBA获取缩进的位数,通过VBA转换为每层级的内容及需要实现层级的TAB键次数。然后按照方法思路一的3&4实现。
可以突破方法一最高9个层级的限制,内容里有“.”不会再受影响了。
可以识别备注栏位,并做备注标记,在导入时先不导出备注,避免层级受影响。
VBA文件转化为幕布.xlsm
VBA技术很差,就是能用的水平,经常就是宏录制一下。用了数组,倒也不是很慢,代码如下。
Sub A新_生成DATALOAD()Application.ScreenUpdating = FalseApplication.DisplayAlerts = FalseDim 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) - 1If 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 aARR(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 - 2Next am = Cells(Rows.Count, 1).End(xlUp).RowRange("A1:C" & m) = ARR'删除空行Range("B1:B" & Cells(Rows.Count, 1).End(xlUp).Row).SelectRange("B1").ActivateSelection.SpecialCells(xlCellTypeBlanks).SelectSelection.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 ThenBRR(I, 2) = "\{TAB " & BRR(I, 1) & "}"BRR(I, 3) = "\{DOWN}"End IfNextm = Cells(Rows.Count, 1).End(xlUp).RowRange("C1:E" & m) = BRR'将C列删除Columns("C:C").SelectSelection.Delete Shift:=xlToLeftApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueEnd SubSub B筛选非备注项()Selection.AutoFilterActiveSheet.Range("$A$1:$H$" & Cells(Rows.Count, 1).End(xlUp).Row).AutoFilter Field:=2, Criteria1:="<>*备注*", _Operator:=xlAndEnd SubSub C取消筛选()Selection.AutoFilterEnd 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 = FalseDim ARR, BRR'将A列分列Columns("A:A").SelectSelection.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].CurrentRegionBRR = 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))NextFor 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}"Nextm = Cells(Rows.Count, 1).End(xlUp).RowRange("C1:D" & m) = BRR'将D列分列Columns("D:D").SelectSelection.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").SelectSelection.Delete Shift:=xlToLeftApplication.ScreenUpdating = TrueEnd 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工具自己在网上找压缩包即可。
