Java 实现Excle表转成XML格式 如何读取和写入xml文件?

 输入sheet表名

package com.brains.crm.i18;

import java.io.*;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.UtilValidate;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;

import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

/**
 * @version 1.0
 * @author: wjq
 * @description
 * @date 2022/5/30 12:51
 */
public class ExcelToXml {
    public static void main(String[] args) {
        try {
            InputStream inp = new FileInputStream(new File("D:\\CRM-中英文-王金强.xlsx"));
            String sheetName = "order";
            List<Map<String, String>> list = readExcel(inp, sheetName);
//        dealList(list);
            StringBuffer sb = new StringBuffer();
            sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
            sb.append("<resource xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"https://ofbiz.apache.org/dtds/ofbiz-properties.xsd\">\n");

            for (Map<String, String> map : list) {
                if (UtilValidate.isNotEmpty(map.get("KEY"))) {
                    sb.append("     <property key=\"").append(map.get("KEY").replace(" ","")).append("\">\n");
                } else if (UtilValidate.isNotEmpty(map.get("英文"))) {
                    sb.append("     <property key=\"").append(map.get("英文").replace(" ","")).append("\">\n");
                } else {
                    sb.append("     <property key=\"").append(map.get("KEY")).append("\">\n");
                }
                sb.append("         <value xml:lang=\"zn\">").append(map.get("中文")).append("</value>\n");
                sb.append("         <value xml:lang=\"en\">").append(map.get("英文")).append("</value>\n");
                sb.append("         <value xml:lang=\"ja\">").append(map.get("日文")).append("</value>\n");
                sb.append("     </property>\n");
            }
            sb.append("</resource>\n");
            System.out.println(sb.toString());
//            生成xml文件
            File file = new File("E:\\workspace\\svn\\scsk_pj\\SccmPlatform\\04Code\\crm\\trunk\\plugins\\crm\\config\\CrmUitLabels-" + sheetName + ".xml");
            if (!file.exists()) {
                file.createNewFile();
            }
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setIndent(true);// 设置缩进
            format.setIndent("  ");// 空行方式缩进
            format.setNewlines(true);// 设置换行
            XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
            // 设置是否转义,默认使用转义字符
            writer.setEscapeText(false);
            writer.write(sb.toString());
            writer.close();
            System.out.println("生成.xml成功");
        } catch (Exception e) {
            Debug.logError(e, "生成.xml文件失败");
            System.out.println("生成.xml失败");
        }
    }

    /**
     * 读取Excel文件的内容
     *
     * @param inputStream excel文件,以InputStream的形式传入
     * @param sheetName   sheet名字
     * @return 以List返回excel中内容
     */
    public static List<Map<String, String>> readExcel(InputStream inputStream, String sheetName) {
        //定义工作簿
        XSSFWorkbook xssfWorkbook = null;
        try {
            xssfWorkbook = new XSSFWorkbook(inputStream);
        } catch (Exception e) {
            System.out.println("Excel data file cannot be found!");
        }
        //定义工作表
        XSSFSheet xssfSheet;
        if ("".equals(sheetName)) {
            // 默认取第一个子表
            assert xssfWorkbook != null;
            xssfSheet = xssfWorkbook.getSheetAt(0);
        } else {
            assert xssfWorkbook != null;
            xssfSheet = xssfWorkbook.getSheet(sheetName);
        }
        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
        int maxRow = xssfSheet.getLastRowNum();
        //默认第一行为标题行,index = 0
        XSSFRow titleRow = xssfSheet.getRow(0);
//        System.out.println("总行数为:" + maxRow);
        for (int row = 1; row <= maxRow; row++) {
            XSSFRow xss = xssfSheet.getRow(row);
            if (xss != null) {
                int maxRol = xssfSheet.getRow(row).getLastCellNum();
//                System.out.println("--------第" + row + "行的数据如下--------");
                Map<String, String> map = new LinkedHashMap<String, String>();
                for (int rol = 1; rol < maxRol; rol++) {
                    XSSFCell cell = xssfSheet.getRow(row).getCell(rol);
                    if (UtilValidate.isNotEmpty(cell)) {
                        cell.setCellType(CellType.STRING);
                        //System.out.print(cell.getStringCellValue());
                        if (UtilValidate.isNotEmpty(titleRow.getCell(rol))) {
                            map.put(titleRow.getCell(rol).getStringCellValue(), cell.getStringCellValue());
                        }
                    }
                }
                //System.out.println();
                list.add(map);
            }
        }
        //System.out.println();
        int i = 1;
        for (Map<String, String> map1 : list) {
            //System.out.print(i+" ");
            for (Object key : map1.keySet()) {
                //System.out.print(" "+key+":"+map1.get(key));
            }
            //System.out.println();
            i++;
        }
        return list;
    }

}

直接整个Excle表

package com.brains.crm.i18;

import java.io.*;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.UtilValidate;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;

import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

/**
 * @version 1.0
 * @author: wjq
 * @description
 * @date 2022/5/30 12:51
 */
public class ExcelToXmlList {
    public static void main(String[] args) throws FileNotFoundException {
        InputStream inp = new FileInputStream(new File("D:\\CRM-中英文-partygroup.xlsx"));
        List<Map<String, String>> list = readExcel(inp);
    }

