昆明java培训
达内昆明广州春城路

18487146383

热门课程

java培训:POI读取单元格信息及单元格公式

  • 时间:2016-09-22
  • 发布:昆明Java培训
  • 来源:达内新闻

昆明达内Java培训的老师发现,Java操作EXCEL的利器一般都是POI和JXL,现在大多数的excel都是07以上的版本,所以一般是用07的基础上使用POI。

一、读取单元格

单元格有样式和值,以及值得类型。

样式复制封装成一个函数:

public XSSFCellStyle cloneAllCellStyle(XSSFCell sourceCell, XSSFWorkbook targetWb){

//创建一个样式

XSSFCellStyle tempStyle = targetWb.createCellStyle(); //样式

//数值格式,创建字符及数字格式

DataFormat format= targetWb.createDataFormat();

//字体

XSSFFont font= targetWb.createFont();

try{

tempStyle.setDataFormat(format.getFormat( sourceCell.getCellStyle().getDataFormatString()));

}catch(NullPointerException e){

tempStyle.setDataFormat((short)0);

}

font.setColor(sourceCell.getCellStyle().getFont().getXSSFColor());

font.setBold(sourceCell.getCellStyle().getFont().getBold());

font.setBoldweight(sourceCell.getCellStyle().getFont().getBoldweight());

try{

font.setCharSet(sourceCell.getCellStyle().getFont().getCharSet());

}catch(POIXMLException e){

font.setCharSet(0);

}

//       font.setCharSet(sourceCell.getCellStyle().getFont().getCharSet());

font.setFamily(sourceCell.getCellStyle().getFont().getFamily());

font.setFontHeight(sourceCell.getCellStyle().getFont().getFontHeight());

font.setFontHeightInPoints(sourceCell.getCellStyle().getFont().getFontHeightInPoints());

font.setFontName(sourceCell.getCellStyle().getFont().getFontName());

font.setItalic(sourceCell.getCellStyle().getFont().getItalic());

font.setStrikeout(sourceCell.getCellStyle().getFont().getStrikeout());

//       font.setThemeColor(sourceCell.getCellStyle().getFont().getThemeColor());

font.setTypeOffset(sourceCell.getCellStyle().getFont().getTypeOffset());

font.setUnderline(sourceCell.getCellStyle().getFont().getUnderline());

tempStyle.setAlignment( sourceCell.getCellStyle().getAlignment());

tempStyle.setVerticalAlignment(sourceCell.getCellStyle().getVerticalAlignment());

tempStyle.setBorderBottom(sourceCell.getCellStyle().getBorderBottom());

tempStyle.setBorderLeft(sourceCell.getCellStyle().getBorderLeft());

tempStyle.setBorderRight(sourceCell.getCellStyle().getBorderRight());

tempStyle.setBorderTop(sourceCell.getCellStyle().getBorderTop());

tempStyle.setBottomBorderColor(sourceCell.getCellStyle().getBottomBorderXSSFColor());

tempStyle.setLeftBorderColor(sourceCell.getCellStyle().getLeftBorderXSSFColor());

tempStyle.setRightBorderColor(sourceCell.getCellStyle().getRightBorderXSSFColor());

tempStyle.setTopBorderColor(sourceCell.getCellStyle().getTopBorderXSSFColor());

tempStyle.setFillBackgroundColor(sourceCell.getCellStyle().getFillBackgroundColorColor());

tempStyle.setFont(font);

try{

tempStyle.setFillForegroundColor(sourceCell.getCellStyle().getFillForegroundColorColor());

}catch(NullPointerException e){

tempStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());

}

tempStyle.setFillPattern(sourceCell.getCellStyle().getFillPattern());

tempStyle.setRotation(sourceCell.getCellStyle().getRotation());

tempStyle.setHidden(sourceCell.getCellStyle().getHidden());

tempStyle.setWrapText(sourceCell.getCellStyle().getWrapText());

tempStyle.setIndention(sourceCell.getCellStyle().getIndention());

tempStyle.setLocked(sourceCell.getCellStyle().getLocked());

return tempStyle;

}

调用直接获取单元格的样式内容。

获取单元格值的类型:cell.getCellType()

根据值类型不同获取不同的值:

switch (cell.getCellType()) {

case Cell.CELL_TYPE_BLANK:

tempValue.add("");

break;

case Cell.CELL_TYPE_BOOLEAN:

tempValue.add(cell.getBooleanCellValue());

break;

case Cell.CELL_TYPE_ERROR:

tempValue.add(cell.getErrorCellString());

break;

case Cell.CELL_TYPE_FORMULA:

tempValue.add(cell.getCellFormula());

map.put("formulaFlag", true);

break;

case Cell.CELL_TYPE_NUMERIC:

tempValue.add(cell.getNumericCellValue());

break;

case Cell.CELL_TYPE_STRING:

tempValue.add(cell.getStringCellValue());

break;

default:

break;

}

创建内容

//工作空间

XSSFWorkbook targetWb = new XSSFWorkbook();       

//sheet

XSSFSheet targetSheet = targetWb.createSheet("行汇总");

//      删除sheet

targetWb.removeSheetAt(index); //index表示第几个sheet,从0开始计数

//row

XSSFRow row=targetSheet.createRow(i+num1-startRow+1);

//cell

XSSFCell cell=row.createCell(j);   //j行

二、操作单元格函数

POI能够读取函数,然后再把函数写入到单元格中,excel自己计算函数。而函数操作单元格的位置,一般是固定的,所以操作的单元格无法改变。

1、读取函数和写入函数

cell.getCellFormula()

上面的代码中,获取函数的内容,类型为string。

写入函数:

cell.setCellFormula((String)cellValues.get(j));

2、获取函数计算之后的值:

有的地方直接写:

cell.getNumberValue();这样有时候会报错,当cell的内容不是值得时候。

最后做一个异常抛出。

当然有时候也读不出值,读出的值是0.0(double)

读取函数值得另一种方法:

XSSFFormulaEvaluator evaluator=new XSSFFormulaEvaluator(targetWb);

CellValue tempCellValue = evaluator.evaluate(cell);

double cellValue1 =

tempCellValue.getNumberValue();

如何你是获取excel的值之后,再写入另一个单元格,建议写入值之前,先改变单元的值类型,变成数值型:

cell.set(XSSFCell.CELL_TYPE_NUMERIC);

昆明达内Java课程是达内教育品牌课程,学Java开发就到昆明达内Java培训班!了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

上一篇:Java中的Bigdecimal类型运算
下一篇:Java类对象和构造方法

昆明达内Java培训带你了解机器学习

中美it行业数据大pk

昆明达内java培训的面试问题你都掌握了吗

机器学习领域需要掌握什么

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货