poi 读取excel 怎么样处理自动求和的函数 java poi读取excel数据怎么都是公式,怎么取值,谢...

poi\u8bfb\u53d6Excel\u600e\u4e48\u83b7\u5f97\u516c\u5f0f\u540e\u7684\u6570\u636e

1 package hrds.zpf.poi;
2
3 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
4 import org.apache.poi.hssf.usermodel.HSSFSheet;
5 import org.apache.poi.hssf.usermodel.HSSFRow;
6 import org.apache.poi.hssf.usermodel.HSSFCell;
7
8 import java.io.*;
9
10 public class FormulaToString {
11
12 /**
13 * @param args
14 */
15 public void fileInput() throws IOException {
16
17 HSSFWorkbook hw = new HSSFWorkbook(new FileInputStream(
18 "d:/My Documents/Desktop/poi.xls"));
19 HSSFSheet hsheet = hw.getSheet("poi test");
20 HSSFRow hrow = hsheet.getRow(0);
21 HSSFCell hcell = hrow.getCell(0);
22 String cellValue = this.getCellValue(hcell);
23 System.out.println(cellValue);
24
25 }
26
27 public String getCellValue(HSSFCell cell) {
28 String value = null;
29 if (cell != null) {
30 switch (cell.getCellType()) {
31 case HSSFCell.CELL_TYPE_FORMULA:
32 // cell.getCellFormula();
33 try {
34 value = String.valueOf(cell.getNumericCellValue());
35 } catch (IllegalStateException e) {
36 value = String.valueOf(cell.getRichStringCellValue());
37 }
38 break;
39 case HSSFCell.CELL_TYPE_NUMERIC:
40 value = String.valueOf(cell.getNumericCellValue());
41 break;
42 case HSSFCell.CELL_TYPE_STRING:
43 value = String.valueOf(cell.getRichStringCellValue());
44 break;
45 }
46 }
47
48 return value;
49 }
50
51 public static void main(String[] args) {
52 try {
53 // TODO Auto-generated method stub
54 FormulaToString fts = new FormulaToString();
55 fts.fileInput();
56 } catch (IOException e) {
57 e.printStackTrace();
58 }
59 }
60
61 }

\u53c2\u8003\u4ee3\u7801
public void getValueOfFormulaCell() throws IOException
{
FileInputStream xlsfile = new FileInputStream(new File("D:\\Desktop\\Temp\\marks.xls"));
HSSFWorkbook objWorkbook = new HSSFWorkbook(xlsfile);
Sheet sheet = objWorkbook.getSheetAt(0);
FormulaEvaluator evaluator = objWorkbook.getCreationHelper().createFormulaEvaluator();

// suppose your formula is in B4
CellReference cellReference = new CellReference("B4");
Row row = sheet.getRow(cellReference.getRow());
Cell cell = row.getCell(cellReference.getCol());

CellValue cellValue = evaluator.evaluate(cell);

switch (cellValue.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cellValue.getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cellValue.getNumberValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cellValue.getStringValue());
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
break;

// CELL_TYPE_FORMULA will never happen
case Cell.CELL_TYPE_FORMULA:
break;
}
}

如果单元格所存的内容为函数,则通过poi得到的cell type为Cell.CELL_TYPE_FORMULA;解析时的函数:
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cellValue.getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cellValue.getNumberValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cellValue.getStringValue());
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
break;

case Cell.CELL_TYPE_FORMULA:
CellValue cellValue = evaluator.evaluate(cell);
switch (cellValue.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cellValue.getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cellValue.getNumberValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cellValue.getStringValue());
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
break;

// CELL_TYPE_FORMULA will never happen
case Cell.CELL_TYPE_FORMULA:
break;
}

}
就是说要进行多一层的判断,poi会通过其内部实现的函数去解析excel的函数;所以这里可以解析excel函数,而如果是你自己用VB定义的函数,就需要另外处理了。

先复制相应的单元格或者工作表
粘贴的时候选择仅数值,不复制公式
就全部变为数值型数据了

=D20+L20

完整的如下:
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(excelFileName));
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
CellValue cellValue = evaluator.evaluate(cell);//cell是单元格。。
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_BOOLEAN:
value=cellValue.getBooleanValue();
System.out.println(cellValue.getBooleanValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value=cellValue.getNumberValue();
System.out.println(cellValue.getNumberValue());
break;
case HSSFCell.CELL_TYPE_STRING:
value=cellValue.getStringValue();
System.out.println(cellValue.getStringValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;

case HSSFCell.CELL_TYPE_FORMULA:
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_BOOLEAN:
value=cellValue.getBooleanValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value=cellValue.getNumberValue();
break;
case HSSFCell.CELL_TYPE_STRING:
value=cellValue.getStringValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;

// CELL_TYPE_FORMULA will never happen
case HSSFCell.CELL_TYPE_FORMULA:
break;
}
}

扩展阅读:笔记本pageup键怎么按出来 ... java 读取excel ... poi读取excel的两种方式 ... peking 是辱称吗 ... 为什么做 做什么 怎么做 ... pagedown键盘图片 ... 如何关闭4g+只用4g ... poi读取excel内存溢出 ... poi读取excel中清空的数据 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网