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 ...
随机推荐
- VS2013中Nuget程序包管理器控制台使用入门(二)-如何使用Nuget提供的帮助(原创)
如何使用Nuget提供的帮助? 1.从get-help Nuget开始,键入“get-help NuGet”以查看所有可用的 NuGet 命令. 用法: PM> get-help Nuget 主 ...
- mysql 添加外键
create table class( cid tinyint unsigned primary key auto_increment, caption varchar(15) not null)en ...
- css font-size=0的妙用
转自:css font-size=0有什么妙用? 回答一: 问题的根源是 inline(a标签默认是display:inline) 和 inline-block (.list-info 设置的是 di ...
- 常用的TCP Option
当前,TCP常用的Option如下所示———— Kind (Type) Length Name Reference 描述 & 用途 0 1 EOL RFC 793 选项列表结束 1 1 NOP ...
- MFC动态按钮的创建及其消息响应(自定义消息)
动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC_D_BTN 10000 2.在类的OnInitDialog()函数中动态创建按钮(建立按钮对象时最好建立对象的指针 ...
- id不连续
解决办法 Alter TABLE jf_day_pv_classify Drop id; Alter TABLE jf_day_pv_classify ADD id INT NOT NULL PRIM ...
- IOS初级:story board的跳转
本文要实现view1跳到view2,view2又跳回view1. 首先要在视图中拉出一条连接view1和view2的线. 下面是在view1的控制器中实现,从view1跳到view2 //发生跳转前会 ...
- Activiti任务认领
Activiti任务认领 TaskService taskService; taskService.setAssignee(String taskId, String userId);taskServ ...
- 使用Narrator读取RichTextBlock内容
先测试基本的RichTextBlock,看能否读取. 测试RichTextBlock中哪些子控件是可以被读取的. 结论:只有Hyperlink能Tab到,能被读取. 问题:RichTextBlock在 ...
- 【Erlang】源码安装
Erlang介绍 Erlang(['ə:læŋ])是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境. Erl ...