“Convert MindGenius Mindmap to Excel”
Note: this applies to version 1.x of the software. The new version now thankfully has native Excel Export.
Mindgenius mindmap is a good bit of software to help annotate complex thoughts. Honestly, I probably wouldn't buy it, but my I got the opportunity with a client that has an enterprise license. One mindmap that my manager created for an RFI process for new analysis tools was then the starting point for an RFI spreadsheet that we put together to send out to vendors. Question was - is it easier to export the data and convert to XML or just retype the data... Well, it would be rude not to try! Since mindmap has a save as XML option, I created an XSLT to convert the data to Excel, it's a very good way of working - business types just love Excel, so it's a nice target to have available.
This XSLT creates an Excel spreadsheet HTML file (in MS Internet Explorer, open in Excel appears in the file menu - otherwise, save the HTML file and then load it in excel). Using the Mindgenius software, select save as XML. Since I'm on an MS platform, I used a little bit of script to do a bit of numbering, there are better ways to do numbering using keys, I must learn about these!
This XSLT converts a specific mind map to a specific spreadsheet, but the structure of the XSLT will let you learn about the way that the Mindgenius XML is formatted, it's a simple tree/branch/leaf structure. Unfortunately, this work was for a client, so I can't post the actual XML - it has sensitive information, but this stylesheet will create a spreadsheet from ANY mindmap and the information will be in a generally useful format. This makes mindmap useful for creating the initial structure of documentents (e.g. it's easy to move from excel to word once you're in the office world)...
Just add a stylesheet processing instruction to the top of the XML generated by mindmap
This example is the Mindmap default start document converted to an excel spreadsheet. NB, this will only work in internet explorer - that's where the Open In Excel stuff is anyway, so no biggy really - Funny that, I use firefox exclusively otherwise!
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:coralquest="urn:www-coralquest-com:xslt">
<xsl:output method="html" />
<msxsl:script language="javascript" implements-prefix="coralquest"><![CDATA[
var level1 = 0;
var level2 = 0;
var level3 = 0;
var level4 = 0;
var requirement = 0;
function requirementNumbering(){
return 'R' + ++requirement;
}
function level4Numbering(){
return level1 + '.' + level2 + '.' + level3 + '.' + ++level4 + ' ';
}
function level3Numbering(){
level4 = 0;
return level1 + '.' + level2 + '.' + ++level3 + ' ';
}
function level2Numbering(){
level4 = 0;
level3 = 0;
return level1 + '.' + ++level2 + ' ';
}
function level1Numbering(){
level4 = 0;
level3 = 0;
level2 = 0;
return ++level1 + '. ';
}
function levelNumbering(intLevel){
switch(intLevel){
case 1:
return level1Numbering();
break;
case 2:
return level2Numbering();
break;
case 3:
return level3Numbering();
break;
case 4:
return level4Numbering();
break;
default:
return '';
}
}
]]>
</msxsl:script>
<xsl:template match="/">
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/>
<meta name="ProgId" content="Excel.Sheet"/>
<meta name="Generator" content="Microsoft Excel 10"/>
<link rel="File-List" href="Feature-template_files/filelist.xml"/>
<link rel="Edit-Time-Data" href="Feature-template_files/editdata.mso"/>
<link rel="OLE-Object-Data" href="Feature-template_files/oledata.mso"/>
<xml>
<o:DocumentProperties>
<o:Author>Colm Gallagher</o:Author>
<o:LastAuthor>Colm Gallagher</o:LastAuthor>
<o:Created>2004-06-30T14:31:32Z</o:Created>
<o:LastSaved>2004-07-01T08:40:13Z</o:LastSaved>
<o:Company>BSKYB</o:Company>
<o:Version>10.3501</o:Version>
</o:DocumentProperties>
<o:CustomDocumentProperties>
<o:_AuthorEmail dt:dt="string">Colm.Gallagher@BSkyB.com</o:_AuthorEmail>
<o:_AuthorEmailDisplayName dt:dt="string">Gallagher, Colm</o:_AuthorEmailDisplayName>
<o:_ReviewingToolsShownOnce dt:dt="string"></o:_ReviewingToolsShownOnce>
</o:CustomDocumentProperties>
<o:OfficeDocumentSettings>
<o:DownloadComponents/>
<o:LocationOfComponents HRef="file:///C:\software\Office_XP\"/>
</o:OfficeDocumentSettings>
</xml>
<style>
table
{mso-displayed-decimal-separator:"\.";
mso-displayed-thousand-separator:"\,";}
@page
{margin:1.0in .75in 1.0in .75in;
mso-header-margin:.5in;
mso-footer-margin:.5in;}
tr
{mso-height-source:auto;}
col
{mso-width-source:auto;}
br
{mso-data-placement:same-cell;}
.style0
{mso-number-format:General;
text-align:general;
vertical-align:bottom;
white-space:nowrap;
mso-rotate:0;
mso-background-source:auto;
mso-pattern:auto;
color:windowtext;
font-size:10.0pt;
font-weight:400;
font-style:normal;
text-decoration:none;
font-family:Arial;
mso-generic-font-family:auto;
mso-font-charset:0;
border:none;
mso-protection:locked visible;
mso-style-name:Normal;
mso-style-id:0;}
td
{mso-style-parent:style0;
padding-top:1px;
padding-right:1px;
padding-left:1px;
mso-ignore:padding;
color:windowtext;
font-size:10.0pt;
font-weight:400;
font-style:normal;
text-decoration:none;
font-family:Arial;
mso-generic-font-family:auto;
mso-font-charset:0;
mso-number-format:General;
text-align:general;
vertical-align:bottom;
border:none;
mso-background-source:auto;
mso-pattern:auto;
mso-protection:locked visible;
white-space:nowrap;
mso-rotate:0;}
.xl24
{mso-style-parent:style0;
color:black;
font-family:Arial, sans-serif;
mso-font-charset:0;
text-align:left;
mso-protection:unlocked visible;}
.xl25
{mso-style-parent:style0;
color:black;
font-size:12.0pt;
font-weight:700;
text-decoration:underline;
text-underline-style:single;
font-family:Arial, sans-serif;
mso-font-charset:0;
mso-protection:unlocked visible;}
.xl26
{mso-style-parent:style0;
color:black;
font-family:Arial, sans-serif;
mso-font-charset:0;
text-align:left;
mso-protection:unlocked visible;
white-space:normal;}
.xl27
{mso-style-parent:style0;
color:black;
font-family:Arial, sans-serif;
mso-font-charset:0;
mso-protection:unlocked visible;}
.xl28
{mso-style-parent:style0;
color:black;
font-family:Arial, sans-serif;
mso-font-charset:0;
mso-protection:unlocked visible;
white-space:normal;}
.xl29
{mso-style-parent:style0;
color:black;
font-weight:700;
font-family:Arial, sans-serif;
mso-font-charset:0;
text-align:center;
vertical-align:middle;
white-space:normal;}
.xl30
{mso-style-parent:style0;
color:black;
font-weight:700;
font-family:Arial, sans-serif;
mso-font-charset:0;
text-align:center;
vertical-align:middle;
mso-protection:unlocked visible;
white-space:normal;}
.xl31
{mso-style-parent:style0;
color:black;
font-weight:700;
font-family:Arial, sans-serif;
mso-font-charset:0;
text-align:center;
vertical-align:middle;
mso-protection:unlocked visible;}
.xl32
{mso-style-parent:style0;
color:black;
font-size:12.0pt;
font-weight:700;
font-family:Arial, sans-serif;
mso-font-charset:0;
text-align:left;
vertical-align:middle;
white-space:normal;}
.xl33
{mso-style-parent:style0;
color:black;
font-family:Arial, sans-serif;
mso-font-charset:0;
text-align:left;
vertical-align:middle;
mso-protection:unlocked visible;
white-space:normal;}
.xl34
{mso-style-parent:style0;
color:black;
font-family:Arial, sans-serif;
mso-font-charset:0;
text-align:center;
vertical-align:middle;
mso-protection:unlocked visible;
white-space:normal;}
.xl35
{mso-style-parent:style0;
color:black;
font-weight:700;
font-family:Arial, sans-serif;
mso-font-charset:0;
text-align:left;
vertical-align:middle;
white-space:normal;}
.xl36
{mso-style-parent:style0;
color:black;
font-weight:700;
font-family:Arial, sans-serif;
mso-font-charset:0;
vertical-align:middle;
white-space:normal;}
.xl37
{mso-style-parent:style0;
white-space:normal;}
.xl38
{mso-style-parent:style0;
color:black;
font-family:Arial, sans-serif;
mso-font-charset:0;
text-align:left;
vertical-align:middle;
white-space:normal;}
.xl39
{mso-style-parent:style0;
color:black;
font-family:Arial, sans-serif;
mso-font-charset:0;
vertical-align:middle;
white-space:normal;}
.xl40
{mso-style-parent:style0;
font-family:Arial, sans-serif;
mso-font-charset:0;}
.xl41
{mso-style-parent:style0;
font-family:Arial, sans-serif;
mso-font-charset:0;
white-space:normal;}
.xl42
{mso-style-parent:style0;
color:black;
font-size:12.0pt;
font-weight:700;
font-family:Arial, sans-serif;
mso-font-charset:0;
mso-number-format:0;
vertical-align:middle;}
</style>
<xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>Functional - Sys</x:Name>
<x:WorksheetOptions>
<x:Print>
<x:ValidPrinterInfo/>
<x:PaperSizeIndex>9</x:PaperSizeIndex>
<x:HorizontalResolution>600</x:HorizontalResolution>
<x:VerticalResolution>600</x:VerticalResolution>
</x:Print>
<x:Selected/>
<x:Panes>
<x:Pane>
<x:Number>3</x:Number>
<x:ActiveRow>13</x:ActiveRow>
<x:ActiveCol>2</x:ActiveCol>
</x:Pane>
</x:Panes>
<x:ProtectContents>False</x:ProtectContents>
<x:ProtectObjects>False</x:ProtectObjects>
<x:ProtectScenarios>False</x:ProtectScenarios>
</x:WorksheetOptions>
</x:ExcelWorksheet>
<x:ExcelWorksheet>
<x:Name>Functional - Req</x:Name>
<x:WorksheetOptions>
<x:ProtectContents>False</x:ProtectContents>
<x:ProtectObjects>False</x:ProtectObjects>
<x:ProtectScenarios>False</x:ProtectScenarios>
</x:WorksheetOptions>
</x:ExcelWorksheet>
<x:ExcelWorksheet>
<x:Name>Functional - Bus</x:Name>
<x:WorksheetOptions>
<x:ProtectContents>False</x:ProtectContents>
<x:ProtectObjects>False</x:ProtectObjects>
<x:ProtectScenarios>False</x:ProtectScenarios>
</x:WorksheetOptions>
</x:ExcelWorksheet>
<x:ExcelWorksheet>
<x:Name>Non-Functional</x:Name>
<x:WorksheetOptions>
<x:ProtectContents>False</x:ProtectContents>
<x:ProtectObjects>False</x:ProtectObjects>
<x:ProtectScenarios>False</x:ProtectScenarios>
</x:WorksheetOptions>
</x:ExcelWorksheet>
<x:ExcelWorksheet>
<x:Name>Technical Architecture</x:Name>
<x:WorksheetOptions>
<x:ProtectContents>False</x:ProtectContents>
<x:ProtectObjects>False</x:ProtectObjects>
<x:ProtectScenarios>False</x:ProtectScenarios>
</x:WorksheetOptions>
</x:ExcelWorksheet>
<x:ExcelWorksheet>
<x:Name>Tool Integration</x:Name>
<x:WorksheetOptions>
<x:ProtectContents>False</x:ProtectContents>
<x:ProtectObjects>False</x:ProtectObjects>
<x:ProtectScenarios>False</x:ProtectScenarios>
</x:WorksheetOptions>
</x:ExcelWorksheet>
<x:ExcelWorksheet>
<x:Name>Support and Training</x:Name>
<x:WorksheetOptions>
<x:ProtectContents>False</x:ProtectContents>
<x:ProtectObjects>False</x:ProtectObjects>
<x:ProtectScenarios>False</x:ProtectScenarios>
</x:WorksheetOptions>
</x:ExcelWorksheet>
<x:ExcelWorksheet>
<x:Name>Data Migration</x:Name>
<x:WorksheetOptions>
<x:ProtectContents>False</x:ProtectContents>
<x:ProtectObjects>False</x:ProtectObjects>
<x:ProtectScenarios>False</x:ProtectScenarios>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
<x:WindowHeight>12660</x:WindowHeight>
<x:WindowWidth>17100</x:WindowWidth>
<x:WindowTopX>360</x:WindowTopX>
<x:WindowTopY>120</x:WindowTopY>
<x:ProtectStructure>False</x:ProtectStructure>
<x:ProtectWindows>False</x:ProtectWindows>
</x:ExcelWorkbook>
</xml>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="962" style='border-collapse:
collapse;table-layout:fixed;width:723pt'>
<col width="66" style='mso-width-source:userset;mso-width-alt:2413;width:50pt'/>
<col width="100" style='mso-width-source:userset;mso-width-alt:3657;width:75pt'/>
<col width="166" style='mso-width-source:userset;mso-width-alt:6070;width:125pt'/>
<col class="xl37" width="247" style='mso-width-source:userset;mso-width-alt:9033;
width:185pt'/>
<col width="113" style='mso-width-source:userset;mso-width-alt:4132;width:85pt'/>
<col width="270" style='mso-width-source:userset;mso-width-alt:9874;width:203pt'/>
<tr height="21" style='height:15.75pt'>
<td height="21" class="xl24" width="66" style='height:15.75pt;width:50pt'></td>
<td class="xl24" width="100" style='width:75pt'></td>
<td class="xl25" colspan="2" width="413" style='mso-ignore:colspan;width:310pt'><xsl:value-of select="/Trees/Tree/Branches/Branch/Title"/></td>
<td class="xl27" width="113" style='width:85pt'></td>
<td class="xl28" width="270" style='width:203pt'></td>
</tr>
<tr height="120" style='mso-height-source:userset;height:90.0pt'>
<td height="120" colspan="2" class="xl24" style='height:90.0pt;mso-ignore:colspan'></td>
<td class="xl25"></td>
<td class="xl26"></td>
<td colspan="2" class="xl26" width="383" style='width:288pt'>Valid Options for
Support Level:<br/>
1 - Does NOT HAVE this capability<br/>
2 - Limited capability<br/>
3 - Being considered as enhancement<br/>
4 - Has this capability<br/>
5 - Has this capability plus additional features</td>
</tr>
<xsl:call-template name="Root">
<xsl:with-param name="trunks" select="/Trees/Tree/Branches/Branch"/>
</xsl:call-template>
<tr height="0" style='display:none'>
<td width="66" style='width:50pt'></td>
<td width="100" style='width:75pt'></td>
<td width="166" style='width:125pt'></td>
<td width="247" style='width:185pt'></td>
<td width="113" style='width:85pt'></td>
<td width="270" style='width:203pt'></td>
</tr>
</table>
</body>
</html>
</xsl:template>
<xsl:template name="Root">
<xsl:param name="trunks"/>
<!-- Each of these trunks is a separate sheet -->
<xsl:for-each select="$trunks/SubBranches/Branch">
<!--tr><td>
TAB : <xsl:value-of select="Title"/>
</td></tr-->
<tr height="34" style='height:25.5pt'>
<td height="34" style='height:25.5pt'>Category</td>
<td class="xl29" width="100" style='width:75pt'>Reqt No</td>
<td class="xl29" width="166" style='width:125pt'>Requirement Description</td>
<td class="xl30" width="247" style='width:185pt'>Supporting Comments (Sky)</td>
<td class="xl31">Support Level</td>
<td class="xl30" width="270" style='width:203pt'>Supporting Comments (Vendor)</td>
</tr>
<tr><xsl:call-template name="Branch">
<xsl:with-param name="data" select="."/>
<xsl:with-param name="level" select="1"/>
</xsl:call-template></tr>
</xsl:for-each>
<br/><br/>
</xsl:template>
<xsl:template name="SubBranches">
<xsl:param name="data"/>
<xsl:param name="level"/>
<xsl:for-each select="$data/Branch">
<xsl:call-template name="Branch">
<xsl:with-param name="data" select="."/>
<xsl:with-param name="level" select="$level+1"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="Branch">
<xsl:param name="data"/>
<xsl:param name="level"/>
<xsl:choose>
<xsl:when test="SubBranches/Branch">
<xsl:choose>
<xsl:when test="$level=1">
<tr height="21" style='height:15.75pt'>
<td height="21" class="xl42" colspan="3" style='height:15.75pt;mso-ignore:colspan'><xsl:value-of select="coralquest:levelNumbering($level)"/><xsl:value-of select="$data/Title"/></td>
<td colspan="2" class="xl33" style='mso-ignore:colspan'><xsl:value-of select="$data/Note"/></td>
<td class="xl34"></td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr height="17" style='height:12.75pt'>
<td height="17" colspan="3" style='height:12.75pt;mso-ignore:colspan'><xsl:value-of select="coralquest:levelNumbering($level)"/><xsl:value-of select="$data/Title"/></td>
<td colspan="2" class="xl33" style='mso-ignore:colspan'><xsl:value-of select="$data/Note"/></td>
<td class="xl36"></td>
<td class="xl26"></td>
<td class="xl27"></td>
<td class="xl28"></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<tr height="126" style='mso-height-source:userset;height:94.5pt'>
<td height="126" style='height:94.5pt'></td>
<td class="xl38" width="100" style='width:75pt'><xsl:value-of select="coralquest:requirementNumbering()"/></td>
<td class="xl39" width="166" style='width:125pt'><xsl:value-of select="$data/Title"/></td>
<td class="xl26" width="247" style='width:185pt'><xsl:value-of select="$data/Note"/> </td>
<td class="xl27"></td>
<td class="xl28"></td>
</tr>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="$data/SubBranches">
<xsl:call-template name="SubBranches">
<xsl:with-param name="data" select="$data/SubBranches"/>
<xsl:with-param name="level" select="$level"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>