生成的excel可以打开,有没有解决方法,如何解决?

使用Freemarker生成的excel,无法用easyExcel,Poi读入,
报错The supplied data appears to be a raw XML file. Formats such as Office 2003 XML are not supported有解决方法吗

生成的excel可以打开,但是会显示,感觉问题就是出现在这,有没有解决方法

img

可以先用其他软件转化下。然后再尝试用easyExcel 去读取内容

  • 这篇博客: Freemarker整合poi导出带有图片的Excel教程中的 3.工具类依赖的XML解析器 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 这个类是用来读取Freemarker导出的xml格式的Excel。将xml格式的Excel转化为xls格式的以后,才能向Excel中插入图片。

    package com.study.commons.utils;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.springframework.util.CollectionUtils;
    import org.springframework.util.ObjectUtils;
    
    import com.study.entity.excel.Cell;
    import com.study.entity.excel.Column;
    import com.study.entity.excel.Data;
    import com.study.entity.excel.Font;
    import com.study.entity.excel.Row;
    import com.study.entity.excel.Style;
    import com.study.entity.excel.Table;
    import com.study.entity.excel.Worksheet;
    
    /**
     * 
     * @project freemarker-excel
     * @description: 读取XML文件工具
     * @author 大脑补丁
     * @create 2020-04-21 08:58
     */
    public class XmlReader {
    
        // 获取样式
        @SuppressWarnings("rawtypes")
        public static Map<String, Style> getStyle(Document document) {
            // 创建一个LinkedHashMap用于存放style,按照id查找
            Map<String, Style> styleMap = new LinkedHashMap<String, Style>();
            // 新建一个Style类用于存放节点数据
            Style style = null;
            // 获取根节点
            Element root = document.getRootElement();
            // 获取根节点下的Styles节点
            Element styles = root.element("Styles");
            // 获取Styles下的Style节点
            List styleList = styles.elements("Style");
            Iterator<?> it = styleList.iterator();
            while (it.hasNext()) {
                // 新建一个Style类用于存放节点数据
                style = new Style();
                Element e = (Element)it.next();
                String id = e.attributeValue("ID").toString();
                // 设置style的id
                style.setId(id);
                if (e.attributeValue("Name") != null) {
                    String name = e.attributeValue("Name").toString();
                    // 设置style的name
                    style.setName(name);
                }
                // 获取Style下的NumberFormat节点
                Element enumberFormat = e.element("NumberFormat");
                if (enumberFormat != null) {
                    Style.NumberFormat numberFormat = new Style.NumberFormat();
                    numberFormat.setFormat(enumberFormat.attributeValue("Format"));
                    style.setNumberFormat(numberFormat);
                }
                Style.Alignment alignment = new Style.Alignment();
                // 获取Style下的Alignment节点
                Element ealignment = e.element("Alignment");
                if (ealignment != null) {
                    // 设置aligment的相关属性,并且设置style的aliment属性
                    alignment.setHorizontal(ealignment.attributeValue("Horizontal"));
                    alignment.setVertical(ealignment.attributeValue("Vertical"));
                    alignment.setWrapText(ealignment.attributeValue("WrapText"));
                    style.setAlignment(alignment);
                }
                // 获取Style下的Borders节点
                Element Borders = e.element("Borders");
                if (Borders != null) {
                    // 获取Borders下的Border节点
                    List Border = Borders.elements("Border");
                    // 用迭代器遍历Border节点
                    Iterator<?> borderIterator = Border.iterator();
                    List<Style.Border> lborders = new ArrayList<Style.Border>();
                    while (borderIterator.hasNext()) {
                        Element bd = (Element)borderIterator.next();
                        Style.Border border = new Style.Border();
                        border.setPosition(bd.attributeValue("Position"));
                        if (bd.attribute("LineStyle") != null) {
                            border.setLinestyle(bd.attributeValue("LineStyle"));
                            int weight = Integer.parseInt(bd.attributeValue("Weight"));
                            border.setWeight(weight);
                            border.setColor(bd.attributeValue("Color"));
                        }
                        lborders.add(border);
                    }
                    style.setBorders(lborders);
                }
    
                // 设置font的相关属性,并且设置style的font属性
                Style.Font font = new Style.Font();
                Element efont = e.element("Font");
                font.setFontName(efont.attributeValue("FontName"));
                if (efont.attributeValue("Size") != null) {
                    double size = Double.parseDouble(efont.attributeValue("Size"));
                    font.setSize(size);
                }
                if (efont.attribute("Bold") != null) {
                    int bold = Integer.parseInt(efont.attributeValue("Bold"));
                    font.setBold(bold);
                }
                font.setColor(efont.attributeValue("Color"));
                style.setFont(font);
                // 设置Interior的相关属性,并且设置style的interior属性
                Style.Interior interior = new Style.Interior();
                if (e.element("Interior") != null) {
                    Element einterior = e.element("Interior");
                    interior.setColor(einterior.attributeValue("Color"));
                    interior.setPattern(einterior.attributeValue("Pattern"));
                }
                style.setInterior(interior);
                if (e.element("Protection") != null) {
                    Element protectione = e.element("Protection");
                    Style.Protection protection = new Style.Protection();
                    protection.setModifier(protectione.attributeValue("Protected"));
                    style.setProtection(protection);
                }
                styleMap.put(id, style);
    
            }
            return styleMap;
        }
    
        @SuppressWarnings("unchecked")
        public static List<Worksheet> getWorksheet(Document document) {
            List<Worksheet> worksheets = new ArrayList<>();
            Element root = document.getRootElement();
            // 读取根节点下的Worksheet节点
            List<Element> sheets = root.elements("Worksheet");
            if (CollectionUtils.isEmpty(sheets)) {
                return worksheets;
            }
    
            for (Element sheet : sheets) {
                Worksheet worksheet = new Worksheet();
                String name = sheet.attributeValue("Name");
                worksheet.setName(name);
                Table table = getTable(sheet);
                worksheet.setTable(table);
                worksheets.add(worksheet);
            }
            return worksheets;
        }
    
        private static Table getTable(Element sheet) {
            Element tableElement = sheet.element("Table");
            if (tableElement == null) {
                return null;
            }
            Table table = new Table();
            String expandedColumnCount = tableElement.attributeValue("ExpandedColumnCount");
            if (expandedColumnCount != null) {
                table.setExpandedColumnCount(Integer.parseInt(expandedColumnCount));
            }
            String expandedRowCount = tableElement.attributeValue("ExpandedRowCount");
            if (expandedRowCount != null) {
                table.setExpandedRowCount(Integer.parseInt(expandedRowCount));
            }
            String fullColumns = tableElement.attributeValue("FullColumns");
            if (fullColumns != null) {
                table.setFullColumns(Integer.parseInt(fullColumns));
            }
    
            String fullRows = tableElement.attributeValue("FullRows");
            if (fullRows != null) {
                table.setFullRows(Integer.parseInt(fullRows));
            }
            String defaultColumnWidth = tableElement.attributeValue("DefaultColumnWidth");
            if (defaultColumnWidth != null) {
                table.setDefaultColumnWidth(Double.valueOf(defaultColumnWidth).intValue());
            }
    
            String defaultRowHeight = tableElement.attributeValue("DefaultRowHeight");
            if (defaultRowHeight != null) {
                table.setDefaultRowHeight(Double.valueOf(defaultRowHeight).intValue());
            }
            // 读取列
            List<Column> columns = getColumns(tableElement, expandedColumnCount, defaultColumnWidth);
            table.setColumns(columns);
    
            // 读取行
            List<Row> rows = getRows(tableElement);
            table.setRows(rows);
            return table;
        }
    
        @SuppressWarnings("unchecked")
        private static List<Row> getRows(Element tableElement) {
            List<Element> rowElements = tableElement.elements("Row");
            if (CollectionUtils.isEmpty(rowElements)) {
                return null;
            }
            List<Row> rows = new ArrayList<>();
            for (Element rowElement : rowElements) {
                Row row = new Row();
                String height = rowElement.attributeValue("Height");
                if (height != null) {
                    row.setHeight(Double.valueOf(height).intValue());
                }
    
                String index = rowElement.attributeValue("Index");
                if (index != null) {
                    row.setIndex(Integer.valueOf(index));
                }
                List<Cell> cells = getCells(rowElement);
                row.setCells(cells);
                rows.add(row);
            }
            return rows;
        }
    
        @SuppressWarnings("unchecked")
        private static List<Cell> getCells(Element rowElement) {
            List<Element> cellElements = rowElement.elements("Cell");
            if (CollectionUtils.isEmpty(cellElements)) {
                return null;
            }
            List<Cell> cells = new ArrayList<>();
            for (Element cellElement : cellElements) {
                Cell cell = new Cell();
                String styleID = cellElement.attributeValue("StyleID");
                if (styleID != null) {
                    cell.setStyleID(styleID);
                }
                String mergeAcross = cellElement.attributeValue("MergeAcross");
                if (mergeAcross != null) {
                    cell.setMergeAcross(Double.valueOf(mergeAcross).intValue());
                }
    
                String mergeDown = cellElement.attributeValue("MergeDown");
                if (mergeDown != null) {
                    cell.setMergeDown(Double.valueOf(mergeDown).intValue());
                }
    
                String index = cellElement.attributeValue("Index");
                if (index != null) {
                    cell.setIndex(Integer.valueOf(index));
                }
                Element dataElement = cellElement.element("Data");
                if (dataElement != null) {
                    Data data = new Data();
                    String type = dataElement.attributeValue("Type");
                    String xmlns = dataElement.attributeValue("xmlns");
                    data.setType(type);
                    data.setXmlns(xmlns);
                    data.setText(dataElement.getText());
                    Element bElement = dataElement.element("B");
                    Integer bold = null;
                    Element fontElement = null;
                    if (bElement != null) {
                        fontElement = bElement.element("Font");
                        bold = 1;
                    }
                    Element uElement = dataElement.element("U");
                    if (uElement != null) {
                        fontElement = uElement.element("Font");
                    }
                    if (fontElement == null) {
                        fontElement = dataElement.element("Font");
                    }
                    if (fontElement != null) {
                        Font font = new Font();
                        String face = fontElement.attributeValue("Face");
                        if (face != null) {
                            font.setFace(face);
                        }
                        String charSet = fontElement.attributeValue("CharSet");
                        if (charSet != null) {
                            font.setCharSet(charSet);
                        }
                        String color = fontElement.attributeValue("Color");
                        if (color != null) {
                            font.setColor(color);
                        }
                        if (bold != null) {
                            font.setBold(bold);
                        }
                        font.setText(fontElement.getText());
                        data.setFont(font);
                    }
    
                    cell.setData(data);
                }
                cells.add(cell);
            }
            return cells;
        }
    
        @SuppressWarnings("unchecked")
        private static List<Column> getColumns(Element tableElement, String expandedRowCount, String defaultColumnWidth) {
            List<Element> columnElements = tableElement.elements("Column");
            if (CollectionUtils.isEmpty(columnElements)) {
                return null;
            }
            if (ObjectUtils.isEmpty(expandedRowCount)) {
                return null;
            }
            int defaultWidth = 60;
            if (!ObjectUtils.isEmpty(defaultColumnWidth)) {
                defaultWidth = Double.valueOf(defaultColumnWidth).intValue();
            }
            List<Column> columns = new ArrayList<>();
            int indexNum = 0;
            for (int i = 0; i < columnElements.size(); i++) {
                Column column = new Column();
                Element columnElement = columnElements.get(i);
                String index = columnElement.attributeValue("Index");
                if (index != null) {
                    if (indexNum < Integer.valueOf(index) - 1) {
                        for (int j = indexNum; j < Integer.valueOf(index) - 1; j++) {
                            column = new Column();
                            column.setIndex(indexNum);
                            column.setWidth(defaultWidth);package com.study.commons.utils;
    
    import com.study.entity.excel.*;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.springframework.util.CollectionUtils;
    import org.springframework.util.ObjectUtils;
    
    import java.util.*;
    
    /**
     * @author 大脑补丁
     * @project freemarker-excel
     * @description: 读取XML文件工具
     * @create 2020-04-21 08:58
     */
    public class XmlReader {
    
    	// 获取样式
    	@SuppressWarnings("rawtypes")
    	public static Map<String, Style> getStyle(Document document) {
    		// 创建一个LinkedHashMap用于存放style,按照id查找
    		Map<String, Style> styleMap = new LinkedHashMap<String, Style>();
    		// 新建一个Style类用于存放节点数据
    		Style style = null;
    		// 获取根节点
    		Element root = document.getRootElement();
    		// 获取根节点下的Styles节点
    		Element styles = root.element("Styles");
    		// 获取Styles下的Style节点
    		List styleList = styles.elements("Style");
    		Iterator<?> it = styleList.iterator();
    		while (it.hasNext()) {
    			// 新建一个Style类用于存放节点数据
    			style = new Style();
    			Element e = (Element) it.next();
    			String id = e.attributeValue("ID").toString();
    			// 设置style的id
    			style.setId(id);
    			if (e.attributeValue("Name") != null) {
    				String name = e.attributeValue("Name").toString();
    				// 设置style的name
    				style.setName(name);
    			}
    			// 获取Style下的NumberFormat节点
    			Element enumberFormat = e.element("NumberFormat");
    			if (enumberFormat != null) {
    				Style.NumberFormat numberFormat = new Style.NumberFormat();
    				numberFormat.setFormat(enumberFormat.attributeValue("Format"));
    				style.setNumberFormat(numberFormat);
    			}
    			Style.Alignment alignment = new Style.Alignment();
    			// 获取Style下的Alignment节点
    			Element ealignment = e.element("Alignment");
    			if (ealignment != null) {
    				// 设置aligment的相关属性,并且设置style的aliment属性
    				alignment.setHorizontal(ealignment.attributeValue("Horizontal"));
    				alignment.setVertical(ealignment.attributeValue("Vertical"));
    				alignment.setWrapText(ealignment.attributeValue("WrapText"));
    				style.setAlignment(alignment);
    			}
    			// 获取Style下的Borders节点
    			Element Borders = e.element("Borders");
    			if (Borders != null) {
    				// 获取Borders下的Border节点
    				List Border = Borders.elements("Border");
    				// 用迭代器遍历Border节点
    				Iterator<?> borderIterator = Border.iterator();
    				List<Style.Border> lborders = new ArrayList<Style.Border>();
    				while (borderIterator.hasNext()) {
    					Element bd = (Element) borderIterator.next();
    					Style.Border border = new Style.Border();
    					border.setPosition(bd.attributeValue("Position"));
    					if (bd.attribute("LineStyle") != null) {
    						border.setLinestyle(bd.attributeValue("LineStyle"));
    						int weight = Integer.parseInt(bd.attributeValue("Weight"));
    						border.setWeight(weight);
    						border.setColor(bd.attributeValue("Color"));
    					}
    					lborders.add(border);
    				}
    				style.setBorders(lborders);
    			}
    
    			// 设置font的相关属性,并且设置style的font属性
    			Style.Font font = new Style.Font();
    			Element efont = e.element("Font");
    			font.setFontName(efont.attributeValue("FontName"));
    			if (efont.attributeValue("Size") != null) {
    				double size = Double.parseDouble(efont.attributeValue("Size"));
    				font.setSize(size);
    			}
    			if (efont.attribute("Bold") != null) {
    				int bold = Integer.parseInt(efont.attributeValue("Bold"));
    				font.setBold(bold);
    			}
    			font.setColor(efont.attributeValue("Color"));
    			style.setFont(font);
    			// 设置Interior的相关属性,并且设置style的interior属性
    			Style.Interior interior = new Style.Interior();
    			if (e.element("Interior") != null) {
    				Element einterior = e.element("Interior");
    				interior.setColor(einterior.attributeValue("Color"));
    				interior.setPattern(einterior.attributeValue("Pattern"));
    			}
    			style.setInterior(interior);
    			if (e.element("Protection") != null) {
    				Element protectione = e.element("Protection");
    				Style.Protection protection = new Style.Protection();
    				protection.setModifier(protectione.attributeValue("Protected"));
    				style.setProtection(protection);
    			}
    			styleMap.put(id, style);
    
    		}
    		return styleMap;
    	}
    
    	@SuppressWarnings("unchecked")
    	public static List<Worksheet> getWorksheet(Document document) {
    		List<Worksheet> worksheets = new ArrayList<>();
    		Element root = document.getRootElement();
    		// 读取根节点下的Worksheet节点
    		List<Element> sheets = root.elements("Worksheet");
    		if (CollectionUtils.isEmpty(sheets)) {
    			return worksheets;
    		}
    
    		for (Element sheet : sheets) {
    			Worksheet worksheet = new Worksheet();
    			String name = sheet.attributeValue("Name");
    			worksheet.setName(name);
    			Table table = getTable(sheet);
    			worksheet.setTable(table);
    			worksheets.add(worksheet);
    		}
    		return worksheets;
    	}
    
    	private static Table getTable(Element sheet) {
    		Element tableElement = sheet.element("Table");
    		if (tableElement == null) {
    			return null;
    		}
    		Table table = new Table();
    		String expandedColumnCount = tableElement.attributeValue("ExpandedColumnCount");
    		if (expandedColumnCount != null) {
    			table.setExpandedColumnCount(Integer.parseInt(expandedColumnCount));
    		}
    		String expandedRowCount = tableElement.attributeValue("ExpandedRowCount");
    		if (expandedRowCount != null) {
    			table.setExpandedRowCount(Integer.parseInt(expandedRowCount));
    		}
    		String fullColumns = tableElement.attributeValue("FullColumns");
    		if (fullColumns != null) {
    			table.setFullColumns(Integer.parseInt(fullColumns));
    		}
    
    		String fullRows = tableElement.attributeValue("FullRows");
    		if (fullRows != null) {
    			table.setFullRows(Integer.parseInt(fullRows));
    		}
    		String defaultColumnWidth = tableElement.attributeValue("DefaultColumnWidth");
    		if (defaultColumnWidth != null) {
    			table.setDefaultColumnWidth(Double.valueOf(defaultColumnWidth).intValue());
    		}
    
    		String defaultRowHeight = tableElement.attributeValue("DefaultRowHeight");
    		if (defaultRowHeight != null) {
    			table.setDefaultRowHeight(Double.valueOf(defaultRowHeight).intValue());
    		}
    		// 读取列
    		List<Column> columns = getColumns(tableElement, expandedColumnCount, defaultColumnWidth);
    		table.setColumns(columns);
    
    		// 读取行
    		List<Row> rows = getRows(tableElement);
    		table.setRows(rows);
    		return table;
    	}
    
    	@SuppressWarnings("unchecked")
    	private static List<Row> getRows(Element tableElement) {
    		List<Element> rowElements = tableElement.elements("Row");
    		if (CollectionUtils.isEmpty(rowElements)) {
    			return null;
    		}
    		List<Row> rows = new ArrayList<>();
    		for (Element rowElement : rowElements) {
    			Row row = new Row();
    			String height = rowElement.attributeValue("Height");
    			if (height != null) {
    				row.setHeight(Double.valueOf(height).intValue());
    			}
    
    			String index = rowElement.attributeValue("Index");
    			if (index != null) {
    				row.setIndex(Integer.valueOf(index));
    			}
    			List<Cell> cells = getCells(rowElement);
    			row.setCells(cells);
    			rows.add(row);
    		}
    		return rows;
    	}
    
    	@SuppressWarnings("unchecked")
    	private static List<Cell> getCells(Element rowElement) {
    		List<Element> cellElements = rowElement.elements("Cell");
    		if (CollectionUtils.isEmpty(cellElements)) {
    			return null;
    		}
    		List<Cell> cells = new ArrayList<>();
    		for (Element cellElement : cellElements) {
    			Cell cell = new Cell();
    			String styleID = cellElement.attributeValue("StyleID");
    			if (styleID != null) {
    				cell.setStyleID(styleID);
    			}
    			String mergeAcross = cellElement.attributeValue("MergeAcross");
    			if (mergeAcross != null) {
    				cell.setMergeAcross(Integer.valueOf(mergeAcross));
    			}
    
    			String mergeDown = cellElement.attributeValue("MergeDown");
    			if (mergeDown != null) {
    				cell.setMergeDown(Integer.valueOf(mergeDown));
    			}
    
    			String index = cellElement.attributeValue("Index");
    			if (index != null) {
    				cell.setIndex(Integer.valueOf(index));
    			}
    			Element commentElement = cellElement.element("Comment");
    			if (commentElement != null) {
    				Comment comment = new Comment();
    				String author = commentElement.attributeValue("Author");
    				Element fontElement = commentElement.element("Font");
    				Element dataElement = commentElement.element("Data");
    				if (dataElement != null) {
    					Data data = new Data();
    					data.setText(dataElement.getStringValue());
    					comment.setData(data);
    				}
    				if (fontElement != null) {
    					Font font = new Font();
    					font.setText(fontElement.getText());
    					font.setBold(1);
    					String color = fontElement.attributeValue("Color");
    					if (color != null) {
    						font.setColor(color);
    					}
    					comment.setFont(font);
    				}
    				comment.setAuthor(author);
    				cell.setComment(comment);
    			}
    
    			Element dataElement = cellElement.element("Data");
    			if (dataElement != null) {
    				Data data = new Data();
    				String type = dataElement.attributeValue("Type");
    				String xmlns = dataElement.attributeValue("xmlns");
    				data.setType(type);
    				data.setXmlns(xmlns);
    				data.setText(dataElement.getText());
    				Element bElement = dataElement.element("B");
    				Integer bold = null;
    				Element fontElement = null;
    				if (bElement != null) {
    					fontElement = bElement.element("Font");
    					bold = 1;
    				}
    				Element uElement = dataElement.element("U");
    				if (uElement != null) {
    					fontElement = uElement.element("Font");
    				}
    				if (fontElement == null) {
    					fontElement = dataElement.element("Font");
    				}
    				if (fontElement != null) {
    					Font font = new Font();
    					String face = fontElement.attributeValue("Face");
    					if (face != null) {
    						font.setFace(face);
    					}
    					String charSet = fontElement.attributeValue("CharSet");
    					if (charSet != null) {
    						font.setCharSet(charSet);
    					}
    					String color = fontElement.attributeValue("Color");
    					if (color != null) {
    						font.setColor(color);
    					}
    					if (bold != null) {
    						font.setBold(bold);
    					}
    					font.setText(fontElement.getText());
    					data.setFont(font);
    				}
    
    				cell.setData(data);
    			}
    			cells.add(cell);
    		}
    		return cells;
    	}
    
    	@SuppressWarnings("unchecked")
    	private static List<Column> getColumns(Element tableElement, String expandedRowCount, String defaultColumnWidth) {
    		List<Element> columnElements = tableElement.elements("Column");
    		if (CollectionUtils.isEmpty(columnElements)) {
    			return null;
    		}
    		if (ObjectUtils.isEmpty(expandedRowCount)) {
    			return null;
    		}
    		int defaultWidth = 60;
    		if (!ObjectUtils.isEmpty(defaultColumnWidth)) {
    			defaultWidth = Double.valueOf(defaultColumnWidth).intValue();
    		}
    		List<Column> columns = new ArrayList<>();
    		int indexNum = 0;
    		for (int i = 0; i < columnElements.size(); i++) {
    			Column column = new Column();
    			Element columnElement = columnElements.get(i);
    			String index = columnElement.attributeValue("Index");
    			if (index != null) {
    				if (indexNum < Integer.valueOf(index) - 1) {
    					for (int j = indexNum; j < Integer.valueOf(index) - 1; j++) {
    						column = new Column();
    						column.setIndex(indexNum);
    						column.setWidth(defaultWidth);
    						columns.add(column);
    						indexNum += 1;
    					}
    				}
    				column = new Column();
    			}
    			column.setIndex(indexNum);
    			String autoFitWidth = columnElement.attributeValue("AutoFitWidth");
    			if (autoFitWidth != null) {
    				column.setAutofitwidth(Double.valueOf(autoFitWidth).intValue());
    			}
    			String width = columnElement.attributeValue("Width");
    			if (width != null) {
    				column.setWidth(Double.valueOf(width).intValue());
    			}
    			columns.add(column);
    			indexNum += 1;
    		}
    		if (columns.size() < Integer.valueOf(expandedRowCount)) {
    			for (int i = columns.size() + 1; i <= Integer.valueOf(expandedRowCount); i++) {
    				Column column = new Column();
    				column.setIndex(i);
    				column.setWidth(defaultWidth);
    				columns.add(column);
    			}
    		}
    		return columns;
    	}
    }