java+dom4j解析xml转excel

来源:互联网 发布:软件图标生成器 编辑:程序博客网 时间:2024/06/08 17:45
package function;import java.io.*;import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import org.apache.poi.xssf.usermodel.*;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.Attribute;public class XMLtoExcelGroup {    private static XSSFWorkbook wb;    public static void main(String[] args) {        String file = "xml的文件地址";        writeExcel(file);    }    @SuppressWarnings({ "unchecked" })    public static Map<String, List<List<String>>> analysisXml(String xmlpath) {        // 创建linkedHashmap,为有序map,map和hashMap均为无序的map        Map<String, List<List<String>>> sheetMap = new LinkedHashMap<String, List<List<String>>>();        // 创建testCaseLists,存放的是testDateLists        List<List<List<String>>> testCaseLists = new ArrayList<List<List<String>>>();        // 创建SAXReader对象        SAXReader reader = new SAXReader();        // 读取文件 转换成Document        try {            Document document = reader.read(new File(xmlpath));            // 获取根节点元素对象            Element root = document.getRootElement();            // 遍历根节点下面的所有子节点            List<Element> rootlist = root.elements();            // 循环遍历根节点下面的每一子节点            for (Element testcase : rootlist) {                // 遍历子节点下面的节点                List<Element> testCaseList = testcase.elements();                // 创建testDateLists,存放的是testDataValue                List<List<String>> testDateLists = new ArrayList<List<String>>();                // 将testDateLists加进testCaseLists中                testCaseLists.add(testDateLists);                // 将testCase的name作为key值,testDateLists作为value存进sheetMap中                sheetMap.put(testcase.attributeValue("name"), testDateLists);                // 循环遍历testCase下面的子节点,testDate                for (Element testdata : testCaseList) {                    // 遍历testDate节点的属性                    List<Attribute> attributes = testdata.attributes();                    // 创建testDateValue,将testDateValue add进去testDateLists里面                    // ,所以testDateLists的size就是sheet表的行数,testDataValue是sheet表的列数                    List<String> testDataValue = new ArrayList<String>();                    testDateLists.add(testDataValue);                    // 循环遍历属性节点                    for (Attribute att : attributes) {                        // 将属性值里面的value存进testDateValue里面,属性值里面的key为列的名称                        testDataValue.add(att.getValue());                    }                }            }        } catch (DocumentException e) {            System.out.println("xml file type error! ");        }        return sheetMap;    }    /**     * @author:      * @function: xml write in excel     * @param: path     * @exception: IOException     * @return: void     * @throws IOException     * @throws DocumentException     */    @SuppressWarnings({ "rawtypes", "static-access", "unchecked" })    public static void writeExcel(String file) {        wb = new XSSFWorkbook();// 创建工作薄        // 设置字体        XSSFFont font = wb.createFont();        font.setFontHeightInPoints((short) 24);        font.setFontName("宋体");        font.setColor(font.COLOR_NORMAL);        font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);        // 设置单元格样式        XSSFCellStyle style = wb.createCellStyle();        style.setAlignment(XSSFCellStyle.ALIGN_CENTER);        style.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);        style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);        style.setFont(font);        Map<String, List<List<String>>> sheetMap = analysisXml(file);        Iterator iterator = sheetMap.entrySet().iterator();        while (iterator.hasNext()) {            Map.Entry entry = (Map.Entry) iterator.next();            // sheetMap的 key为sheet表的名字,value为存的每一行每一列的值            XSSFSheet sheet = creatSheetHead(entry.getKey().toString());            // 写入单元格            List<List<String>> dateLists = (List<List<String>>) entry.getValue();            // 行从1开始,0位表头,testDateLists.size为sheet表的行数            for (int j = 1; j < dateLists.size() + 1; j++) {                XSSFRow row = sheet.createRow(j);                // 取list里面的数据从0开始取                List<String> dataValue = (List<String>) dateLists.get(j - 1);                // 列从0开始,list                for (int i = dataValue.size() - 1; i >= 0; i--) {                    XSSFCell cell = row.createCell(dataValue.size() - i - 1);                    cell.setCellValue(dataValue.get(i));                    // 自动设置列宽                    sheet.autoSizeColumn(i);                }            }        }        createExcel("f://file//模板6.xlsx");    }    /**     * @author:     * @function: create excel     * @param: path     * @exception: IOException     * @return: void     */    public static void createExcel(String path) {        ByteArrayOutputStream os = new ByteArrayOutputStream();        try {            wb.write(os);        } catch (IOException e) {            e.printStackTrace();        }        byte[] xlsx = os.toByteArray();        File file = new File(path);        OutputStream out = null;        try {            out = new FileOutputStream(file);            try {                out.write(xlsx);            } catch (IOException e) {                e.printStackTrace();            }        } catch (FileNotFoundException e) {            e.printStackTrace();        }    }    /**     * @author:     * @function: create sheet's head     * @param: groups     * @exception: null     * @return: XSSFSheet     */    private static XSSFSheet creatSheetHead(String sheetName) {        // 创建工作表        XSSFSheet sheet = wb.createSheet(sheetName);// 创建工作表        // 创建第一行第一列,行高为500        XSSFRow rowhead = sheet.createRow(0);        rowhead.setHeight((short) 500);        // 创建表头的内容        List<String> sheetHead = new ArrayList<String>();        sheetHead.add(0, "description");        sheetHead.add(1, "key");        sheetHead.add(2, "group");        // 写入表头内容        for (int j = 0; j < sheetHead.size(); j++) {            XSSFCell cellhead = rowhead.createCell(j);            cellhead.setCellValue(sheetHead.get(j));            // 设置自动列宽            sheet.autoSizeColumn(j);        }        return sheet;    }}
0 0
原创粉丝点击