来自:http://blog.csdn.net/cuihaiyang/article/details/7193027
private static String getStringCellValue(Cell cell) {// 获取单元格数据内容为字符串类型的数据
String strCell = "";
if (cell == null) {
return "";
}
switch (cell.getCellType()) {
case Cell.CELL_TYPE_FORMULA:
// cell.getCellFormula();
try {
/*
* 此处判断使用公式生成的字符串有问题,因为HSSFDateUtil.isCellDateFormatted(cell)判断过程中cell
* .getNumericCellValue();方法会抛出java.lang.NumberFormatException异常
*/
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
strCell = (date.getYear() + 1900) + "-" + (date.getMonth() + 1) +"-" + date.getDate();
break;
} else {
strCell = String.valueOf(cell.getNumericCellValue());
}
} catch (IllegalStateException e) {
strCell = String.valueOf(cell.getRichStringCellValue());
}
break;
case Cell.CELL_TYPE_STRING:
strCell = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
strCell = getDateCellValue(cell);
break;
} else {
strCell = String.valueOf(cell.getNumericCellValue());
break;
}
case Cell.CELL_TYPE_BOOLEAN:
strCell = String.valueOf(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_BLANK:
strCell = "";
break;
default:
strCell = "";
break;
}
return strCell;
}
这个方法在导入没有公式的Excel时没有问题,今天遇到含有公式的Excel,如图:
报错信息如下:
经调试发现HSSFDateUtil.isCellDateFormatted(cell)判断过程中会执行cell.getNumericCellValue();方法,字符串“201201FSSH300466”在转换成数字的时候出错了,在网上搜了一下,大多数的解决方法是:
[java] view plaincopy
case HSSFCell.CELL_TYPE_FORMULA:
try {
value = String.valueOf(cell.getNumericCellValue());
} catch (IllegalStateException e) {
value = String.valueOf(cell.getRichStringCellValue());
}
break;
经测试发现,在执行cell.getNumericCellValue()方法时还是抛出NumberFormatException异常,于是将try/catch中的方法互换:
[java] view plaincopy
case HSSFCell.CELL_TYPE_FORMULA:
try {
strCell = String.valueOf(cell.getStringCellValue());
} catch (IllegalStateException e) {
strCell = String.valueOf(cell.getNumericCellValue());
}
break;
这样对于字符串cell.getStringCellValue()方法即可取得其值,如果公式生成的是数值,使用cell.getStringCellValue()方法会抛出IllegalStateException异常,在异常处理中使用cell.getNumericCellValue();即可。
分享到:
相关推荐
// 创建带有公式的单元格 Cell cell = row.createCell(0, CellType.FORMULA); cell.setCellFormula("SUM(A1:A5)"); // 合并单元格 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 1)); // 保存到文件 try ...
### POI Excel 模板读取并导出带公式的Excel文档 #### 一、概述 在实际工作中,经常需要批量处理数据,并将其导出到Excel文件中,特别是在需要复杂计算的情况下,例如工资单、统计数据汇总等场景。利用Apache POI...
XSSFSheet sheet = workbook.createSheet("带有图片的Sheet"); ``` 4. **读取图片数据**:图片需要以字节数组的形式存在。你可以从文件系统中读取图片,然后将其转换为字节数组。 ```java byte[] imageBytes =...
Java 使用 Apache POI 读取 Excel 是一个常见的任务,在处理数据导入、导出或数据分析时非常有用。Apache POI 是一个流行的开源库,它允许 Java 开发者创建、修改和显示 Microsoft Office 格式的文件,其中包括 ...
Apache POI提供了丰富的API,可以实现对Excel文件的复杂操作,如合并单元格、设置样式、处理公式等。在Android开发中,这些功能同样适用,但需要注意资源管理,因为Android设备的内存有限。 总的来说,Apache POI是...
4. **处理带有公式的Excel字段**:20170915的更新解决了不能导入含有公式字段的Excel问题。这意味着工具类现在可以正确解析包含计算结果的单元格,无论这些结果是公式计算得出还是手动输入的。 使用Java POI库,...
6. **数据公式处理**:POI支持读写Excel公式,包括计算公式的结果。 7. **流式读写**:通过SXSSF API,POI提供了对.xlsx文件的流式处理,这在处理大量数据时非常有用,因为它只保留最近使用的行在内存中。 8. **...
1. 模板设计:在Excel中创建模板,设置好需要动态填充的数据区域,如单元格样式、公式、条件格式等。 2. 保存模板:将模板文件保存为.xlsx格式,以便于POI读取。 三、使用POI读取模板并填充数据 1. 加载模板:使用...
在描述中提到的博文链接虽然没有具体内容,但通常会详细阐述如何使用POI来逐级解析Excel数据,这对于处理复杂结构的数据,如带有嵌套表或多个工作表的大型Excel文件特别有用。 在处理Excel文件时,POI提供了一套...
6. **处理日期和公式**:POI提供了特殊的方法来处理日期单元格和公式单元格,如使用DataFormat类创建日期格式,以及使用FormulaEvaluator来计算公式的值。 7. **高级功能**:可能还包括合并单元格、使用图表、处理...
此外,对于读取带有中文的Excel文件,同样需要注意字符编码。在打开工作簿时,可以使用以下方式: ```java InputStream is = new FileInputStream("input.xlsx"); Workbook workbook = WorkbookFactory.create(is, ...
- `public static Cell createCell(Row row, int cellIndex, String value)`: 创建带有值的单元格 - `public static void applyStyle(Cell cell, CellStyle style)`: 应用样式 - `public static void ...
例如,如果你需要读取带有公式的单元格,可以使用`cell.getCachedFormulaResultType()`来获取计算结果的类型,并相应地处理结果。 总之,Apache POI为Java开发者提供了一个强大且灵活的工具,可以方便地操作Excel...
描述中的"JAVA 读取EXECL 2007 的POI文件,附带一个操作示例"表明这个压缩包包含了一个使用Apache POI读取Excel 2007 (XLSX)文件的Java代码示例。通过此示例,开发者可以学习如何在自己的项目中实现类似的文件操作...
通过HSSFFormulaEvaluator,可以对带有公式的单元格进行求值。HSSFDataValidation则可以帮助实现数据验证规则,确保输入数据符合预设条件。 需要注意的是,由于Excel文件的复杂性,处理大文件可能会消耗大量内存。...
用户可以学会如何添加POI支持、创建新工作簿、创建新的sheet页、操作单元格、处理不同格式的内容、遍历列和单元格、提取单元格内容、处理单元格边框和填充色、合并单元格、自定义字体和颜色、读取和重写工作簿、在...
你可以创建新的工作簿,添加工作表,插入单元格,设置公式,格式化样式,以及读取和修改现有Excel文件。 2. **Word处理**:使用HWPF和XWPF API,开发者可以创建、修改和解析Word文档。这包括添加段落,设置字体和...
总之,Java POI库为开发者提供了强大而灵活的工具,使得在Java程序中处理Excel文件变得简单易行,无论是一份包含单Sheet的简单报表,还是带有复杂结构和逻辑的多Sheet文件,都能轻松应对。通过深入学习和实践,你...
例如,创建一个带有标题的Excel报表: ```java import org.apache.poi.hssf.usermodel.*; public class ExcelExporter { public void exportExcel() { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet ...
blic class ExcelSample2 { public static void main(String[] args) throws IOException { // 创建一个带有数据的Excel文件 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("新表单"); /...