代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
模块化的POI读取Excel
作者:
Dezai.CN
/ 发布于
2011/6/10
/
808
通过POI对excel的读取,支持excel的(除公式以外的其它类型).通过List和Map对Excel读取进行了友好封装,支持excel必选字段判断.
<div>package dointerface; import java.io.FileInputStream; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * @author yansheng * @since 2008/6/1 * @version 0.0.0.1 * */ public class ReadExcel { public static void main(String[] args) { ParseExcel parse = new ParseExcel(); try { int[] flag = {1, 0, 0, 0}; int num = 4; List> list = parse.parse(num, flag); int i=0; for (Map map : list) { i++; System.out.println("第"+ i +"行"); System.out.print(map.get("f1") + " : "); System.out.print(map.get("f2") + " : "); System.out.print(map.get("f3") + " : "); System.out.println(map.get("f4")); } } catch(Exception ex) { ex.printStackTrace(); System.out.println(ex.getMessage()); } } } class ParseExcel { /** * 实现excel按首行即标题读取,必须项必须与单元格行数一致 * @param num int 字段长度 * @param flag int[] 必选项组,不是必选项为0,是为1 * @return 返回从Excel中获得的以字段为组的 * List<Map<String, String>> * @throws Exception 必选项和类型不匹配异常 */ public List> parse(int num, int[] flag) throws Exception { List keyname = new ArrayList(); // 存储键值 ArrayList> list = new ArrayList>(); FileInputStream fis = null; fis = new FileInputStream("J:\\testExcel2.xls"); POIFSFileSystem pss = new POIFSFileSystem(fis); HSSFWorkbook workbook = new HSSFWorkbook(pss); //读取Sheet HSSFSheet sheet = workbook.getSheetAt(0); //读取行号 for (Iterator rit = sheet.rowIterator(); rit.hasNext(); ) { HSSFRow row = (HSSFRow)rit.next(); if (row.getRowNum() == 0) { //读取第一列字段名 Iterator cit = row.cellIterator(); while (cit.hasNext()) { HSSFCell cell = (HSSFCell)cit.next(); keyname.add(cell.getRichStringCellValue().toString()); } } else {// 遍历cell Map map = new HashMap(); for (int i=0; iString * @param row HSSFRow 行号 * @param columnNum HSSFCell 列号 * @param cell int 单位格 * @param flag int 必填项标志 * @return 将获得的数据转变为String */ public String match(HSSFRow row, HSSFCell cell, int columnNum, int flag) throws Exception { String str = ""; int rowNum = row.getRowNum() + 1; columnNum++; // 是否为必填位 if (flag == 1 && (cell == null || cell.getCellType() == HSSFCell.CELL_TYPE_BLANK)) { throw new Exception(rowNum + "行" + columnNum + "列为必填项"); } else if(cell != null) { if (cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) { // 是否为空型 str = ""; } else if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {// 是否为字符串型 str = cell.getRichStringCellValue().toString(); } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {// 是否为数值型 if (HSSFDateUtil.isCellDateFormatted(cell)) {// 是否为日期型 str = dateToString(cell.getDateCellValue(), "yyyy-MM-dd"); }else {// 是否为数值型 double d = cell.getNumericCellValue(); if (d-(int)d < Double.MIN_VALUE) { // 是否为int型 str = Integer.toString((int)d); } else { // 是否为double型 str = Double.toString(cell.getNumericCellValue()); } } } else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {// 是否为布尔型 str = Boolean.toString(cell.getBooleanCellValue()); } else { throw new Exception(rowNum + "行" + columnNum + "列数据类型不匹配"); } } return str; } /** * 将日期型转变为String型的工具方法 * @param date 日期 * @param pattern 日期格式 * @return String的返回值 */ public String dateToString(Date date, String pattern) { DateFormat format = new SimpleDateFormat(pattern); String str = format.format(date); return str; } } excel表内容 f1 f2 f3 f4 1 2 3 4 5 6 7 8 9 10 11 12</div> <div></div>
试试其它关键字
读取Excel
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
实现测量程序运行时间及cpu使用时间
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
Dezai.CN
贡献的其它代码
(
4037
)
.
多线程Socket服务器模块
.
生成随机密码
.
清除浮动样式
.
弹出窗口居中
.
抓取url的函数
.
使用base HTTP验证
.
div模拟iframe嵌入效果
.
通过header转向的方法
.
Session操作类
.
执行sqlite输入插入操作后获得自动编号的ID
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3