在业务系统中多少回接触到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

poi 输出Excel显示内容的更多相关文章

  1. 使用POI读取excel文件内容

    1.前言 项目中要求读取excel文件内容,并将其转化为xml格式.常见读取excel文档一般使用POI和JExcelAPI这两个工具.这里我们介绍使用POI实现读取excel文档. 2.代码实例: ...

  2. poi导出excel

    Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...

  3. 使用poi读写excel文件

    使用poi库测试了一下读取excel文件,效果不错,跟大家分享一下. 第一列是数值型,第二列是字符型,代码如下: package poi; import java.io.FileInputStream ...

  4. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  5. poi读取Excel模板并修改模板内容与动态的增加行

    有时候我们可能遇到相当复杂的excel,比如表头的合并等操作,一种简单的方式就是直接代码合并(浪费时间),另一种就是写好模板,动态的向模板中增加行和修改指定单元格数据. 1.一个简单的根据模板shee ...

  6. php网址显示excel表格内容

    /** * excel表格内容在网页中显示 * * 首先需要下载PHPExcel 工具包 * 网址: http://phpexcel.codeplex.com/releases/view/119187 ...

  7. POI读取Excel内容格式化

    在用POI读取Excel内容时,经常会遇到数据格式化的问题. 比如:数字12365会变为12365.0;字符串数字123也会变为123.0,甚至会被变为科学计数法.另外日期格式化也是一个头疼的问题.其 ...

  8. 将CMD内的显示内容输出到txt文件

    将CMD内的显示内容输出到txt文件 xxxx -t >c:\test.txt        //xxxx为命令  如ping www.baidu.com //-t >c:\test.tx ...

  9. poi读取excel内容工具类

    该工具类可以读取excel2007,excel2003等格式的文件,xls.xlsx文件格式 package com.visolink; import org.apache.poi.hssf.user ...

随机推荐

  1. 移动App崩溃的测试用例设计

    我们的日常生活中对移动设备越来越多的使用意味着移动App测试这个主题已成为需要考虑的一个无法避免的问题.根据最近的调查研究,用户难以容忍有bug的移动App. 移动App Bug的影响是用户体验差.A ...

  2. 透明activity来实现悬浮蔗罩

    第一步, activity的代码, 关键代码是进出动画采用淡入淡出方式,让蔗罩出现消失更自然,全屏 public class RobotGuidceV2Activity extends RoboAct ...

  3. win7挂载NFS

    以下是在win7旗舰版下挂载NFS服务的步骤: 1 打开NFS服务 控制面板-->程序-->打开程序和功能-->NFS服务

  4. 测试文档锁:doc.LockDocument()

    /// <summary> /// 总结:用到DocumentManager.Open(filePath)时,如果是ForWrite,就需要用到lock文档锁. /// </summ ...

  5. 最小和(min)

    题目描述: N 个数排成一排,你可以任意选择连续的若干个数,算出它们的和.问该如何选择才能 使得和的绝对值最小. 如:N=8 时,8个数如下: 1    2    3     4    5    6 ...

  6. 浅谈Swift集合类型

    Swift 的集合表现形式由数组和字典组成.它可以完美的存储任何呢想存储的东西. 数组是一个同类型的序列化列表集合,它用来存储相同类型的不同值.字典也是一个数组,但它的存值方式类似于Map,通过一对一 ...

  7. node安装笔记

    安装node.js1.下载node可以直接下载二进制,也可以下载源代码再安装.我选择下载二进制: https://nodejs.org/dist/v4.6.0/node-v4.6.0-linux-x6 ...

  8. position定位

    CSS盒模型和定位的类型 为了搞清楚定位首先你得了解CSS盒模型.在上一句中的链接是我写在InstantShift 中的一篇关于盒模型的文章.我在那篇文章做了详细的讲解并会在这篇文章中做一个快速的总结 ...

  9. \(\S1 \) Gaussian Measure and Hermite Polynomials

    Define on \(\mathbb{R}^d\) the normalized Gaussian measure\[ d \gamma(x)=\frac{1}{(2\pi)^{\frac{d}{2 ...

  10. DataTable汇总

    一.排序 1 获取DataTable的默认视图 2 对视图设置排序表达式 3 用排序后的视图导出的新DataTable替换就DataTable (Asc升序可省略,多列排序用"," ...