各位朋友:
我有一些关于读取Excle的问题想问一下:
我想弄一个代码是,将Excle中的内容以xml格式的方法读出来,下面是我的一段代码,是读取Excle内容的。import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;/**  
* 操作Excel表格的功能类  
* @author:hnylj  
* @version 1.0  
*/  
public class ExcelReader {   
    private POIFSFileSystem fs;   
    private HSSFWorkbook wb;   
    private static HSSFSheet sheet;   
    private HSSFRow row;   
    /**  
     * 读取Excel表格表头的内容  
     * @param InputStream  
     * @return String 表头内容的数组  
     *   
     */  
    public String[] readExcelTitle(InputStream is) {   
        try {   
            fs = new POIFSFileSystem(is);   
            wb = new HSSFWorkbook(fs);   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
        sheet = wb.getSheetAt(0);   
        row = sheet.getRow(0);   
        //标题总列数   
        int colNum = row.getPhysicalNumberOfCells();   
        String[] title = new String[colNum];   
        for (int i=0; i<colNum; i++) {   
            title[i] = getStringCellValue(row.getCell((short) i));   
        }   
        return title;   
    }   
       
    /**  
     * 读取Excel数据内容  
     * @param InputStream  
     * @return Map 包含单元格数据内容的Map对象  
     */  
    public Map<Integer,String> readExcelContent(InputStream is) {   
        Map<Integer,String> content = new HashMap<Integer,String>();   
        String str = "";   
        try {   
            fs = new POIFSFileSystem(is);   
            wb = new HSSFWorkbook(fs);   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
        sheet = wb.getSheetAt(0);   
        //得到总行数   
        int rowNum = sheet.getLastRowNum();   
        row = sheet.getRow(0);   
        int colNum = row.getPhysicalNumberOfCells();  
        //正文内容应该从第二行开始,第一行为表头的标题   
        for (int i = 1; i <= rowNum-1; i++) {   
            row = sheet.getRow(i);   
            int j = 0;   
            while (j < colNum) {   
        //每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据   
        //也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean   
                 str += getStringCellValue(row.getCell((short) j)).trim() + "-";               
                 j ++;   
            }   
            content.put(i, str);   
            str = "";   
        }   
        return content;   
    }   
       
    /**  
     * 获取单元格数据内容为字符串类型的数据  
     * @param cell Excel单元格  
     * @return String 单元格数据内容  
     */  
    private String getStringCellValue(HSSFCell cell) {   
        String strCell = "";   
        switch (cell.getCellType()) {   
        case HSSFCell.CELL_TYPE_STRING:   
            strCell = cell.getStringCellValue();   
            break;   
        case HSSFCell.CELL_TYPE_NUMERIC:   
            strCell = String.valueOf(cell.getNumericCellValue());   
            break;   
        case HSSFCell.CELL_TYPE_BOOLEAN:   
            strCell = String.valueOf(cell.getBooleanCellValue());   
            break;   
        case HSSFCell.CELL_TYPE_BLANK:   
            strCell = "";   
            break;   
        default:   
            strCell = "";   
            break;   
        }   
        if (strCell.equals("") || strCell == null) {   
            return "";   
        }   
        if (cell == null) {   
            return "";   
        }   
        return strCell;   
    }   
       
    /**  
     * 获取单元格数据内容为日期类型的数据  
     * @param cell Excel单元格  
     * @return String 单元格数据内容  
     */  
    private String getDateCellValue(HSSFCell cell) {   
        String result = "";   
        try {   
            int cellType = cell.getCellType();   
            if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {   
                Date date = cell.getDateCellValue();   
                result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)   
                 + "-" + date.getDate();   
            } else if (cellType == HSSFCell.CELL_TYPE_STRING) {   
                String date = getStringCellValue(cell);   
                result = date.replaceAll("[年月]", "-").replace("日", "").trim();  
             } else if (cellType == HSSFCell.CELL_TYPE_BLANK) {   
                result = "";   
            }   
        } catch (Exception e) {   
            System.out.println("日期格式不正确!");   
            e.printStackTrace();   
        }   
        return result;   
    }  
       
    public static void main(String[] args) {   
        try {   
            //对读取Excel表格标题测试   
            InputStream is = new FileInputStream("D:\\test.xls");   
            ExcelReader excelReader = new ExcelReader();   
            String[] title = excelReader.readExcelTitle(is);   
            System.out.println("获得Excel表格的标题:"); 
            for (String s : title) {   
                System.out.print(s + " ");                
            }   
               
            //对读取Excel表格内容测试   
            InputStream is2 = new FileInputStream("D:\\test.xls");   
            Map<Integer,String> map = excelReader.readExcelContent(is2); 
            System.out.println();         
            System.out.println("获得Excel表格的内容:");                        
            for (int i=1; i<=map.size(); i++) {                     
                System.out.println(map.get(i).replace("-", " "));   
            }   
        } catch (FileNotFoundException e) {   
            System.out.println("未找到指定路径的文件!");   
            e.printStackTrace();   
        }   
    }   
}  我的Excle的内容是:
中文           英文         属性 值
阿尔卑斯运动 ALPINE OROGENY S 造山运动
阿尔卑斯运动 ALPINE OROGENY C 燕山运动 印支运动
阿尔法粒子 ALPHA PARTICLE D α粒子运行后输出的内容是:
获得Excel表格的标题:
中文 英文 属性 值     
获得Excel表格的内容:
阿尔卑斯运动 ALPINE OROGENY S 造山运动     
阿尔卑斯运动 ALPINE OROGENY C 燕山运动 印支运动     
阿尔法粒子 ALPHA PARTICLE D α粒子   我想让运行后输出的内容是:
<haveDescriptors Chinese name="阿尔卑斯运动" English name="ALPINE OROGENY"/>
当读到第3列属性时,所要输出的内容是:
<haveInherits xsi:type="org.stkosproject:Inherit4" name="继承" sources="//@haveDescriptors.0" targets="//@haveDescriptors.2"/>
当读到第4列值时,所输出的内容是:
<haveDescriptors Chinese name="造山运动" English name="OROGENY"/>之后还有一个问题是:我上面的代码输出是系统输出,我想让输出是以文件的格式输出,后缀名就是.xml。
大家谁能帮帮忙,在这里谢谢了!!!

解决方案 »

  1.   

    你就是想把excel中读出的数据写入xml文件呗.1.你的数据都读出来了,放到集合里面。可以用List<Map<String,String>>这样存。
     比如:
      List 1: Map<"1","阿尔卑斯运动">
             Map<"2","ALPINE OROGENY">
             Map<"3","S">
             Map<"4","造山运动">
     List 2: Map<"1","阿尔卑斯运动">
             Map<"2","ALPINE OROGENY">
             Map<"3","C">
             Map<"4","燕山运动 印支运动">
    2.再利用处理xml的第三方jar(如:DOM4j),把读出来的内存数据循环写入文件就行了。可以上网查,一片一片的。
    PS:看了上面你写的代码。打开的流记得要关闭,循环内尽量别用字符串相加。
      

  2.   

    定义好XMl的格式,然后把读取到的Excel内容加进去就可以了。
    这里涉及到文件的读写,和XML的解析,lZ可看看这方面的例子再动手。