`

java 上传解析excel文件

阅读更多
/////////////////页面js代码
<script type="text/javascript">
var planMonth = "${param.planMonth}";
function import_rollPlan() {
var fileName = $("#excel").val();
if($("#excel").val()==''){
art.dialog({
content : "请选择文件",
lock : true
});
return;
}
if(fileName.lastIndexOf(".xlsx") != -1 || fileName.lastIndexOf(".xls") != -1) {
art.dialog({
width : "200px",
content:"文件加载成功,是否确定导入",
lock  : true,
button: [{name:'是',
         callback:function (){
window.setTimeout(function(){
$("#upForm").ajaxSubmit({
url : "${contextPath}/service/pageReq",
type : 'post',
    dataType : "json",
data : {content:"planMonth:" + planMonth, needcontrolprocess : "purRollPlanService.importRollPlan"},
success : function(data) {
var dialog  = art.dialog.get('importing_dialog');
dialog.close();
if (data.status == "FAIL") {
art.dialog({
title : "提示",
width : "350px",
content : "数据格式非法,导入失败!",
lock : true,
ok: function () {
_myDialog.close();
doSearch();
}
});
} else {
art.dialog({
title : "提示",
width : "350px",
content : data.expData.impResultMsg,
lock : true,
ok: function () {
_myDialog.close();
doSearch();
}
});
}
}
});
},10);
      
       art.dialog({
       id : "importing_dialog",
       title : "提示",
width : "200px",
content : "正在导入,请稍等...",
lock  : true
       });
      
},focus: true},
{name:'否'}
]
});
} else {
alert("请选择正确的excel文件!")
}

}
</script>

//////////////////
public abstract class AbstractExcelReader {

public abstract void doParse(Workbook workbook);
        /*
         *相当于
Reader(new a());

public class a implements Validate {

@Override
public void doValidate(InputStream inputStream) throws Exception {


String fileType = getType(inputStream);
if (StringUtils.isBlank(fileType)
|| (!FileType.XLSX.getValue().equals(fileType)
&& !FileType.XLS_DOC.getValue().equals(fileType) && !FileType.XLSX_DOCX
.getValue().equals(fileType))) {
throw new ServiceException("上传失败,请选择Excel类型文件! ");
}



}

}
        */
public void Reader() throws Exception {

Reader((InputStream inputStream) -> {

String fileType = getType(inputStream);
if (StringUtils.isBlank(fileType)
|| (!FileType.XLSX.getValue().equals(fileType)
&& !FileType.XLS_DOC.getValue().equals(fileType) && !FileType.XLSX_DOCX
.getValue().equals(fileType))) {
throw new ServiceException("上传失败,请选择Excel类型文件! ");
}

});
}

public void Reader(Validate validate) throws Exception {
MultiPartRequestWrapper mpRequest = (MultiPartRequestWrapper) HttpServletHolder
.getCurrentRequest();
//@sfit1092 解决ie安全警告
HttpServletHolder.getCurrentResponse().setContentType("application/octet-stream; charset=UTF-8");
// 导入的文件
File files = mpRequest.getFiles("excel")[0];
if (null == files) {
throw new FileNotFoundException("解析的文件不存在");
}
try (InputStream fileInputStream = new FileInputStream(files);) {
validate.doValidate(fileInputStream);

if (!fileInputStream.markSupported()) {
try (BufferedInputStream bufferedInputStream = new BufferedInputStream(
fileInputStream);) {
Workbook workbook = null;
if (POIFSFileSystem.hasPOIFSHeader(bufferedInputStream)) {
workbook = new HSSFWorkbook(bufferedInputStream);
} else if (POIXMLDocument
.hasOOXMLHeader(bufferedInputStream)) {
workbook = new XSSFWorkbook(
OPCPackage.open(bufferedInputStream));
} else {
throw new ServiceException("没有获得相应的workbook");
}
doParse(workbook);
}
}
}
}

/**
* * 判断文件类型
*
* @param inputStream
*
* @return 文件类型
*
*/
private static String getType(InputStream inputStream) throws IOException {
if (inputStream == null) {
return null;
}
String fileHead = getFileContent(inputStream);
if (fileHead == null || fileHead.length() == 0) {
return null;
}
fileHead = fileHead.toUpperCase();
FileType[] fileTypes = FileType.values();
for (FileType type : fileTypes) {
if (fileHead.startsWith(type.getValue())) {
return type.getValue();
}
}
throw new ServiceException("没有获取到响应的文件类型");
}

/**
* 得到文件头
*
* @param filePath
*            文件路径
* @return 文件头
* @throws IOException
*/
private static String getFileContent(InputStream inputStream)
throws IOException {
int length = 28;
byte[] b = null;
if (inputStream != null) {
inputStream.read(b = new byte[length], 0, length);
inputStream.skip(-length);
}
return FileTypeJudge.bytesToHexString(b);
}

public interface Validate {

public void doValidate(InputStream inputStream) throws Exception;
}

}


/***解析代码///////////////////////////
List<PurRollPlan> rollList = new ArrayList<PurRollPlan>();
try {
new AbstractExcelReader() {

@Override
public void doParse(Workbook workbook) {
Sheet f = workbook.getSheetAt(0);
int totalRow = f.getLastRowNum();
for (int i = 1; i <= totalRow; i++) {
Row row = f.getRow(i);
Cell cell1 = row.getCell(0);
Cell cell2 = row.getCell(1);
Cell cell3 = row.getCell(2);
Cell cell4 = row.getCell(3);
Cell cell5 = row.getCell(4);
// 计划月份转换
String planDate = cell1.getStringCellValue();
String planDate2 = planDate + "-01";
Date planDate3 = new Date();
try {
planDate3 = new SimpleDateFormat("yyyy-MM-dd")
.parse(planDate2);
} catch (ParseException e) {
logger.error("读取滚动计划时,设置计划月份异常!");
}
String materialCode = cell2.getStringCellValue();
String reqQuantity = cell3.getStringCellValue();
String reqDate = cell4.getStringCellValue();
reqDate = reqDate.replaceAll("\\/","-");
Date reqDate2 = new Date();
try {
reqDate2 = new SimpleDateFormat("yyyy-MM-dd")
.parse(reqDate);
} catch (ParseException e) {
logger.error("读取滚动计划时,设置需求日期异常!");
}
//加入计划月份和需求日期的校验
/*if(planDate3.after(reqDate2)) {


}*/
String supplierCode = cell5.getStringCellValue();
String supplierName = getSupplierName(supplierCode);
String materialName = getMaterialName(materialCode);
Date createTime = new Date();
String id = randomId();
ids.append(id);
PurRollPlan plan = new PurRollPlan();
plan.setId(id);
plan.setMaterialCode(materialCode);
plan.setMaturialDesc(materialName);
plan.setSupplierCode(supplierCode);
plan.setSupplierDesc(supplierName);
plan.setReqDate(reqDate2);
plan.setReqQuantity(Double.parseDouble(reqQuantity));
plan.setPlanDate(planDate3);
plan.setStatus("0");
plan.setSentStatus("0");
plan.setDelFlag("1");
String createPerson = UserUtil.getCurrentUser().getEmpCode();
plan.setCreatePerson(createPerson);
plan.setCreateTime(createTime);
rollList.add(plan);
}
}
}.Reader();
} catch (Exception e) {
logger.error("读取滚动计划异常!");
}
分享到:
评论

相关推荐

    java上传excel并且解析入库

    在Java开发中,上传并解析Excel文件是一种常见的需求,特别是在数据处理、报表导入或系统集成等场景。本篇文章将深入探讨如何实现这个功能,主要涉及的技术包括文件上传、Excel解析以及数据库操作。 首先,我们需要...

    java解析Excel文件并把数据存入数据库和导出数据为excel文件SpringBoot代码示例

    1、java解析读取excel文件中的数据,并写入数据库。 2、java读取数据库数据,并导出为excel文件。 3、README.md中有详细的操作步骤示例。 使用说明: 1. 先使用postman导入:other/excel相关.postman_collection....

    文件上传,java解析excel和csv 转javabean

    总结来说,Java提供了强大的工具来处理文件上传、解析Excel和CSV,以及将数据映射到Java Bean。理解这些概念和库的使用,将极大地提高你在实际项目中的效率。无论你是新手还是经验丰富的开发者,熟练掌握这些技能都...

    java 解析Excel 并判断解析的数据类型__Eclipse工程

    在Java编程环境中,解析Excel文件是一项常见的任务,特别是在数据处理、数据分析或自动化测试等领域。Eclipse作为Java开发的主流IDE,提供了丰富的工具和支持来完成这项工作。本项目名为"java 解析Excel 并判断解析...

    小项目上传解析excel文件

    在这个名为"小项目上传解析excel文件"的实践中,我们将探讨如何使用JavaWeb技术来实现Excel文件的上传、解析以及将数据存储到数据库中。以下是对这一主题的详细阐述: 1. **文件上传**: - 在JavaWeb应用中,文件...

    文件上传Excel解析相关的jar

    在上传并解析Excel文件后,我们可能需要将数据存储到数据库或进行进一步的数据处理。例如,可以遍历每个`Row`,获取`Cell`的值,然后根据业务逻辑进行处理。如果需要下载Excel,SpringMVC也提供了便捷的方式。可以...

    java解析excel并做数据有效性校验

    在Java编程中,解析Excel文件是一项常见的任务,特别是在数据处理、报表生成或数据分析等领域。Excel文件格式主要有两种:老式的`.xls`(基于BIFF格式)和较新的`.xlsx`(基于Open XML标准)。本篇将详细介绍如何...

    解析EXCEL文件源码

    本节详细介绍了如何使用Java解析EXCEL文件,包括文件的上传、读取、设置以及工作表的处理等关键步骤。这些知识点对于开发人员来说是非常实用的,尤其在处理大量Excel数据时更是必不可少的技术。通过上述代码示例,你...

    java文件上传和上传excel后并解析出来的小工具

    Java有许多库可以帮助解析Excel文件,如Apache POI。使用POI,可以创建一个工作簿对象,读取工作表,遍历单元格,获取并处理数据。 4. **异常处理**:在处理文件上传和解析时,需要考虑可能出现的异常,如文件类型...

    上传下载Excel的Demo,java代码

    导入Excel文件通常涉及到解析Excel文件的格式,如XLS或XLSX,然后将数据逐行读取并存储到合适的数据结构中,如List或Map。Java中常见的库如Apache POI或JExcelApi可以实现这样的操作。 在"创建t_student.sql"文件中...

    java解析excel并导入数据库的web工程

    回答csdn论坛:Java语言下excel导入到mysql数据库表...

    Java解析Excel文件并把数据存入数据库

    本篇文章主要介绍了Java解析Excel文件并把数据存入数据库的方法,涵盖了上传Excel文件、解析Excel文件、将数据存入数据库等多个方面的知识点。 一、上传Excel文件 在上传Excel文件时,需要在web.xml文件中配置...

    java版excel解析,并上传至mysql数据库

    首先,让我们详细探讨Java解析Excel的步骤: 1. **引入库**:为了处理Excel文件,我们通常会用到Apache POI库。Apache POI是Apache软件基金会的一个项目,提供了API来读写Microsoft Office格式的文件,包括Excel。...

    java上传并读取excel工具类

    本篇文章将深入探讨如何使用Java实现Excel文件的上传和读取,重点关注`MultiFile`转换为`File`以及处理多Sheet页的技巧。 首先,我们需要了解Java中处理Excel的库。Apache POI是一个广泛使用的开源库,它提供了API...

    java解析excel

    在Java编程环境中,解析Excel文件是一项常见的任务,特别是在数据处理、报表生成或数据分析等领域。Java提供了多种库来处理Excel文件,如Apache POI、JExcelAPI、OpenCSV等,但最常用的是Apache POI库,它是一个用于...

    java对Excel表格数据处理并以List集合返回(只要传Excel文件路径即可)

    java对Excel表格数据处理并以List集合返回(只要传Excel文件路径即可)

    Java解析Excel与导入Excel

    导入Excel的过程则相对复杂一些,因为需要解析Excel文件并将其数据转化为可操作的对象。easypoi提供了一个PoiService接口,你可以根据自己的业务需求实现这个接口。通常,你需要实现的方法包括读取Excel文件,解析每...

    Java上传下载excel、解析Excel、生成Excel的问题.docx

    在Java开发中,处理Excel文件是一项常见的任务,无论是上传、下载还是解析和生成。下面将详细阐述这个主题,包括如何实现Excel的下载、上传以及解析。 1. **Excel的下载** 下载Excel文件通常涉及将服务器上的文件...

    java读取上传excel文件和txt文件中的数据.doc

    ### Java读取上传的Excel与TXT文件数据解析 #### 一、引言 在实际开发过程中,经常需要处理用户上传的文件,特别是Excel文件和文本文件。这些文件中往往包含了重要的业务数据,需要通过程序来读取并进行进一步的...

    SpringBoot实现Excel文件解析

    在Spring Boot框架中,实现Excel文件的解析是一个常见的需求,特别是在数据导入、导出或数据分析的应用场景中。本文将深入探讨如何使用Spring Boot结合Java来处理Excel文件。 首先,我们需要引入处理Excel文件的库...

Global site tag (gtag.js) - Google Analytics