POI 读取 Excel 文件

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
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;

public class ReadExcel {
    private POIFSFileSystem pois ;
    private HSSFWorkbook  workBook;
    private HSSFSheet  sheet;
    private HSSFRow  row;
    private HSSFCell cell;
    List<String> RegionList = new ArrayList<String>();
    Map<String, String> unitMap = new HashMap<String, String>(); //存放集合 <region,unit>1:1
    Map<String, List<String>> deptMap = new HashMap<String, List<String>>(); //存放集合 <unit,dept>1:n
    /**
     * sheetName
     * @param os
     * @param sheetCount
     * @return
     * @throws Exception
     */
    public List readExcelSheetName(InputStream os,int sheetCount) throws Exception{
        pois =  new POIFSFileSystem(os);
        workBook = new HSSFWorkbook(pois);
        for(int i=0;i<sheetCount;i++){
            sheet = workBook.getSheetAt(i);
            String sheetName = sheet.getSheetName();
//            System.out.println("sheetName:"+sheetName);
            RegionList.add(sheetName);
            List plist = readCell(sheet,sheetName);
            File f = new File("F://person.txt");
            OutputStream osa = new FileOutputStream(f);
            System.out.println(plist.size() + " 总数");
            for(int j = 0 ;j<plist.size();j++){
                Person per = (Person) plist.get(j);
                StringBuffer sb = new StringBuffer();
                sb.append("region:"+per.getCity()+"           "+"unit:"+per.getUnit()+"            "+"dept:"+per.getDept()+"         "+"name:"+per.getName());
                sb.append("              "+"tel:"+per.getTel()+"            "+"phone:"+per.getPhone());
                sb.append("\r\n");
                osa.write(sb.toString().getBytes());
            }
            osa.close();
        }
        return RegionList;
    }    

    /**
     * 一个sheet上的相关信心
     * @param sheet
     * @return
     */
    public List readCell(HSSFSheet sheet,String sheetName){
        List Personlist = new ArrayList();
        String dept = "";
        String unit = "";
        int rowcount = 0;
        for (Iterator iterator = sheet.iterator(); iterator.hasNext();) {
            Person person = new Person();
            HSSFRow rows = (HSSFRow) iterator.next(); //获得每个sheet的行数
            if(rowcount == 0 ){ //有特殊的特殊处理,第一行标题
                cell = rows.getCell(1);
                String title = cell.getStringCellValue();
//                System.out.println("一标题:"+title.trim());
            }else if(rowcount ==1 ){ //第二行,单位名称
                cell = rows.getCell(0);
                String unitCell = cell.getStringCellValue();
                unit =  unitCell.replace("单位名称:", "");
                unitMap.put(sheetName, unit);//
            }else{
                for(int i = 0;i<rows.getPhysicalNumberOfCells();i++){  //获得每行的cell个数
                    cell = rows.getCell(i);
                    if(rowcount == 2){ //第三行标题栏
//                        switch (i){
//                        case 1 :
//                            String b1 = cell.getStringCellValue();
//                            System.out.println("三标题:"+b1);
//                            break;
//                        case 2 :
//                            String b2 = cell.getStringCellValue();
//                            System.out.println("三标题:"+b2);
//                            break;
//                        case 3:
//                            String b3 = cell.getStringCellValue();
//                            System.out.println("三标题:"+b3);
//                            break;
//                        case 4:
//                            String b4 = cell.getStringCellValue();
//                            System.out.println("三标题:"+b4);
//                            break;
//                        }
                    }else{
                        if(cell != null){
                            if(i == 0 && formateCell(cell) != null&& !"".equals(formateCell(cell).trim())){ //第一个单元格有合并的部分
                                System.out.println(cell.getCellType()+"+++++"+cell.getStringCellValue().trim());
                                dept = cell.getStringCellValue();
                                dept = dept.replaceAll("\n", "").replace(" ","");
                                List deplist = deptMap.get("unit");
                                if(deplist == null ){
                                    deplist = new ArrayList<String>();
                                    deplist.add(dept);
                                }
                                deptMap.put(unit, deplist);
                            }else{
                                switch (i){
                                case 1 :
                                    String b1 = cell.getStringCellValue();
                                    person.setName(b1);
                                    break;
                                case 2 :
                                    String b2 = cell.getStringCellValue();
                                    person.setPosition(b2);
                                    break;
                                case 3:
                                    //System.out.println("-------"+cell.getCellType());
                                    double b3 =cell.getNumericCellValue();    //默认的cell类型:0:double,1:string
                                    person.setTel(formatDouble(b3+""));
                                    break;
                                case 4:
                                    double b4 = cell.getNumericCellValue();
                                    person.setPhone(formatDouble(b4+""));
                                    break;
                                }
                            }
                        }
                    }
                }
                person.setCity(sheetName);
                person.setDept(dept);
                person.setUnit(unit);
                if(rowcount !=2 ){
                    Personlist.add(person);
                }
           }
            rowcount ++;
        }
        return Personlist;
    }

