前提,maven工程通过poi读写excel文件,需要在pom.xml中配置依赖关系:

在<dependencies>中添加如下代码

    <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>

1,页面标签及属性

input[type="button"]{background-color: #71BCF3;color: white;}
<form name="form" id="form" method="post" enctype="multipart/form-data">
<input type="file" name="upload" id="upload"style="display: none;"
onchange="document.form.path.value=this.value" multiple="multiple" accept=".xls,.xlsx,.csv" />
<input name="path" id="path" readonly>
<input type="button" value="医路通数据文件上传" onclick="document.form.upload.click()">
</form>
<input type="button" value="确定" onclick="readFile()">
function readFile(){

    var f = document.getElementById("form");
f.action = "<%=request.getContextPath()%>/mcp/MedicalDate/readExls.action?";
f.submit();
}

特别注意 : (一),提交文件标签的数据,一定要用form的action提交,否则有数据缺失 (二),form标签中,必须要有 enctype="multipart/form-data"

2,后台用@RequestParam(value = "upload") MultipartFile upload接文件数据

    @RequestMapping("/readExls")
public ModelAndView readExls(HttpServletRequest request, HttpServletResponse response,
@RequestParam(value = "upload") MultipartFile upload) throws IOException
{ String oldFile = upload.getOriginalFilename();
String suffix = oldFile.substring(oldFile.lastIndexOf(".")); log.info("oldFile:"+oldFile);//文件名
log.info("suffix:"+suffix);//文件后缀 InputStream inStream = upload.getInputStream();//文件流,可直接用
}

3,解析xls后缀文件将数据转换成为List<MedicalWhiteListVO>,以便对数据操作

 public List<MedicalWhiteListVO> readXls(InputStream inStream) throws IOException
{ InputStream is = inStream;
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is); List<MedicalWhiteListVO> medicalWhiteListVOs = new ArrayList<MedicalWhiteListVO>();
MedicalWhiteListVO medicalvo = null; // Read the Sheet
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0); if (hssfSheet == null) {
//continue;
return medicalWhiteListVOs;
} int lastRowNum = hssfSheet.getLastRowNum(); // Read the Row
for (int rowNum = 1; rowNum <= lastRowNum; rowNum++) { HSSFRow hssfRow = hssfSheet.getRow(rowNum); if (hssfRow != null) {
medicalvo = new MedicalWhiteListVO(); HSSFCell holderMobile = hssfRow.getCell(0);
HSSFCell holderRealName = hssfRow.getCell(1); HSSFCell holderBirthday = hssfRow.getCell(2);
HSSFCell policyApplyDate = hssfRow.getCell(3); medicalvo.setHolderMobile(getValue(holderMobile));
medicalvo.setHolderRealName(getValue(holderRealName)); try
{
medicalvo.setHolderBirthday(getDate(getValue(holderBirthday)));
medicalvo.setPolicyApplyDate(getDate(getValue(policyApplyDate)));
} catch (Exception e)
{
e.printStackTrace();
log.info("**日期格式转换异常*2222***");
} medicalWhiteListVOs.add(medicalvo);
}
}
return medicalWhiteListVOs;
}
public static Date getDate(String date) throws Exception{ Pattern pattern = Pattern.compile("^[0-9]*$");
Matcher matcher = pattern.matcher(date);
//判断是否可以转换成日期
if(StringUtils.isNullOrEmpty(date) || !matcher.matches()){
Date defaultDate = DateUtils.parse("1900-01-01");
System.out.println(DateUtils.format(defaultDate));
return defaultDate;
} Double str = Double.valueOf(date); int numday = (int) Math.round(str); Calendar d = Calendar.getInstance();
d.set(1900, 0, 1);
d.add(Calendar.DAY_OF_MONTH,numday); int year = d.get(Calendar.YEAR);
int month = d.get(Calendar.MONTH) + 1;
int day = d.get(Calendar.DAY_OF_MONTH)-2; String dateStr = year+"-"+month+"-"+day; Date newDate = DateUtils.parse(dateStr); System.out.println(DateUtils.format(newDate)); return newDate;
}
private static String getValue(HSSFCell hssfCell) { if(hssfCell==null){
return "";
} if (hssfCell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
return String.valueOf(hssfCell.getBooleanCellValue());
} else if (hssfCell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
return String.valueOf((int)hssfCell.getNumericCellValue());
}else {
return String.valueOf(hssfCell.getStringCellValue()==null?"":hssfCell.getStringCellValue());
}
}

