java poi 写入excel_java的poi技术读取和写入excel

本文介绍了使用Java的POI库读取和写入Excel文件的方法,包括处理不同类型的单元格数据,如字符串、数字、日期和公式。还提供了处理Excel空值和错误值的示例代码。
摘要由CSDN通过智能技术生成

1、poi帮助文档:

API:http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html

poi包:http://pan.baidu.com/s/1hmIQU

2、小知识点

1.sheet, 以0开始,以workbook.getNumberOfSheets()-1结束

2.row, 以0开始(getFirstRowNum),以getLastRowNum结束

3.cell, 以0开始(getFirstCellNum),以getLastCellNum结束

3、例子:

excel内容的值如果不是string,则用getNumericCellValue(),得到double类型,再做相应转换,如果为string,则用getStringCellValue()

double转换为int:int i_yhfw= (int) Double.parseDouble(Demo.getExcel(index, 13));

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;

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.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

/**

* 获取excel文件

* index为sheet页,从0开始

* rowNum为行数,从0开始

* 从来colNumNum为列数,从0开始

* 只能读取excel2003(2003的后缀名是.xls)

*/

public static String getExcel(int index,int rowNum,int colNum){

//String Divpath="C:/Users/gmsd11/workspace";//文件保存的路径

//File dirFile=new File(Divpath);//创建文件对象

//if(!dirFile.exists()){//如果文件路径不存在,自动创建目录

//dirFile.mkdir();

//}

//System.out.println(dirFile.getAbsolutePath());

String path="C:/Users/gmsd11/workspace/testdate1.xls";//文件路径

File file=new File(path);//创建文件对象

System.out.println(file.getAbsolutePath());

String cellValue=null;//保存读取出的列值

int rowN=rowNum-1;//将excel的行数-1

Row row=null;//行对象(接口)

Cell cell=null;//列对象(接口)

HSSFCell hssfcell=null;//该类实现了以上Cell接口

try {

FileInputStream in=new FileInputStream(file);//通过打开一个到实际文件的连接来创建一个FileInputStream对象,该文件通过文件系统的File对象file制指定(创建文件流)

HSSFWorkbook wb=new HSSFWorkbook(in);//创建一个Excel对象

HSSFSheet sheet=wb.getSheetAt(index);//创建一个Excel的sheet,sheet页,index从0开始(创建表格)

//从哪行读取

//int firstRowNum=sheet.getFirstRowNum()+1;

//int loatRowNum=sheet.getLastRowNum();

row=sheet.getRow(rowN);//取得行

hssfcell=(HSSFCell)row.getCell(colNum);//取得行的第3列(获得单元格),从0开始

if(hssfcell!=null){

//((Object) hf).setEncoding(HSSFCell.ENCODING_UTF_16);

//判断excel内容的数值类型

switch (hssfcell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING://字符串

cellValue=hssfcell.getStringCellValue().trim();

break;

case HSSFCell.CELL_TYPE_NUMERIC://数值型

if(HSSFDateUtil.isCellDateFormatted(cell)){

//如果是date类型则,获取该hssfcell的date值

Date date=hssfcell.getDateCellValue();

if(date!=null){

cellValue=new SimpleDateFormat("yyyy-MM-dd").format(date);//创建一个日期格式并以格式处理日期

}else{

cellValue="";

}

}else {//纯数字

cellValue=new DecimalFormat("###.###").format(hssfcell.getNumericCellValue());//格式化十进制数字

//cellValue = String.valueOf(cell.getNumericCellValue());

}

break;

case HSSFCell.CELL_TYPE_FORMULA://公式类型

//导入时如果为公式生成的数据则无值

if(!hssfcell.getStringCellValue().endsWith("")){

cellValue=hssfcell.getStringCellValue();

}else{

cellValue=hssfcell.getNumericCellValue()+"";

}

// //读公式计算值

// value = String.valueOf(cell.getNumericCellValue());

// if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串

// value = cell.getStringCellValue().toString();

// }

// break;

break;

case HSSFCell.CELL_TYPE_BLANK://空值

cellValue="";

System.out.println("excel出现空值");

break;

case HSSFCell.CELL_TYPE_ERROR://故障

cellValue="";

System.out.println("excel出现故障");

break;

case HSSFCell.CELL_TYPE_BOOLEAN://布尔类型

cellValue=(hssfcell.getBooleanCellValue()==true ? "Y" : "N" );

break;

default:

cellValue="";

break;

}

}else{

cellValue="";

}

in.close();//关闭流

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

return cellValue;

}

4、excel类型问题,获得数据(网站转载)

//解决excel类型问题,获得数值

public String getValue(Cell cell) {

String value = "";

if(null==cell){

return value;

}

switch (cell.getCellType()) {

//数值型

case Cell.CELL_TYPE_NUMERIC:

if (HSSFDateUtil.isCellDateFormatted(cell)) {

//如果是date类型则 ,获取该cell的date值

Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

value = format.format(date);;

}else {// 纯数字

BigDecimal big=new BigDecimal(cell.getNumericCellValue());

value = big.toString();

//解决1234.0 去掉后面的.0

if(null!=value&&!"".equals(value.trim())){

String[] item = value.split("[.]");

if(1

value=item[0];

}

}

}

break;

//字符串类型

case Cell.CELL_TYPE_STRING:

value = cell.getStringCellValue().toString();

break;

// 公式类型

case Cell.CELL_TYPE_FORMULA:

//读公式计算值

value = String.valueOf(cell.getNumericCellValue());

if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串

value = cell.getStringCellValue().toString();

}

break;

// 布尔类型

case Cell.CELL_TYPE_BOOLEAN:

value = " "+ cell.getBooleanCellValue();

break;

// 空值

case Cell.CELL_TYPE_BLANK:

value = "";

LogUtil.getLogger().error("excel出现空值");

break;

// 故障

case Cell.CELL_TYPE_ERROR:

value = "";

LogUtil.getLogger().error("excel出现故障");

break;

default:

value = cell.getStringCellValue().toString();

}

if("null".endsWith(value.trim())){

value="";

}

return value;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值