Excel转XMind详解

发布时间:2023-05-19

一、Excel转XMind的原理

Excel与XMind的文件格式有很多不同,Excel主要以xls或xlsx格式存储,而XMind主要以xmind或mm格式存储。因此,将Excel转成XMind的关键是将Excel中的数据转化为XMind可以识别的数据格式。通过对Excel数据的解析和转换,再把处理后的数据存储为XMind文件格式。 下面是关键代码示例:

/**
 * 读取excel文件并返回数据
 *
 * @param filePath 文件路径
 * @return 数据对象
 */
private static List<List<Object>> readExcel(String filePath) throws IOException {
    List<List<Object>> res = new ArrayList<>();
    InputStream is = new FileInputStream(filePath);
    Workbook wb = WorkbookFactory.create(is);
    Sheet sheet = wb.getSheetAt(0);
    int rowStart = Math.min(0, sheet.getFirstRowNum());
    int rowEnd = Math.max(0, sheet.getLastRowNum());
    for (int i = rowStart; i <= rowEnd; i++) {
        Row row = sheet.getRow(i);
        if (row == null) {
            continue;
        }
        int cellStart = Math.min(0, row.getFirstCellNum());
        int cellEnd = Math.max(0, row.getLastCellNum());
        List<Object> rowList = new ArrayList<>();
        for (int j = cellStart; j <= cellEnd; j++) {
            Cell cell = row.getCell(j);
            if (cell == null) {
                continue;
            }
            rowList.add(getCellValue(cell));
        }
        res.add(rowList);
    }
    return res;
}
/**
 * 获取单元格内容
 *
 * @param cell 单元格对象
 * @return 单元格内容
 */
private static Object getCellValue(Cell cell) {
    Object result = null;
    switch (cell.getCellType()) {
        case Cell.CELL_TYPE_STRING:
            result = cell.getStringCellValue();
            break;
        case Cell.CELL_TYPE_NUMERIC:
            result = cell.getNumericCellValue();
            break;
        case Cell.CELL_TYPE_BOOLEAN:
            result = cell.getBooleanCellValue();
            break;
        default:
            break;
    }
    return result;
}
/**
 * 将excel数据转换成XMind数据,即节点集合
 *
 * @param dataList Excel数据列表
 * @return 节点集合
 */
private static List<Node> convertToNodeList(List<List<Object>> dataList) {
    List<Node> nodeList = new ArrayList<>();
    for (List<Object> data : dataList) {
        String topic = data.get(0).toString();
        Node node = new Node(topic);
        if (data.size() > 1) {
            for (int i = 1; i < data.size(); i++) {
                node.addSubNode(new Node(data.get(i).toString()));
            }
        }
        nodeList.add(node);
    }
    return nodeList;
}
/**
 * 将节点集合转成XMind并保存为文件
 *
 * @param nodeList 节点集合
 * @param filePath 文件路径
 */
private static void saveToXMind(List<Node> nodeList, String filePath) throws IOException {
    IWorkbookBuilder builder = Core.getWorkbookBuilder();
    IWorkbook workbook = builder.createWorkbook(new File(filePath));
    ISheet sheet1 = workbook.getPrimarySheet();
    for (Node node : nodeList) {
        ITopic topic = sheet1.getRootTopic().addSubTopic();
        topic.setTitleText(node.getTopic());
        for (Node subNode : node.getSubNodeList()) {
            ITopic subTopic = topic.addSubTopic();
            subTopic.setTitleText(subNode.getTopic());
        }
    }
    FileOutputStream out = new FileOutputStream(filePath);
    workbook.save(out);
    out.close();
}

二、Excel转XMind的步骤

Excel转XMind的步骤可以分为以下几步:

  1. 读取Excel文件,获取数据列表。
  2. 将数据转化为XMind支持的节点集合。
  3. 将节点集合转成XMind。
  4. 保存为XMind文件。 下面是详细的代码示例:
/**
 * Excel文件转成XMind文件
 *
 * @param inputFilePath  Excel文件路径
 * @param outputFilePath XMind文件路径
 */
public static void excelToXMind(String inputFilePath, String outputFilePath) throws IOException {
    // 1. 读取Excel文件,获取数据列表
    List<List<Object>> dataList = readExcel(inputFilePath);
    // 2. 将数据转化为XMind支持的节点集合
    List<Node> nodeList = convertToNodeList(dataList);
    // 3. 将节点集合转成XMind
    saveToXMind(nodeList, outputFilePath);
}

三、Excel转XMind的注意事项

在将Excel文件转成XMind时,需要注意以下几点:

  1. 输入文件格式:Excel文件应该是.xls或.xlsx格式的文件。
  2. Excel数据内容:Excel文件应该是纯文本格式的,不支持公式和图表等;同时,表格中最多只能有两列信息,一列用于设置节点主题,另一列用于设置子节点主题。
  3. 输出文件格式:XMind文件应该是.xmind或.mm格式的文件。

四、Excel转XMind的应用场景

Excel转XMind主要用于将Excel中的数据快速转化成思维导图的形式。适用于需要将Excel表格中的数据可视化展示的场景,如各种图表的数据、市场调研数据等。