java读取excel文件(.xls,xlsx,csv)
前提,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)的更多相关文章
- phpexcel读取excel的xls xlsx csv格式
我之前写过一篇PHP读取csv文件的内容 上代码index.php <?php /** * * @author XC * */ class Excel { public $currentShee ...
- 关于解决java读取excel文件遇空行抛空指针的问题 !
关于解决java读取excel文件遇空行抛空指针的问题 ! package exceRead; import java.io.File; import java.io.FileInputStream; ...
- Java读取Excel文件的几种方法
Java读取 Excel 文件的常用开源免费方法有以下几种: 1. JDBC-ODBC Excel Driver 2. jxl.jar 3. jcom.jar 4. poi.jar 简单介绍: 百度文 ...
- java读取excel文件的代码
如下内容段是关于java读取excel文件的内容,应该能对各朋友有所用途. package com.zsmj.utilit; import java.io.FileInputStream;import ...
- java 读取Excel文件并数据持久化方法Demo
import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util ...
- java读取excel文件数据导入mysql数据库
这是我来公司的第二周的一个小学习任务,下面是实现过程: 1.建立maven工程(方便管理jar包) 在pom.xml导入 jxl,mysql-connector 依赖 可以在maven仓库搜索 2.建 ...
- JAVA 读取excel文件成List<Entity>
package com.fsinfo.common.utils; import com.fsinfo.modules.enterprise.entity.EnterpriseRecordEntity; ...
- java 读取excel文件(只读取xls文件)
package com.sun.test; import java.io.BufferedInputStream;import java.io.File;import java.io.FileInpu ...
- java读取txt/pdf/xls/xlsx/doc/docx/ppt/pptx
环境准备txt利用common-iopdf利用pdfbox剩下的用POI关于POI,读取xls没啥特别的,主要是读取doc和ppt,需要下载poi源代码,然后将poi-src-3.7-20101029 ...
随机推荐
- django项目创建启动 ORM操作
. HTTP协议消息的格式: . 请求(request) 请求方法 路径 HTTP/1.1\r\n k1:v1\r\n ...\r\n \r\n 请求体 <-- 可以有,可以没有 . 响应(re ...
- 使用PreparedStatement时,输出完整的SQL语句
使用psstmt时不能打印出完整的sql语句,挺不方便的,找到一个实现方法,记录下来. package com.zhh.function.util; import java.io.InputStrea ...
- PAT 1024 科学计数法 (20)(精简版代码+思路+推荐测试样例)
1024 科学计数法 (20)(20 分) 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+, ...
- hdu 5441 Travel (2015长春网赛)
http://acm.hdu.edu.cn/showproblem.php?pid=5441 题目大意是给一个n个城市(点)m条路线(边)的双向的路线图,每条路线有时间值(带权图),然后q个询问,每个 ...
- iOS.AutoLayout.2.CustomView-with-AutoLayout
Custom View Which Support AutoLayout 创建支持AutoLayout的Custom View AutoLayout 通过使view更加的自组织来减轻controlle ...
- Business.Startup.Learning from Startup Mistakes at SpringSource
http://www.infoq.com/news/2014/07/startup-spring
- maven 单元测试 ( http://www.cnblogs.com/qinpengming/p/5225380.html )
对junit单元测试的报告:类似这样的结果 ------------------------------------------------------- T E S T S ----------- ...
- SpringBoot的读取properties文件的方式
转载:https://www.imooc.com/article/18252一.@ConfigurationProperties方式 自定义配置类:PropertiesConfig.java pack ...
- 比较完整的HIS系统解释(转载记录)
HIS系统即医院信息系统(全称为Hospital Information System).在国际学术界,它已被公认为是新兴的医学信息学的重要分支.HIS系统的有效运行,将提高医院各项工作的效率和质量, ...
- 进制转换(NOIP2000&NOIP水题测试(2017082301))
题目链接:进制转换 这题得明白其中的数学方法,明白后就不难了. 那么我们应该怎么计算呢? 其实也很简单. 我们依然采取辗转相除法. 但是,对于负的余数,我们需要进行一些处理. 我们怎么处理呢? 很简单 ...