java中POI的简单使用

关于POI的简单使用


关于Excel

由于Excel版本不同,所要解析的格式也不相同,Excel基本分为两种格式.xls(2003版)和.xlsx(2007版)

POI操作Excel的常用方法(得到Excel常用对象)
POIFSFileSystem ps=newPOIFSFileSystem(new FileInputStream(“G:/gd.xls”));

//得到Excel工作簿对象
HSSFWorkbook wb = new HSSFWorkbook(ps);

//得到Excel工作表对象
HSSFSheet sheet = wb.getSheetAt(0);

//得到Excel工作表的行
HSSFRow row = sheet.getRow(i);

//得到Excel工作表指定行的单元格
HSSFCell cell = row.getCell(j);

//取得有效的行数
sheet.getLastRowNum();

//取得一行的有效单元格个数
row.getLastCellNum();

POI所需要的jar包(这里使用的是3.8版本)

<!-- 解析.xls格式 -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>3.8</version>
</dependency>

<!-- 解析.xlsx格式 -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>3.8</version>
</dependency>

操作

HSSFWorkbook对象用于解析.xls格式
XSSFWorkbook对象用于解析.xlsx格式

简单操作中使用的是 Workbook 至于为什么使用Workbook 下面有解释

		String filepath = "G:gd.xls";
		InputStream is = new FileInputStream(filepath);
		//2003版本
		//Workbook workbook = new HSSFWorkbook(is);
		//2007版本
		//Workbook workbook = new XSSFWorkbook(is);
		//推荐使用poi-ooxml中的WorkbookFactory.create(is)来创建Workbook,
		// 因为HSSFWorkbook和XSSFWorkbook都实现了Workbook接口
		Workbook workbook = WorkbookFactory.create(is);
		//得到Excel工作表对象
		Sheet sheet = workbook.getSheetAt(0);
		//获取有效的行数
		int number = sheet.getLastRowNum()
		//遍历
		for (int i = 0; i <= number; i++) {
		    //得到Excel工作表的行
		    Row row = sheet.getRow(i);
		    //获取有效列数
			int num = row.getLastCellNum();
			for (int j = 0; j < num; j++) {
			    //得到Excel工作表的列
			    
			    //方法一:
			    //先设置单元格的属性为string类型
			    //至于为什么这里这样写 是为了防止获取的数据以科学计数法的方式出现 
			    //正常来说应该要一个一个进行判断,判断单元格的属性,然后进行读取
			    //row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
			    //再读取
			    //String s= row.getCell(j).getStringCellValue();
			    //System.out.println(s);
			   
			   //方法二:
			    //获取单元格
			    Cell cell = row.getCell(j);
			    //调用下面的方法
			    String value = getCellStringValue(cell);
			    System.out.println(value);
			}
		}

根据单元格不同属性返回字符串数值

public String getCellStringValue(Cell cell) {
        String cellValue = "";      
        switch (cell.getCellType()) {      
        case Cell.CELL_TYPE_STRING: //字符串类型   
            cellValue = cell.getStringCellValue();      
            if(cellValue.trim().equals("")||cellValue.trim().length()<=0)      
                cellValue=" ";      
            break;      
        case Cell.CELL_TYPE_NUMERIC: //数值类型   
            cellValue = String.valueOf(cell.getNumericCellValue());      
            break;      
        case Cell.CELL_TYPE_FORMULA: //公式   
            cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);      
            cellValue = String.valueOf(cell.getNumericCellValue());      
            break;      
        case Cell.CELL_TYPE_BLANK:  //空单元格    
            cellValue=" ";      
            break;      
        case Cell.CELL_TYPE_BOOLEAN: //布尔    
            break;      
        case Cell.CELL_TYPE_ERROR:  //错误单元格
            break;      
        default:      
            break;      
        }      
        return cellValue;   
}  

为什么在上述案例中使用了 Workbook Sheet Row Cell
在这里插入图片描述
在这里插入图片描述
关于读取数字的问题

例如520, POI 读取变成 520.0 或者 520.3 POI 读取变成520.299999999999997

解决办法

double num= row.getCell(0).getNumericCellValue();
DecimalFormat df = new DecimalFormat("#.##");
String value = df.format(num);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值