在业务系统中多少回接触到Excel解析。在java开发平台下选择 Apache POI是一个非常明智的选择,POI提供非常完善API来读取或写入Microsoft Office Excel。

目前对导入的数据都会进行二次加工,我们开发模式就是先把Excel中的内容直接原样导入数据库对应的一张数据表中,然后再进行二次加工。什么是原样,那就是我们在excle看到是什么样的,导入的数据就是什么样的,那怎样实现呢?

首先考虑到,exce另存为csv,然后在解析csv就可以,excel另存为csv后,如下

似乎这样就可以了,但用户上传的Excel文件通过后台转换csv文件也麻烦(PS:其实我都不知道怎么转,有知道的朋友还希望能分享下),说好不是用POI的么,那么接下来我们了解下POI中处理Excel的一些信息

从上图得知,POI类中带HSSF的是处理03格式的,XSSF是处理07以上格式的,废话不多说了,先看看原样输出的一个重要角色 DataFormatter,

查阅官方文档,红框的地方清楚说明了,就是现实Excel中的现实的文本

这里对于公式类型的还需要判断下,

     DataFormatter df = new DataFormatter();
if (cell.getCellType() == cell.CELL_TYPE_FORMULA) {
FormulaEvaluator formulaEval = wb.getCreationHelper().createFormulaEvaluator();
value = df.formatCellValue(cell, formulaEval);
} else {
value = df.formatCellValue(cell);
}

所以就这么一句代码,就取得的单元格中显示的值,算是大工搞成。ps:解析Excle的完整代码

 private ArrayList<String[]> GetExcel(String filename)
throws FileNotFoundException, IOException, Exception {
File f = new File(filename);
ArrayList data = new ArrayList();
if (f.exists()) {
InputStream fis = new FileInputStream(f);
Workbook wb = WorkbookFactory.create(fis);
Sheet fst = wb.getSheetAt(0);
int rowcount = fst.getLastRowNum();
Row headrow = fst.getRow(0);
int colcount = headrow.getLastCellNum();
for (int ri = 0; ri <= rowcount; ri++) {
System.out.println("");
System.out.println("第" + ri + "行数据");
String[] colValues = new String[colcount];
Row row = fst.getRow(ri);
for (int i = 0; i < colcount; i++) {
Cell cell = row.getCell(i);
String value = "";
if (cell != null) {
DataFormatter df = new DataFormatter();
if (cell.getCellType() == cell.CELL_TYPE_FORMULA) {
FormulaEvaluator formulaEval = wb.getCreationHelper().createFormulaEvaluator();
value = df.formatCellValue(cell, formulaEval);
} else {
value = df.formatCellValue(cell);
}
}
colValues[i] = value;
System.out.print(colValues[i] + "--");
}
data.add(colValues);
}
}
f.delete();
return data;
}

2015-12-04

最新文章

  1. nginx+webpy配置
  2. 数据库设计==&gt;&gt;MySchool
  3. mysql-5.7.14-winx64免安装版在win10下的详细配置过程
  4. Mysql_以案例为基准之查询
  5. java 面向对象编程--第17章 I/O系统
  6. http://182.92.241.20/mypro/login 偶的点金项目细化分包管理平台即将上线!!
  7. 清橙A1363. 水位 - 清华大学2012年信息学优秀高中学子夏令营
  8. Mongodb DB shell数据操作
  9. IO流中的文件创建并且写入读取
  10. Stack的三种含义(数据超过栈的大小,就发生stack overflow)
  11. 网络安全实验室 脚本关通关writeup
  12. myeclipse的快捷键
  13. windows 线程
  14. SQL server 导出平面文件时出错: The code page on Destination - 3_txt.Inputs[Flat File Destination Input].Columns[UserId] is 936 and is required to be 1252.
  15. Redis主从哨兵和集群搭建
  16. 详解centos6和centos7防火墙的关闭
  17. python3 获取Linux系统信息
  18. Maven deploy Return code is: 400
  19. 第二次去苹果店维修MacBook
  20. 16:django 有条件的视图处理(Last-Modified和ETag)&amp;&amp;加密签名

热门文章

  1. Struts2之提交对象数组至后台
  2. 在 Mac OS 上创建并运行 ASP.NET Core 1.0 网站
  3. 经验总结之Android framework开发
  4. testlink简单部署
  5. poj3368(RMQ——ST)
  6. XCode一直显示&quot;scanning for working copies&quot;的解决办法
  7. [UE4]CustomAnimationBlueprintNode 自定义动画蓝图节点
  8. iOS下控件坐标的转换方法
  9. Export GridView Data to Excel. 从GridView导出数据到Excel的奇怪问题解析
  10. 简单易懂的Activity四种启动模式