    /**
     * 格式化cell里面的内容
     * @param cell
     * @return
     */
    private String formateCell(HSSFCell cell){
        String strCell = "";
        switch (cell.getCellType()){
        case HSSFCell.CELL_TYPE_STRING:
            strCell = cell.getStringCellValue();
            break;
        case HSSFCell.CELL_TYPE_NUMERIC:
            strCell = formatDouble(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;
    }

    private  String formatDouble(String str) {
        if (str == null || "".equals(str.trim()))
            return "";
        if (str.indexOf(".") > 0) {
            if (str.indexOf("E") > 0) {
                str = str.substring(0, str.indexOf("E")).replace(".", "");
            } else {
                str = str.substring(0, str.indexOf("."));
            }
        }
        return str;
    }

}

所需jar

时间: 2024-10-06 04:51:29

POI 读取 Excel 文件的相关文章

使用Apache POI 读取Excel文件

生活中用到用到Excel文件的情况很多,什么商品进货单,产品维修单,餐厅的营业额等等.作为程序员,我们该如何读取Excel文件,获取我们想要的资源呢.本篇将讲解如何使用Apache POI读取Excel文件. 准备工作: 1)Apache POI 开发jar包 2)Excel资源文件,包括Excel2003,Excel2007这两种版本分别对应xls.xlsx文件. 本篇已经为您做好准备工作,请点击此处,下载资源文件,你也可以浏览Apace POI官网了解更多详细信息. 简要流程: 获取Work

使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10

使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10 [问题点数:40分,结帖人xieyongqiu] 不显示删除回复             显示所有回复             显示星级回复             显示得分回复             只显示楼主           收藏 关注 xieyongqiu maobingxixi 本版等级: 结帖率:71.43% 楼主发表于: 2010-09-13 17:33:03 使用POI 读取 Excel 

使用jxl,poi读取excel文件

作用:在java后台添加一个方法,读取导入的excel内容,根据需要返回相应的sql语句,以完成对临时表的插入操作. 使用jxl读取excel文件 package com.sixthf.bi.sapp.util; import java.io.IOException; import java.io.InputStream; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import org.a

使用poi读取excel文件 Cannot get a text value from a numeric cell

我这样转换得到一个excel文本域的值 Cell cell = row.getCell(c); cell.setCellType(Cell.CELL_TYPE_STRING); String parkName = cell.getStringCellValue(); 某些时候,读取 excel 文件会出现如下错误 java.lang.IllegalStateException: Cannot get a text value from a numeric cell at org.apache.p

java poi读取excel文件

poi-3.9-20121203.jar poi-ooxml-3.9-20121203.jar poi-ooxml-schemas-3.9-20121203.jar stax-api-1.0.1.jar xmlbeans-2.3.0.jar 上面几个jar包缺一不可,有时候会出现ClassNotFound之类的错误,是因为jar缺少或不兼容的原因,上面jar包已经过测试,可以使用. 读取excel文件代码如下: public class ExcelUtils {// 对外提供读取excel文件的

java利用poi读取Excel文件

java读取Excel文件,笔者认为:从结构上来看,Excel文件是由一个一个的单元格组成的,有点像细胞cell,逐行的排列.那么我们读的时候也应该逐行逐行的读,从左到右的寻找每一个cell.一.实例代码: 只是实现了一种方式,因为依照读取内容的不同,读取的后想要的操作不同,因此不能苟同全部,只是方法是相通的.说道Excel文件的结构,这货从数学的角度来说,绝对是一个二维数组,因此我就拿字符串二维数组接受读取后的内容,并每个单元格每个单元格的打印.当然也可以返回三维数组(包含该单元格的位置坐标)

POI 读取Excel文件,将Excel数据导入数据库

/** * 读取Excel单元格所显示的字符串(显示什么就返回什么) * 创建人:minlorry * 创建日期:2015-07-31 * 更新日期:2015-07-31 * 更新说明:生硬地处理了数值单元格的处理,日期单元格未作处理. * @param cell Excel单元格 * @return String 单元格显示的字符串 */ public static String getStringValue(Cell cell) { String stringValue = "";

poi读取Excel文件图片位置

下载最新的poi包poi-bin-3.12-20150511.zip,里面有读取xlsx图片的新方法! 上个星期开始鼓捣导入Excel,下载了最新的poi包,结果Excel文件里有图片.处理图片还真是个难事,网上搜索一开始发现了HSSFSheet类处理图片的例子,但不是xlsx文件能用的,其中对一个方HSSFSheet.getDrawingEscherAggregate()有印象. 转帖处:贴子1:http://www.cnblogs.com/shwen99/archive/2010/09/13

使用poi读取Excel文件数据

除分数被转换为小数存储外,其他数据经本人测试无问题,如发现问题请留言,方便及时更新 package com.haiyisoft.iecp.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.text.DateFormat;

java poi 读取excel文件随笔

需求:最近的项目需要将app的上传菜品功能移到pc端来实现,主要难点就是图片的批量导入,因为现在的框架是公司自己开发的,我实在不敢恭维,上传文件我用js传到服务器,在后台来读....  为什么传到服务器,因为现在浏览器的安全性提高之后,input file 获取不到真实的绝对地址.... jar:poi-3.12.jar    poi-ooxml-3.12.jar  poi-ooxml-schemas-3.8-20120326.jar  xmlbeans-2.3.0.jar 没用同版本的是因为之