Chinaunix首页 | 论坛 | 博客
  • 博客访问: 590986
  • 博文数量: 718
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 4960
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-17 13:24
文章分类

全部博文(718)

文章存档

2011年(1)

2008年(717)

我的朋友

分类:

2008-10-17 13:28:50

  项目中用户需要导入大量Excel表格数据到数据库,为此需求自己写了一个读取Excel数据的java类,现将代码贴出来与大家一起分享。
    该类提供两个方法,一个方法用于读取Excel表格的表头,另一个方法用于读取Excel表格的内容。

    (注:本类需要POI组件的支持,POI是apache组织下的一个开源组件,)

    代码如下:

    代码
    package org.hnylj.poi.util;

    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 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                title[i] = getStringCellValue(row.getCell((short) i));
            }
            return title;
        }

        /**
         * 读取Excel数据内容
         * @param InputStream
         * @return Map 包含单元格数据内容的Map对象
         */
        public Map readExcelContent(InputStream is) {
            Map content = new HashMap();
            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; i++) {
                row = sheet.getRow(i);
                int j = 0;
                while (j            //每个单元格的数据内容用"-"分割开,以后需要时用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;
        }

 

[1]     

【责编:landy】

--------------------next---------------------

阅读(360) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~