    /**
     * 读取Excel文件的内容
     *
     * @param inputStream excel文件,以InputStream的形式传入
     * @return 以List返回excel中内容
     */
    public static List<Map<String, String>> readExcel(InputStream inputStream) {
        //定义工作簿
        XSSFWorkbook xssfWorkbook = null;
        try {
            xssfWorkbook = new XSSFWorkbook(inputStream);
        } catch (Exception e) {
            System.out.println("Excel data file cannot be found!");
        }
        int numberOfSheets = xssfWorkbook.getNumberOfSheets();
        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
        for (int i = 0; i < numberOfSheets; i++) {
            List<Map<String, String>> sheetList = new ArrayList<Map<String, String>>();
            XSSFSheet sheetAt = xssfWorkbook.getSheetAt(i);
            //定义工作表
            String sheetName = xssfWorkbook.getSheetName(i);
            int maxRow = sheetAt.getLastRowNum();
            //默认第一行为标题行,index = 0
            XSSFRow titleRow = sheetAt.getRow(0);

            for (int row = 1; row <= maxRow; row++) {
                XSSFRow xss = sheetAt.getRow(row);
                if (xss != null) {
                    int maxRol = sheetAt.getRow(row).getLastCellNum();
                    Map<String, String> map = new LinkedHashMap<String, String>();
                    for (int rol = 1; rol < maxRol; rol++) {
                        XSSFCell cell = sheetAt.getRow(row).getCell(rol);
                        if (UtilValidate.isNotEmpty(cell)) {
                            cell.setCellType(CellType.STRING);
                            //System.out.print(cell.getStringCellValue());
                            if (UtilValidate.isNotEmpty(titleRow.getCell(rol))) {
                                map.put(titleRow.getCell(rol).getStringCellValue(), cell.getStringCellValue());
                            }
                        }
                    }
                    sheetList.add(map);
                }
            }
            StringBuffer xmlDetails  = new StringBuffer();
            xmlDetails.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
            xmlDetails.append("<resource xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"https://ofbiz.apache.org/dtds/ofbiz-properties.xsd\">\n");
            for (Map<String, String> map : sheetList) {
                if (UtilValidate.isNotEmpty(map.get("KEY"))) {
                    xmlDetails.append("     <property key=\"").append(map.get("KEY").replace(" ","")).append("\">\n");
                } else if (UtilValidate.isNotEmpty(map.get("EN"))) {
                    xmlDetails.append("     <property key=\"").append(map.get("EN").replace(" ","")).append("\">\n");
                } else {
                    xmlDetails.append("     <property key=\"").append(map.get("KEY")).append("\">\n");
                }
                xmlDetails.append("         <value xml:lang=\"zh\">").append(map.get("ZH")).append("</value>\n");
                xmlDetails.append("         <value xml:lang=\"en\">").append(map.get("EN")).append("</value>\n");
                xmlDetails.append("         <value xml:lang=\"ja\">").append(map.get("JA")).append("</value>\n");
                xmlDetails.append("     </property>\n");
            }
            xmlDetails.append("</resource>\n");
            try {
            //            生成xml文件
            File file = new File("E:\\workspace\\svn\\scsk_pj\\SccmPlatform\\04Code\\crm\\trunk\\plugins\\crm\\config\\CrmUitLabels-" + sheetName + ".xml");
            if (!file.exists()) {
                file.createNewFile();
            }
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
            // 设置是否转义,默认使用转义字符
            writer.setEscapeText(false);
            writer.write(xmlDetails.toString());
            writer.close();
            System.out.println("CrmUitLabels-" + sheetName + ".xml成功");
            } catch (Exception e) {
                Debug.logError(e, "CrmUitLabels-" + sheetName + ".xml失败");
                System.out.println("CrmUitLabels-" + sheetName + ".xml失败");
            }
        }
        return list;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45220508/article/details/125054732
今日推荐