通过Poi解析Excel文档

这是昨天在做文本处理时候遇到的问题。接着上一篇的爬虫神器,我把数据搞下来以后,发现了如下的状况:POJ1

同样的数据,每条数据的内容都是url+标题+正文,一共2w条左右。三种数据格式都是神器爬取完导出的,html格式的 11MB左右,txt格式 380MB左右 ,xlsx 23MB左右。

用Java写的代码,html格式的话打算用正则or Jsoup处理。txt的话,格式太乱,而且文件太大,不考虑。所以最后选择了xlsx,文件格式干净。

POJ2

但解析Excel文件,我并木有做过。百度了一下 关键字 Java读取Excel文件,发现了Apache基金会有个开源项目——Poi,专门用来处理Office家的文件的,看了下文档,用法挺简单的,上代码:

/**
 * 
   * @Name: readXml
   * @Description: @param filePath 文件路径
   * @Description: @param rownumber 行号 第一行是0
   * @Description: @param cellnumber 列 第一列是0
   * @Description: @return 返回读取的内容
   * @Parameters: ReadFile
 */
    public String readXml(String filePath ,
                          Integer rownumber,Integer cellnumber){
    	String content = null;
    	boolean isE2007 = false;    //判断是否是excel2007格式 
        if(filePath.endsWith("xlsx"))
            isE2007 = true;
        try {
            InputStream input = new FileInputStream(filePath);//建立输入流  
            Workbook wb  = null;  
            //根据文件格式(2003或者2007)来初始化工作簿
            if(isE2007){  
                wb = new XSSFWorkbook(input);
            }
            else{  
                wb = new HSSFWorkbook(input);
            }
            Sheet sheet = wb.getSheetAt(0);     //获得第一个表单  
            Row row = sheet.getRow(rownumber);  //获得行  
            //System.out.println("Row #" + row.getRowNum());  //获得行号  
            Cell cell = row.getCell(cellnumber); //获取列
            //System.out.println("Cell #" + cell.getColumnIndex());
            switch (cell.getCellType()) {   //根据cell中的类型来输出数据  
            case HSSFCell.CELL_TYPE_NUMERIC:
            	content = Double.toString(cell.getNumericCellValue());
                //System.out.println(content);
                break;
            case HSSFCell.CELL_TYPE_STRING:
            	content = cell.getStringCellValue();
//                System.out.println(content);
//                System.out.println("#########");
                break;
            case HSSFCell.CELL_TYPE_BOOLEAN:
            	content = Boolean.toString(cell.getBooleanCellValue());
                //System.out.println(content);
                break;
            case HSSFCell.CELL_TYPE_FORMULA:
            	content = cell.getCellFormula().toString();
                //System.out.println(content);
                break;
            default:
                System.out.println("unsuported sell type");
            }
            
            wb.close();
            input.close();
            
        } catch (IOException ex) {
            ex.printStackTrace();  
        }
        return content;
    }

 

读取行和列的时候 也可以使用Iterator迭代器来迭代行和列,由于我的数据比较大,一次性读入的话,有点不切实际,所以我选择一行行的读入。可以根据自己的需求改变方法,反正IDE下.一下,方法全提示出来了~

包的话 我用的是这几个,官网直接下载(打码的和本程序无关)

POJ3

(完)

——By Snake

snake

作者: snake

我们需要为这个社会做一点贡献,失去了才懂得去珍惜。

《通过Poi解析Excel文档》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注