4,解析xlsx后缀文件将数据转换成功List<MedicalWhiteListVO>,以便对数据操作

   public static List<MedicalWhiteListVO> readXlsx(InputStream inStream) throws IOException
{
//InputStream is = new FileInputStream(path); InputStream is = inStream; XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is); List<MedicalWhiteListVO> medicalWhiteListVOs = new ArrayList<MedicalWhiteListVO>();
MedicalWhiteListVO medicalvo = null; // Read the Sheet
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0); if (xssfSheet == null) {
return medicalWhiteListVOs;
} // Read the Row
for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) { XSSFRow xssfRow = xssfSheet.getRow(rowNum); if (xssfRow != null) {
medicalvo = new MedicalWhiteListVO(); XSSFCell holderMobile = xssfRow.getCell(0);
XSSFCell holderRealName = xssfRow.getCell(1);
XSSFCell holderBirthday = xssfRow.getCell(2);
XSSFCell policyApplyDate = xssfRow.getCell(3); medicalvo.setHolderMobile(getValue(holderMobile));
medicalvo.setHolderRealName(getValue(holderRealName)); try
{
medicalvo.setHolderBirthday(getDate(getValue(holderBirthday)));
medicalvo.setPolicyApplyDate(getDate(getValue(policyApplyDate)));
} catch (Exception e)
{
e.printStackTrace();
log.info("**日期格式转换异常*2***");
}
medicalWhiteListVOs.add(medicalvo);
}
} return medicalWhiteListVOs;
}
private static String getValue(XSSFCell xssfRow) {
if(xssfRow==null){
return "";
}
if (xssfRow.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
return String.valueOf(xssfRow.getBooleanCellValue());
} else if (xssfRow.getCellType() == Cell.CELL_TYPE_NUMERIC) {
return String.valueOf((int)xssfRow.getNumericCellValue());
}else {
return String.valueOf(xssfRow.getStringCellValue()==null?"":xssfRow.getStringCellValue());
}
}
public static Date getDate(String date) throws Exception{ Pattern pattern = Pattern.compile("^[0-9]*$");
Matcher matcher = pattern.matcher(date);
//判断是否可以转换成日期
if(StringUtils.isNullOrEmpty(date) || !matcher.matches()){
Date defaultDate = DateUtils.parse("1900-01-01");
System.out.println(DateUtils.format(defaultDate));
return defaultDate;
} Double str = Double.valueOf(date); int numday = (int) Math.round(str); Calendar d = Calendar.getInstance();
d.set(1900, 0, 1);
d.add(Calendar.DAY_OF_MONTH,numday); int year = d.get(Calendar.YEAR);
int month = d.get(Calendar.MONTH) + 1;
int day = d.get(Calendar.DAY_OF_MONTH)-2; String dateStr = year+"-"+month+"-"+day; Date newDate = DateUtils.parse(dateStr); System.out.println(DateUtils.format(newDate)); return newDate;
}

4,解析csv后缀文件将数据转换成功List<MedicalWhiteListVO>,以便对数据操作

public static List<MedicalWhiteListVO> readCsv(InputStream inStream) throws IOException
{
List<MedicalWhiteListVO> medicalWhiteListVOs = new ArrayList<MedicalWhiteListVO>();
MedicalWhiteListVO medicalvo = null; try {
//BufferedReader reader=new BufferedReader(new InputStreamReader(new FileInputStream(path),"GBK")); BufferedReader reader=new BufferedReader(new InputStreamReader(inStream,"GBK"));
//换成你的文件名 reader.readLine();//第一行信息,为标题信息,不用,如果需要,注释掉
String line = null;
int num = 0;
while((line=reader.readLine())!=null){
num ++;
String item[] = line.split(",");//CSV格式文件为逗号分隔符文件,这里根据逗号切分 medicalvo = new MedicalWhiteListVO(); medicalvo.setHolderMobile(getValue(item,0));
medicalvo.setHolderRealName(getValue(item,1));
medicalvo.setHolderBirthday(getCsvDate(getValue(item,2)));
medicalvo.setPolicyApplyDate(getCsvDate(getValue(item,3)));
medicalWhiteListVOs.add(medicalvo); } Log.info("**一共行数**:"+num); } catch (Exception e) {
e.printStackTrace();
} return medicalWhiteListVOs;
}
public static String getValue(String[] item,int index){ if(item.length > index){
String value = item[index];
return value;
}
return "";
}
public static Date getCsvDate(String item) throws Exception{ if(item.indexOf("/") > 0){
item = item.replaceAll("/", "-");
}else if(item.indexOf("年") > 0){
item = item.replaceAll("年", "-").replaceAll("月", "-").replaceAll("日","");
} Date birth = DateUtils.parse(item);
Date defaultDate = DateUtils.parse("1900-01-01"); if(birth.getTime() <= defaultDate.getTime()){
return defaultDate;
}
return birth;
}

注意java通过poi编写excel文件,需要工程共引入的jar有:

dom4j-1.6.1.jar

poi-3.9.jar

poi-ooxml-3.9.jar

poi-ooxml-schemas-3.9.jar

xmlbeans-2.3.0.jar

xml-resolver-1.2.jar

xmlschema-core-2.0.2.jar

xstream-1.3.1.jar

this is all over,i hope it helpful for you ,3q~

java读取excel文件(.xls,xlsx,csv)的更多相关文章

  1. phpexcel读取excel的xls xlsx csv格式

    我之前写过一篇PHP读取csv文件的内容 上代码index.php <?php /** * * @author XC * */ class Excel { public $currentShee ...

  2. 关于解决java读取excel文件遇空行抛空指针的问题 !

    关于解决java读取excel文件遇空行抛空指针的问题 ! package exceRead; import java.io.File; import java.io.FileInputStream; ...

  3. Java读取Excel文件的几种方法

    Java读取 Excel 文件的常用开源免费方法有以下几种: 1. JDBC-ODBC Excel Driver 2. jxl.jar 3. jcom.jar 4. poi.jar 简单介绍: 百度文 ...

  4. java读取excel文件的代码

    如下内容段是关于java读取excel文件的内容,应该能对各朋友有所用途. package com.zsmj.utilit; import java.io.FileInputStream;import ...

  5. java 读取Excel文件并数据持久化方法Demo

    import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util ...

  6. java读取excel文件数据导入mysql数据库

    这是我来公司的第二周的一个小学习任务,下面是实现过程: 1.建立maven工程(方便管理jar包) 在pom.xml导入 jxl,mysql-connector 依赖 可以在maven仓库搜索 2.建 ...

  7. JAVA 读取excel文件成List<Entity>

    package com.fsinfo.common.utils; import com.fsinfo.modules.enterprise.entity.EnterpriseRecordEntity; ...

  8. java 读取excel文件(只读取xls文件)

    package com.sun.test; import java.io.BufferedInputStream;import java.io.File;import java.io.FileInpu ...

  9. java读取txt/pdf/xls/xlsx/doc/docx/ppt/pptx

    环境准备txt利用common-iopdf利用pdfbox剩下的用POI关于POI,读取xls没啥特别的,主要是读取doc和ppt,需要下载poi源代码,然后将poi-src-3.7-20101029 ...

随机推荐

  1. JS如何获取上传标签的文件路径和文件名?

    如何使用JS获取type="file"的标签上传文件的文件路径及文件名: 代码: <!doctype html><html lang="en" ...

  2. Java并发集合(二)-ConcurrentSkipListMap分析和使用

    一.ConcurrentSkipListMap介绍 ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景.ConcurrentSkipListMap和TreeMap, ...

  3. c#devexpress GridContorl添加进度条

    demo 的实现图 下边是步骤和代码 1定义 时钟事件,定时的增加进度条的增量. 2:  添加进度条 3;定义字段属性 using System; using System.Collections.G ...

  4. 引用类型中的push()、pop()、shift()方法

    /** * write by waitingbar1014 * time 2013.10.18 * 用途:常用于如一堆游戏激活码中获得抽取的值 * **/ //有以下一个数组: var arrayli ...

  5. nginx + fastdfs 的开机自启动

    虚拟机每次启动之后都要重新启动一下fastdfs 和 nginx服务,比较麻烦,所以增加开机自启动: 编辑 /etc/rc.d/rc.local 文件,增加启动项: 1.编辑文件 vim /etc/r ...

  6. linux中的定时任务创建

    1.查看root用户身份下正常运行的定时任务 crontab -l -u XXX 列出XXX用户的所有定时任务,如有没有会提示 no crontab for XXX列出所有的用户:cat /etc/p ...

  7. eclipse中查找某一个字符串

    想要完全匹配查找一个字符串,如iCard,而iCardSys或iiCard这种都不行,可以用正则表达式来查找,如下: 参考链接:http://blog.csdn.net/u014656992/arti ...

  8. How to change and add some params to request in Laravel controller?

    $request->merge([ 'aae_id' => request('id', 0), 'foo' => 'bar', ]);

  9. SQL 获得两个时间段之间的数据

    一般保存在数据库中的日期精度很高,比如'2014-04-15 16:31:22.000' 而一般用户选择的时间精度是精确到日的,比如'2012-04-15' 所以你想取出两个日期之间的数据,如果用下面 ...

  10. QualNet/EXata的发展贯穿在美军网络中心战演进的始终

    QualNet/EXata的发展贯穿在美军网络中心战演进的始终 赵玉亭 1.   QualNet/EXata的前身GloMoSim是美国防部高级计划研究局(DARPA)在1994年启动的全球移动信息系 ...