java poi 获取单元格值时间
完整帮助类:JAVA poi 帮助类
/*
* poi特殊日期格式:数字格式化成-yyyy年MM月dd日,格式
* */
private static ArrayList<String> PoiDateList = new ArrayList<String>() {
{
add("年");
add("月");
add("日");
}
}; /// <summary>
/// 获取XSSFRow的值(全部统一转成字符串)
/// </summary>
/// <param name="row"></param>
/// <param name="index"></param>
/// <returns></returns>
public static String GetValue(Row row, int index) {
Cell rowCell = row.getCell(index);
return rowCell == null ? "" : GetValueByCellStyle(rowCell, rowCell.getCellType());
} /// <summary>
/// 根据单元格的类型获取单元格的值
/// </summary>
/// <param name="rowCell"></param>
/// <param name="type"></param>
/// <returns></returns>
public static String GetValueByCellStyle(Cell rowCell, int rowCellType) {
String value = "";
switch (rowCellType) {
case Cell.CELL_TYPE_STRING:
value = rowCell.getStringCellValue();
break;
case Cell.CELL_TYPE_NUMERIC:
// 获取单元格值的格式化信息
String dataFormat = rowCell.getCellStyle().getDataFormatString();
// 判断格式化信息中是否存在:年月日
AtomicReference<Boolean> isDate = new AtomicReference<>(false);
if (!StringHelper.IsNullOrWhiteSpace(dataFormat))
PoiDateList.forEach(x -> isDate.set(isDate.get() || dataFormat.contains(x))); if (DateUtil.isCellDateFormatted(rowCell)) {
value = new SimpleDateFormat("yyyy-MM-dd").format(DateUtil.getJavaDate(rowCell.getNumericCellValue()));
} else if (DateUtil.isCellInternalDateFormatted(rowCell)) {
value = new SimpleDateFormat("yyyy-MM-dd").format(DateUtil.getJavaDate(rowCell.getNumericCellValue()));
}
//有些情况,时间搓?数字格式化显示为时间,不属于上面两种时间格式
else if (isDate.get()) {
value = new SimpleDateFormat("yyyy-MM-dd").format(rowCell.getDateCellValue());
}
//有些情况,时间搓?数字格式化显示为时间,不属于上面两种时间格式
else if (dataFormat == null) {
value = new SimpleDateFormat("yyyy-MM-dd").format(DateUtil.getJavaDate(rowCell.getNumericCellValue()));
} else {
if (StringHelper.IsNullOrWhiteSpace(dataFormat)) {
value = String.valueOf(rowCell.getNumericCellValue());
} else {
if (rowCell.getCellStyle().getDataFormatString().contains("$")) {
value = "$" + rowCell.getNumericCellValue();
} else if (rowCell.getCellStyle().getDataFormatString().contains("¥")) {
value = "¥" + rowCell.getNumericCellValue();
} else if (rowCell.getCellStyle().getDataFormatString().contains("¥")) {
value = "¥" + rowCell.getNumericCellValue();
} else if (rowCell.getCellStyle().getDataFormatString().contains("€")) {
value = "€" + String.valueOf(rowCell.getNumericCellValue());
} else {
value = String.valueOf(rowCell.getNumericCellValue());
}
}
}
break;
case Cell.CELL_TYPE_BOOLEAN:
value = String.valueOf(rowCell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_ERROR:
value = ErrorEval.getText(rowCell.getErrorCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
// TODO: 是否存在 嵌套 公式类型
value = GetValueByCellStyle(rowCell, rowCell.getCachedFormulaResultType());
break;
default:
System.out.println(rowCell);
break;
}
return value;
}
java poi 获取单元格值时间的更多相关文章
- java poi 合并单元格
java poi 合并单元格 2017年03月29日 16:39:01 翠烟你懊恼 阅读数:26561 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...
- POI获取单元格的宽和高
获取单元格的宽,即获取所在列的宽.先获取单元格所在的sheet:cell.getSheet() sheet.getColumnWidth( cell.getColumnIndex() ) 单位不是像 ...
- C#获取单元格值(使用NPOI插件)
/// <summary> /// 获取单元格的值 /// </summary> /// <param name="item"></par ...
- java poi 合并单元格后边框问题
在项目中用poi合并单元格,但发现边框会有不显示的问题. 在网上搜集了答案,来记录一下. 解决方法: 将每个没用到的单元格都设空值. 例如: HSSFCell cell = row.createCel ...
- java POI Excel 单元格样式
正如Html需要CSS一样,我们的POI生成的Excel同样需要样式才能更完美的表现我们的数据.下面还是从简单的例子出发,学习和了解POI的样式设计. 一.我的位置. 1 package com.my ...
- JAVA poi设置单元格背景颜色
import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.Ce ...
- POI读取单元格信息及单元格公式
Java操作EXCEL的利器一般都是POI和JXL,鄙人只是POI的忠实粉丝.(其实我是没有用过JXL). 现在大多数的excel都是07以上的版本,所以我一般是用07的基础上使用POI. 一.读取单 ...
- POI教程之第二讲:创建一个时间格式的单元格,处理不同内容格式的单元格,遍历工作簿的行和列并获取单元格内容,文本提取
第二讲 1.创建一个时间格式的单元格 Workbook wb=new HSSFWorkbook(); // 定义一个新的工作簿 Sheet sheet=wb.createSheet("第一个 ...
- poi 升级至4.x 的问题总结(POI Excel 单元格内容类型判断并取值)
POI Excel 单元格内容类型判断并取值 以前用 cell.getCachedFormulaResultType() 得到 type 升级到4后获取不到了 换为:cell.getCellType( ...
随机推荐
- 42. Trapping Rain Water (Array,stack; DP)
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- 什么场景应该用 MongoDB(转)
很多人比较关心 MongoDB 的适用场景,也有用户在话题里分享了自己的业务场景,比如: 案例1 用在应用服务器的日志记录,查找起来比文本灵活,导出也很方便.也是给应用练手,从外围系统开始使用Mong ...
- PHP下ajax跨子域的解决方案之document.domain+iframe
对于主域相同,子域不同,我们可以设置相同的document.domain来欺骗浏览器,达到跨子域的效果. 例如:我们有两个域名:www.a.com 和 img.a.com 在www.a.com下有 ...
- linux整合apache、php、mysql
1.打开apache配置文件,添加AddType.找到DirectoryIndex并添加index.php AddType application/x-httpd-php .php AddType a ...
- DB2 SQL1477N问题
ERROR [55019] [IBM][DB2/NT] SQL1477N For table "DB_YHJX.YHJX_FHDKFHZ" an object "521 ...
- Strand Specific mRNA sequencing 之重要性与分析
Strand Specific mRNA sequencing 之重要性与分析 发表评论 2,761 A+ 所属分类:Bioinformatics 收 藏 研究生物基因转录体的方法有许多种,而使 ...
- Spark cache、checkpoint机制笔记
Spark学习笔记总结 03. Spark cache和checkpoint机制 1. RDD cache缓存 当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出 ...
- 设计模式之java源码-工厂方法模式
工厂方法模式 8.1 女娲造人的故事 东汉<风俗通>记录了一则神话故事:“开天辟辟,未有人民,女娲搏,黄土作人……”,讲述的内容就是大家非常熟悉的女娲造人的故事.开天辟地之初,大地上并没有 ...
- 设置zookeeper为systemctl守护进程
==目的== 想把zookeeper.hadoop.hbase.storm等大数据组件 设置为开机启动,并且进程挂掉之后,可以自动重启,以减少运维压力. ==service文件== 路径:/usr/l ...
- JAVA对字符串的压缩与解压缩
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException; ...